00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "controler-gmap-types.hh"
00026 #include "parameter-creation.hh"
00027 #include "vertex.hh"
00028 #include <cassert>
00029 using namespace std;
00030 using namespace GMap3d;
00031
00032 #define DEFAULT_SPHERE_NB_MERIDIANS (12)
00033 #define DEFAULT_SPHERE_NB_PARALLELS ( 6)
00034
00035 #define DEFAULT_CYLINDER_NB_MERIDIANS (10)
00036 #define DEFAULT_CYLINDER_NB_PARALLELS ( 4)
00037
00038 #define DEFAULT_PYRAMID_NB_MERIDIANS ( 8)
00039 #define DEFAULT_PYRAMID_NB_PARALLELS ( 8)
00040
00041 #define DEFAULT_TORUS_NB_MERIDIANS (12)
00042 #define DEFAULT_TORUS_NB_PARALLELS ( 6)
00043
00044 CParameterCreation::CParameterCreation(int ANbRef) :
00045 CParameter (ANbRef),
00046 FPolygonNbEdges (6),
00047 FMeshDimension (3),
00048 FMeshSubdivisionDimension(0),
00049 FCreatedFaces (CUBE_ALL),
00050 FCylinderNbMeridians (DEFAULT_CYLINDER_NB_MERIDIANS),
00051 FCylinderNbParallels (DEFAULT_CYLINDER_NB_PARALLELS),
00052 FCylinderClosedUp (true),
00053 FCylinderClosedDown (true),
00054 FPyramidNbMeridians (DEFAULT_PYRAMID_NB_MERIDIANS),
00055 FPyramidNbParallels (DEFAULT_PYRAMID_NB_PARALLELS),
00056 FPyramidClosed (true),
00057 FSphereNbMeridians (DEFAULT_SPHERE_NB_MERIDIANS),
00058 FSphereNbParallels (DEFAULT_SPHERE_NB_PARALLELS),
00059 FTorusNbMeridians (DEFAULT_TORUS_NB_MERIDIANS),
00060 FTorusNbParallels (DEFAULT_TORUS_NB_PARALLELS),
00061 FTorusRadiusRapport (0.5)
00062 {
00063
00064 FMeshNbSubdivisions[0] = 3;
00065 FMeshNbSubdivisions[1] = 3;
00066 FMeshNbSubdivisions[2] = 3;
00067 }
00068
00069 CParameterCreation::CParameterCreation(const CParameterCreation & AParam) :
00070 CParameter (AParam),
00071 FPolygonNbEdges (AParam.FPolygonNbEdges),
00072 FMeshDimension (AParam.FMeshDimension),
00073 FMeshSubdivisionDimension(AParam.FMeshSubdivisionDimension),
00074 FCreatedFaces (AParam.FCreatedFaces),
00075 FCylinderNbMeridians (AParam.FCylinderNbMeridians),
00076 FCylinderNbParallels (AParam.FCylinderNbParallels),
00077 FCylinderClosedUp (AParam.FCylinderClosedUp),
00078 FCylinderClosedDown (AParam.FCylinderClosedDown),
00079 FPyramidNbMeridians (AParam.FPyramidNbMeridians),
00080 FPyramidNbParallels (AParam.FPyramidNbParallels),
00081 FPyramidClosed (AParam.FPyramidClosed),
00082 FSphereNbMeridians (AParam.FSphereNbMeridians),
00083 FSphereNbParallels (AParam.FSphereNbParallels),
00084 FTorusNbMeridians (AParam.FTorusNbMeridians),
00085 FTorusNbParallels (AParam.FTorusNbParallels),
00086 FTorusRadiusRapport (AParam.FTorusRadiusRapport)
00087 {
00088 FMeshNbSubdivisions[0] = AParam.FMeshNbSubdivisions[0];
00089 FMeshNbSubdivisions[1] = AParam.FMeshNbSubdivisions[1];
00090 FMeshNbSubdivisions[2] = AParam.FMeshNbSubdivisions[2];
00091 }
00092
00093 CParameterCreation::~CParameterCreation()
00094 {}
00095
00096 CParameter * CParameterCreation::copy() const
00097 { return new CParameterCreation(*this); }
00098
00099 int CParameterCreation::getPolygonNbEdges() const
00100 { return FPolygonNbEdges; }
00101
00102 void CParameterCreation::setPolygonNbEdges(int ANbEdges)
00103 {
00104 assert(ANbEdges >= 2);
00105
00106 if ( FPolygonNbEdges!=ANbEdges )
00107 {
00108 putAllNeedToUpdate();
00109 FPolygonNbEdges= ANbEdges;
00110 }
00111 }
00112
00113 int CParameterCreation::getMeshNbSubdivisionsX() const
00114 {
00115 return FMeshNbSubdivisions[0];
00116 }
00117
00118 int CParameterCreation::getMeshNbSubdivisionsY() const
00119 {
00120 return FMeshNbSubdivisions[1];
00121 }
00122
00123 int CParameterCreation::getMeshNbSubdivisionsZ() const
00124 {
00125 return FMeshNbSubdivisions[2];
00126 }
00127
00128 void CParameterCreation::setMeshNbSubdivisionsX(int ASx)
00129 {
00130 assert(ASx > 0);
00131 if ( FMeshNbSubdivisions[0]!=ASx )
00132 {
00133 putAllNeedToUpdate();
00134 FMeshNbSubdivisions[0]= ASx;
00135 }
00136 }
00137
00138 void CParameterCreation::setMeshNbSubdivisionsY(int ASy)
00139 {
00140 assert(ASy > 0);
00141 if ( FMeshNbSubdivisions[1]!=ASy )
00142 {
00143 putAllNeedToUpdate();
00144 FMeshNbSubdivisions[1]= ASy;
00145 }
00146 }
00147
00148 void CParameterCreation::setMeshNbSubdivisionsZ(int ASz)
00149 {
00150 assert(ASz > 0);
00151 if ( FMeshNbSubdivisions[2]!=ASz )
00152 {
00153 putAllNeedToUpdate();
00154 FMeshNbSubdivisions[2] = ASz;
00155 }
00156 }
00157
00158 int CParameterCreation::getMeshDimension() const
00159 {
00160 return FMeshDimension;
00161 }
00162
00163 void CParameterCreation::setMeshDimension(int ADimension)
00164 {
00165 assert(1 <= ADimension && ADimension <= 3);
00166
00167 if ( FMeshDimension!=ADimension )
00168 {
00169 putAllNeedToUpdate();
00170 FMeshDimension= ADimension;
00171
00172 if (FMeshDimension < FMeshSubdivisionDimension)
00173 FMeshSubdivisionDimension= FMeshDimension;
00174 }
00175 }
00176
00177 int CParameterCreation::getMeshSubdivisionDimension() const
00178 {
00179 return FMeshSubdivisionDimension;
00180 }
00181
00182 void CParameterCreation::setMeshSubdivisionDimension(int ADimension)
00183 {
00184 assert(0 <= ADimension && ADimension <= 3);
00185
00186 if ( FMeshSubdivisionDimension!=ADimension )
00187 {
00188 putAllNeedToUpdate();
00189 FMeshSubdivisionDimension= ADimension;
00190
00191 if (FMeshDimension < FMeshSubdivisionDimension)
00192 FMeshDimension= FMeshSubdivisionDimension;
00193 }
00194 }
00195
00196 bool CParameterCreation::getMeshCreatedFacesActive() const
00197 {
00198 return FMeshSubdivisionDimension < 3;
00199 }
00200
00201 unsigned char CParameterCreation::getMeshCreatedFaces() const
00202 {
00203 return FCreatedFaces;
00204 }
00205
00206 bool CParameterCreation::getMeshCreatedFace(unsigned char AFace) const
00207 {
00208 assert(AFace == CUBE_X1 || AFace == CUBE_X2 ||
00209 AFace == CUBE_Y1 || AFace == CUBE_Y2 ||
00210 AFace == CUBE_Z1 || AFace == CUBE_Z2);
00211
00212 return FCreatedFaces & AFace;
00213 }
00214
00215 void CParameterCreation::setMeshCreatedFaces(unsigned char AFaces)
00216 {
00217 assert(AFaces <= CUBE_ALL);
00218 if ( FCreatedFaces!=AFaces )
00219 {
00220 putAllNeedToUpdate();
00221 FCreatedFaces= AFaces;
00222 }
00223 }
00224
00225 void CParameterCreation::setMeshCreatedFace(unsigned char AFace, bool AValue)
00226 {
00227 assert(AFace == CUBE_X1 || AFace == CUBE_X2 ||
00228 AFace == CUBE_Y1 || AFace == CUBE_Y2 ||
00229 AFace == CUBE_Z1 || AFace == CUBE_Z2);
00230
00231 putAllNeedToUpdate();
00232 if (AValue)
00233 FCreatedFaces |= AFace;
00234 else
00235 FCreatedFaces &= ~ AFace;
00236 }
00237
00238 int CParameterCreation::getCylinderNbMeridians() const
00239 {
00240 return FCylinderNbMeridians;
00241 }
00242
00243 void CParameterCreation::setCylinderNbMeridians(int ANb)
00244 {
00245 assert(ANb > 0);
00246 if ( FCylinderNbMeridians!=ANb )
00247 {
00248 putAllNeedToUpdate();
00249 FCylinderNbMeridians = ANb;
00250 }
00251 }
00252
00253 int CParameterCreation::getCylinderNbParallels() const
00254 {
00255 return FCylinderNbParallels;
00256 }
00257
00258 void CParameterCreation::setCylinderNbParallels(int ANb)
00259 {
00260 assert(ANb > 0);
00261 if ( FCylinderNbParallels!=ANb )
00262 {
00263 putAllNeedToUpdate();
00264 FCylinderNbParallels= ANb;
00265 }
00266 }
00267
00268 bool CParameterCreation::getCylinderClosedUp() const
00269 {
00270 return FCylinderClosedUp;
00271 }
00272
00273 void CParameterCreation::setCylinderClosedUp(bool AClosed)
00274 {
00275 if ( FCylinderClosedUp!= AClosed )
00276 {
00277 putAllNeedToUpdate();
00278 FCylinderClosedUp= AClosed;
00279 }
00280 }
00281
00282 bool CParameterCreation::getCylinderClosedDown() const
00283 {
00284 return FCylinderClosedDown;
00285 }
00286
00287 void CParameterCreation::setCylinderClosedDown(bool AClosed)
00288 {
00289 if ( FCylinderClosedDown!=AClosed )
00290 {
00291 putAllNeedToUpdate();
00292 FCylinderClosedDown= AClosed;
00293 }
00294 }
00295
00296 int CParameterCreation::getPyramidNbMeridians() const
00297 {
00298 return FPyramidNbMeridians;
00299 }
00300
00301 void CParameterCreation::setPyramidNbMeridians(int ANb)
00302 {
00303 assert(ANb > 0);
00304 if ( FPyramidNbMeridians!=ANb )
00305 {
00306 putAllNeedToUpdate();
00307 FPyramidNbMeridians= ANb;
00308 }
00309 }
00310
00311 int CParameterCreation::getPyramidNbParallels() const
00312 {
00313 return FPyramidNbParallels;
00314 }
00315
00316 void CParameterCreation::setPyramidNbParallels(int ANb)
00317 {
00318 assert(ANb > 0);
00319 if ( FPyramidNbParallels!=ANb )
00320 {
00321 putAllNeedToUpdate();
00322 FPyramidNbParallels= ANb;
00323 }
00324 }
00325
00326 bool CParameterCreation::getPyramidClosed() const
00327 {
00328 return FPyramidClosed;
00329 }
00330
00331 void CParameterCreation::setPyramidClosed(bool AClosed)
00332 {
00333 if ( FPyramidClosed!=AClosed )
00334 {
00335 putAllNeedToUpdate();
00336 FPyramidClosed= AClosed;
00337 }
00338 }
00339
00340 int CParameterCreation::getSphereNbMeridians() const
00341 {
00342 return FSphereNbMeridians;
00343 }
00344
00345 void CParameterCreation::setSphereNbMeridians(int ANb)
00346 {
00347 assert(ANb > 0);
00348 if ( FSphereNbMeridians!=ANb )
00349 {
00350 putAllNeedToUpdate();
00351 FSphereNbMeridians= ANb;
00352 }
00353 }
00354
00355 int CParameterCreation::getSphereNbParallels() const
00356 {
00357 return FSphereNbParallels;
00358 }
00359
00360 void CParameterCreation::setSphereNbParallels(int ANb)
00361 {
00362 assert(ANb > 0);
00363 if ( FSphereNbParallels!=ANb )
00364 {
00365 putAllNeedToUpdate();
00366 FSphereNbParallels= ANb;
00367 }
00368 }
00369
00370 int CParameterCreation::getTorusNbMeridians() const
00371 {
00372 return FTorusNbMeridians;
00373 }
00374
00375 void CParameterCreation::setTorusNbMeridians(int ANb)
00376 {
00377 assert(ANb > 0);
00378 if ( FTorusNbMeridians!=ANb )
00379 {
00380 putAllNeedToUpdate();
00381 FTorusNbMeridians= ANb;
00382 }
00383 }
00384
00385 int CParameterCreation::getTorusNbParallels() const
00386 {
00387 return FTorusNbParallels;
00388 }
00389
00390 void CParameterCreation::setTorusNbParallels(int ANb)
00391 {
00392 assert(ANb > 0);
00393 if ( FTorusNbParallels!=ANb )
00394 {
00395 putAllNeedToUpdate();
00396 FTorusNbParallels= ANb;
00397 }
00398 }
00399
00400 float CParameterCreation::getTorusRadiusRapport() const
00401 {
00402 return FTorusRadiusRapport;
00403 }
00404
00405 void CParameterCreation::setTorusRadiusRapport(float AValue)
00406 {
00407 assert(0.0 <= AValue && AValue <= 1.0);
00408 if ( FTorusRadiusRapport!=AValue )
00409 {
00410 putAllNeedToUpdate();
00411 FTorusRadiusRapport= AValue;
00412 }
00413 }
00414
00415 void CParameterCreation::save(ostream& )
00416 {}
00417
00418 void CParameterCreation::load(istream& )
00419 {}
00420
00421 void CParameterCreation::reinit()
00422 {}
00423
00424 int CParameterCreation::getType() const
00425 { return PARAMETER_CREATION; }
00426