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-object-scale.hh"
00027 #include "transformation-matrix.hh"
00028 #include "geometry.hh"
00029 using namespace std;
00030 using namespace GMap3d;
00031
00032 CParameterObjectScale::CParameterObjectScale(int ANbRef) :
00033 CParameter (ANbRef),
00034 FScaleType (SCALE_POINT),
00035 FCenter (ORIGIN),
00036 FVector (OZ),
00037 FCoef (CVertex(1.0,1.0,1.0)),
00038 FPonderation(false),
00039 FIsoScale (true)
00040 {}
00041
00042 CParameterObjectScale::
00043 CParameterObjectScale(const CParameterObjectScale & AParam) :
00044 CParameter (AParam),
00045 FScaleType (AParam.FScaleType),
00046 FCenter (AParam.FCenter),
00047 FVector (AParam.FVector),
00048 FCoef (AParam.FCoef),
00049 FPonderation(AParam.FPonderation),
00050 FIsoScale (AParam.FIsoScale)
00051 {}
00052
00053 CParameterObjectScale::~CParameterObjectScale()
00054 {
00055 }
00056
00057 CParameter * CParameterObjectScale::copy() const
00058 { return new CParameterObjectScale(*this); }
00059
00060 void CParameterObjectScale::load(istream& )
00061 {}
00062
00063 void CParameterObjectScale::save(ostream& )
00064 {}
00065
00066 void CParameterObjectScale::reinit()
00067 {}
00068
00069 int CParameterObjectScale::getType() const
00070 {
00071 return PARAMETER_OBJECT_SCALE;
00072 }
00073
00074 void CParameterObjectScale::setScaleType(TScaleType AScaleType)
00075 {
00076 if (FScaleType != AScaleType)
00077 {
00078 putAllNeedToUpdate();
00079 FScaleType = AScaleType;
00080
00081 if ( AScaleType!=SCALE_POINT)
00082 setIsoScale(true);
00083 }
00084 }
00085
00086 TScaleType CParameterObjectScale::getScaleType() const
00087 {
00088 return FScaleType;
00089 }
00090
00091 void CParameterObjectScale::setCenter(const CVertex & ACenter)
00092 {
00093 if (FCenter != ACenter)
00094 {
00095 putAllNeedToUpdate();
00096 FCenter = ACenter;
00097 }
00098 }
00099
00100 CVertex CParameterObjectScale::getCenter() const
00101 {
00102 return FCenter;
00103 }
00104
00105 void CParameterObjectScale::setVector(const CVertex & AVector)
00106 {
00107 if (FVector != AVector && !AVector.isNull())
00108 {
00109 putAllNeedToUpdate();
00110 FVector = AVector;
00111 }
00112 }
00113
00114 CVertex CParameterObjectScale::getVector() const
00115 {
00116 return FVector;
00117 }
00118
00119 bool CParameterObjectScale::getIsoScale()
00120 { return FIsoScale; }
00121
00122 void CParameterObjectScale::setIsoScale(bool AValue)
00123 {
00124 FIsoScale = AValue;
00125 if ( AValue )
00126 setIsoCoef(getCoef(0));
00127
00128 }
00129
00130 void CParameterObjectScale::setIsoCoef(float AValue)
00131 { FCoef.setXYZ(AValue,AValue,AValue); }
00132
00133 float CParameterObjectScale::getIsoCoef() const
00134 {
00135 assert( FCoef.getX()==FCoef.getY() && FCoef.getY()==FCoef.getZ() );
00136
00137 return FCoef.getX();
00138 }
00139
00140 void CParameterObjectScale::setCoef(const CVertex & AValue)
00141 { FCoef = AValue; }
00142
00143 CVertex CParameterObjectScale::getCoef() const
00144 { return FCoef; }
00145
00146 void CParameterObjectScale::setCoef(int ADim, float AValue)
00147 {
00148 switch (ADim)
00149 {
00150 case 0: setCoef(CVertex(AValue, getCoef(1), getCoef(2))); break;
00151 case 1: setCoef(CVertex(getCoef(0), AValue, getCoef(2))); break;
00152 case 2: setCoef(CVertex(getCoef(0), getCoef(1), AValue)); break;
00153 }
00154 }
00155
00156 float CParameterObjectScale::getCoef(int ADim) const
00157 {
00158 assert(0 <= ADim && ADim < 3);
00159 return FCoef.getCoord(ADim);
00160 }
00161
00162 void CParameterObjectScale::setPonderation(bool AActive)
00163 {
00164 if (FPonderation != AActive)
00165 {
00166 putAllNeedToUpdate();
00167 FPonderation = AActive;
00168 }
00169 }
00170
00171 bool CParameterObjectScale::getPonderation() const
00172 {
00173 return FPonderation;
00174 }
00175