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-operations.hh"
00027 using namespace std;
00028 using namespace GMap3d;
00029
00030 CParameterOperations::CParameterOperations(int ANbRef) :
00031 CParameter(ANbRef),
00032
00033 FRotateCells(true),
00034 FScaleCells(true),
00035 FTranslateCells(true),
00036
00037 FInterpolationMerges(true),
00038 FInterpolationSews (true),
00039
00040 FSmoothMerges(true),
00041 FSmoothSews (true),
00042 FSmoothMethod(SPLINE_SMOOTH),
00043
00044 FExtrusionCoef (1.0),
00045 FExtrusionRevolutionAngle (360.0),
00046 FExtrusionAdjacentSews (true),
00047 FExtrusionInitialPositionMode (1),
00048 FExtrusionInitialDirectionMode(1),
00049 FExtrusionDirection (true),
00050 FExtrusionScale (true),
00051 FExtrusionPonderateSection (false),
00052 FExtrusionRevolutionNbEdges (8)
00053 {
00054 FMeshNbSubdivisions[0] = 5;
00055 FMeshNbSubdivisions[1] = 5;
00056 FMeshNbSubdivisions[2] = 5;
00057
00058 FRoundingDefaultCoefs[0] = 0.2;
00059 FRoundingDefaultCoefs[1] = 0.2;
00060 FRoundingDefaultCoefs[2] = 0.2;
00061 }
00062
00063 CParameterOperations::
00064 CParameterOperations(const CParameterOperations & AParam) :
00065 CParameter (AParam),
00066
00067 FRotateCells (AParam.FRotateCells),
00068 FScaleCells (AParam.FScaleCells),
00069 FTranslateCells(AParam.FTranslateCells),
00070
00071 FInterpolationMerges(AParam.FInterpolationMerges),
00072 FInterpolationSews (AParam.FInterpolationSews),
00073
00074 FSmoothMerges(AParam.FSmoothMerges),
00075 FSmoothSews (AParam.FSmoothSews),
00076 FSmoothMethod(AParam.FSmoothMethod),
00077
00078 FExtrusionCoef (AParam.FExtrusionCoef),
00079 FExtrusionRevolutionAngle (AParam.FExtrusionRevolutionAngle),
00080 FExtrusionAdjacentSews (AParam.FExtrusionAdjacentSews),
00081 FExtrusionInitialPositionMode (AParam.FExtrusionInitialPositionMode),
00082 FExtrusionInitialDirectionMode(AParam.FExtrusionInitialDirectionMode),
00083 FExtrusionDirection (AParam.FExtrusionDirection),
00084 FExtrusionScale (AParam.FExtrusionScale),
00085 FExtrusionPonderateSection (AParam.FExtrusionPonderateSection),
00086 FExtrusionRevolutionNbEdges (AParam.FExtrusionRevolutionNbEdges)
00087 {
00088 FMeshNbSubdivisions[0] = AParam.FMeshNbSubdivisions[0];
00089 FMeshNbSubdivisions[1] = AParam.FMeshNbSubdivisions[1];
00090 FMeshNbSubdivisions[2] = AParam.FMeshNbSubdivisions[2];
00091
00092 FRoundingDefaultCoefs[0] = AParam.FRoundingDefaultCoefs[0];
00093 FRoundingDefaultCoefs[1] = AParam.FRoundingDefaultCoefs[1];
00094 FRoundingDefaultCoefs[2] = AParam.FRoundingDefaultCoefs[2];
00095 }
00096
00097 CParameterOperations::~CParameterOperations()
00098 {
00099 }
00100
00101 CParameter * CParameterOperations::copy() const
00102 { return new CParameterOperations(*this); }
00103
00104 void CParameterOperations::load(istream& )
00105 {}
00106
00107 void CParameterOperations::save(ostream& )
00108 {}
00109
00110 void CParameterOperations::reinit()
00111 {}
00112
00113 int CParameterOperations::getType() const
00114 {
00115 return PARAMETER_OPERATIONS;
00116 }
00117
00118 void CParameterOperations::setRotateCells(bool ABool)
00119 {
00120 if ( FRotateCells!=ABool )
00121 {
00122 putAllNeedToUpdate();
00123 FRotateCells = ABool;
00124 }
00125 }
00126
00127 bool CParameterOperations::getRotateCells() const
00128 {
00129 return FRotateCells;
00130 }
00131
00132 void CParameterOperations::setScaleCells(bool ABool)
00133 {
00134 if ( FScaleCells!=ABool )
00135 {
00136 putAllNeedToUpdate();
00137 FScaleCells = ABool;
00138 }
00139 }
00140
00141 bool CParameterOperations::getScaleCells() const
00142 {
00143 return FScaleCells;
00144 }
00145
00146 void CParameterOperations::setTranslateCells(bool ABool)
00147 {
00148 if ( FTranslateCells!=ABool )
00149 {
00150 putAllNeedToUpdate();
00151 FTranslateCells = ABool;
00152 }
00153 }
00154
00155 bool CParameterOperations::getTranslateCells() const
00156 {
00157 return FTranslateCells;
00158 }
00159
00160 int CParameterOperations::getMeshNbSubdivisionsX() const
00161 {
00162 return FMeshNbSubdivisions[0];
00163 }
00164
00165 int CParameterOperations::getMeshNbSubdivisionsY() const
00166 {
00167 return FMeshNbSubdivisions[1];
00168 }
00169
00170 int CParameterOperations::getMeshNbSubdivisionsZ() const
00171 {
00172 return FMeshNbSubdivisions[2];
00173 }
00174
00175 void CParameterOperations::setMeshNbSubdivisionsX(int ASx)
00176 {
00177 assert(0 < ASx);
00178 FMeshNbSubdivisions[0] = ASx;
00179 }
00180
00181 void CParameterOperations::setMeshNbSubdivisionsY(int ASy)
00182 {
00183 assert(0 < ASy);
00184 FMeshNbSubdivisions[1] = ASy;
00185 }
00186
00187 void CParameterOperations::setMeshNbSubdivisionsZ(int ASz)
00188 {
00189 assert(0 < ASz);
00190 FMeshNbSubdivisions[2] = ASz;
00191 }
00192
00193 bool CParameterOperations::getInterpolationMerges() const
00194 { return FInterpolationMerges; }
00195
00196 void CParameterOperations::setInterpolationMerges(bool ABool)
00197 {
00198 if ( FInterpolationMerges!=ABool )
00199 {
00200 putAllNeedToUpdate();
00201 FInterpolationMerges = ABool;
00202 }
00203 }
00204
00205 bool CParameterOperations::getInterpolationSews() const
00206 {
00207 if (isActiveInterpolationSews()) return FInterpolationSews;
00208
00209 return false;
00210 }
00211
00212 void CParameterOperations::setInterpolationSews(bool ABool)
00213 {
00214 if ( FInterpolationSews!=ABool && isActiveInterpolationSews() )
00215 {
00216 putAllNeedToUpdate();
00217 FInterpolationSews = ABool;
00218 }
00219 }
00220
00221 bool CParameterOperations::isActiveInterpolationSews() const
00222 { return !getInterpolationMerges(); }
00223
00224 bool CParameterOperations::getSmoothMerges() const
00225 {
00226 if (isActiveSmoothMerges()) return FSmoothMerges;
00227
00228 return false;
00229 }
00230
00231 void CParameterOperations::setSmoothMerges(bool ABool)
00232 {
00233 if ( FSmoothMerges!=ABool && isActiveSmoothMerges() )
00234 {
00235 putAllNeedToUpdate();
00236 FSmoothMerges = ABool;
00237 }
00238 }
00239
00240 bool CParameterOperations::getSmoothSews() const
00241 {
00242 if (isActiveSmoothSews()) return FSmoothSews;
00243
00244 return false;
00245 }
00246
00247 void CParameterOperations::setSmoothSews(bool ABool)
00248 {
00249 if ( FSmoothSews!=ABool && isActiveSmoothSews() )
00250 {
00251 putAllNeedToUpdate();
00252 FSmoothSews = ABool;
00253 }
00254 }
00255
00256 TSmoothType CParameterOperations:: getSmoothMethod() const
00257 { return FSmoothMethod; }
00258
00259 void CParameterOperations::setSmoothMethod(TSmoothType AValue)
00260 {
00261 assert(HERMITE_SMOOTH<=AValue && AValue<=SPLINE_SMOOTH );
00262 if ( FSmoothMethod!=AValue )
00263 {
00264 putAllNeedToUpdate();
00265 FSmoothMethod = AValue;
00266 }
00267 }
00268
00269 static const CTransformationMatrix * SMOOTH_MATRIX[] =
00270 {
00271 & HERMITE,
00272 & BEZIER,
00273 & OVERHAUSER,
00274 & SPLINE
00275 };
00276
00277 const CTransformationMatrix & CParameterOperations::getMeshMatrix() const
00278 {
00279 return * SMOOTH_MATRIX[FSmoothMethod];
00280 }
00281
00282 static const bool CAN_MERGE[] =
00283 {
00284 true ,
00285 false,
00286 true ,
00287 false
00288 };
00289
00290 static const bool CAN_SEW[] =
00291 {
00292 true ,
00293 false,
00294 true ,
00295 true
00296 };
00297
00298 bool CParameterOperations::isActiveSmoothMerges() const
00299 {
00300 assert(HERMITE_SMOOTH<=FSmoothMethod && FSmoothMethod<=SPLINE_SMOOTH );
00301
00302 return CAN_MERGE[FSmoothMethod];
00303 }
00304 bool CParameterOperations::isActiveSmoothSews() const
00305 {
00306 assert(HERMITE_SMOOTH<=FSmoothMethod && FSmoothMethod<=SPLINE_SMOOTH );
00307
00308 return CAN_SEW[FSmoothMethod] && !getSmoothMerges();
00309 }
00310
00311 float CParameterOperations::getExtrusionCoef() const
00312 {
00313 return FExtrusionCoef;
00314 }
00315
00316 void CParameterOperations::setExtrusionCoef(float ACoef)
00317 {
00318 FExtrusionCoef = ACoef;
00319 }
00320
00321 float CParameterOperations::getExtrusionRevolutionAngle() const
00322 {
00323 return FExtrusionRevolutionAngle;
00324 }
00325
00326 void CParameterOperations::setExtrusionRevolutionAngle(float AAngle)
00327 {
00328 FExtrusionRevolutionAngle = AAngle;
00329 }
00330
00331 bool CParameterOperations::getExtrusionAdjacentSews() const
00332 { return FExtrusionAdjacentSews; }
00333
00334 void CParameterOperations::setExtrusionAdjacentSews(bool ABool)
00335 {
00336 if ( FExtrusionAdjacentSews!=ABool )
00337 {
00338 putAllNeedToUpdate();
00339 FExtrusionAdjacentSews = ABool;
00340 }
00341 }
00342
00343 int CParameterOperations:: getExtrusionInitialPositionMode() const
00344 { return FExtrusionInitialPositionMode; }
00345
00346 void CParameterOperations::setExtrusionInitialPositionMode(int AValue)
00347 {
00348 if ( FExtrusionInitialPositionMode!=AValue )
00349 {
00350 putAllNeedToUpdate();
00351 FExtrusionInitialPositionMode = AValue;
00352 }
00353 }
00354
00355 int CParameterOperations:: getExtrusionInitialDirectionMode() const
00356 { return FExtrusionInitialDirectionMode; }
00357
00358 void CParameterOperations::setExtrusionInitialDirectionMode(int AValue)
00359 {
00360 if ( FExtrusionInitialDirectionMode!=AValue )
00361 {
00362 putAllNeedToUpdate();
00363 FExtrusionInitialDirectionMode = AValue;
00364 }
00365 }
00366
00367 bool CParameterOperations::getExtrusionDirection() const
00368 { return FExtrusionDirection; }
00369
00370 void CParameterOperations::setExtrusionDirection(bool ABool)
00371 {
00372 if ( FExtrusionDirection!=ABool )
00373 {
00374 putAllNeedToUpdate();
00375 FExtrusionDirection = ABool;
00376 }
00377 }
00378
00379 bool CParameterOperations:: getExtrusionScale() const
00380 { return FExtrusionScale; }
00381
00382 void CParameterOperations::setExtrusionScale(bool ABool)
00383 {
00384 if ( FExtrusionScale!=ABool )
00385 {
00386 putAllNeedToUpdate();
00387 FExtrusionScale = ABool;
00388 }
00389 }
00390
00391 bool CParameterOperations::getExtrusionPonderateSection() const
00392 { return FExtrusionPonderateSection; }
00393
00394 void CParameterOperations::setExtrusionPonderateSection(bool ABool)
00395 {
00396 if ( FExtrusionPonderateSection!=ABool )
00397 {
00398 putAllNeedToUpdate();
00399 FExtrusionPonderateSection = ABool;
00400 }
00401 }
00402
00403 int CParameterOperations:: getExtrusionRevolutionNbEdges() const
00404 { return FExtrusionRevolutionNbEdges; }
00405
00406 void CParameterOperations::setExtrusionRevolutionNbEdges(int AValue)
00407 {
00408 if ( FExtrusionRevolutionNbEdges!=AValue )
00409 {
00410 putAllNeedToUpdate();
00411 FExtrusionRevolutionNbEdges = AValue;
00412 }
00413 }
00414
00415 float CParameterOperations::getDefaultRoundingCoefForVertices() const
00416 {
00417 return FRoundingDefaultCoefs[0];
00418 }
00419
00420 void CParameterOperations::setDefaultRoundingCoefForVertices(float ACoef)
00421 {
00422 FRoundingDefaultCoefs[0] = ACoef;
00423 }
00424
00425 float CParameterOperations::getDefaultRoundingCoefForEdges() const
00426 {
00427 return FRoundingDefaultCoefs[1];
00428 }
00429
00430 void CParameterOperations::setDefaultRoundingCoefForEdges(float ACoef)
00431 {
00432 FRoundingDefaultCoefs[1] = ACoef;
00433 }
00434
00435 float CParameterOperations::getDefaultRoundingCoefForFaces() const
00436 {
00437 return FRoundingDefaultCoefs[2];
00438 }
00439
00440 void CParameterOperations::setDefaultRoundingCoefForFaces(float ACoef)
00441 {
00442 FRoundingDefaultCoefs[2] = ACoef;
00443 }
00444