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 "math-extension.hh"
00027 #include "parameters-gmap-default-values.hh"
00028 #include "parameter-dart.hh"
00029 #include <cassert>
00030 #include <cstring>
00031 using namespace std;
00032 using namespace GMap3d;
00033
00034 CParameterDart::CParameterDart(int ANbSelectionLevels, int ANbRef) :
00035 CParameter (ANbRef),
00036 FNbSelectionLevels(ANbSelectionLevels)
00037 {
00038 assert(FNbSelectionLevels>0);
00039
00040 FCLUnsel = new float * [FNbSelectionLevels];
00041 FCLSel = new float * [FNbSelectionLevels];
00042 FCLLastSel = new float * [FNbSelectionLevels];
00043
00044 for (int i=0; i<FNbSelectionLevels; ++i)
00045 {
00046 FCLUnsel[i] = new float[3];
00047 FCLSel[i] = new float[3];
00048 FCLLastSel[i] = new float[3];
00049 }
00050
00051 reinit();
00052 }
00053
00054 CParameterDart::CParameterDart(const CParameterDart & AParam) :
00055 CParameter (AParam),
00056 FNbSelectionLevels(AParam.FNbSelectionLevels),
00057 FLWDarts (AParam.FLWDarts),
00058 FSAloneDarts (AParam.FSAloneDarts)
00059 {
00060 assert(FNbSelectionLevels>0);
00061
00062 FCLUnsel = new float * [FNbSelectionLevels];
00063 FCLSel = new float * [FNbSelectionLevels];
00064 FCLLastSel = new float * [FNbSelectionLevels];
00065
00066 for (int i=0; i<FNbSelectionLevels; ++i)
00067 {
00068 FCLUnsel[i] = new float[3];
00069 setCLUnsel(i, AParam.getCLUnsel(i));
00070
00071 FCLSel[i] = new float[3];
00072 setCLSel(i, AParam.getCLSel(i));
00073
00074 FCLLastSel[i] = new float[3];
00075 setCLLastSel(i, AParam.getCLLastSel(i));
00076 }
00077 }
00078
00079 CParameterDart::~CParameterDart()
00080 {
00081 for (int i=0; i<FNbSelectionLevels; ++i)
00082 {
00083 delete [] FCLUnsel [i];
00084 delete [] FCLSel [i];
00085 delete [] FCLLastSel[i];
00086 }
00087
00088 delete [] FCLUnsel ;
00089 delete [] FCLSel ;
00090 delete [] FCLLastSel;
00091 }
00092
00093 CParameter * CParameterDart::copy() const
00094 { return new CParameterDart(*this); }
00095
00096 void CParameterDart::save(ostream& AStream)
00097 { AStream<<(*this); }
00098
00099 void CParameterDart::load(istream& AStream)
00100 { AStream>>(*this); }
00101
00102 void CParameterDart::reinit()
00103 {
00104 assert (FNbSelectionLevels>0);
00105
00106 FLWDarts = DEFAULT_DART_LINE_WIDTH;
00107 FSAloneDarts = DEFAULT_DART_SIZE_ALONE;
00108
00109 setCLUnsel(0,
00110 DEFAULT_DART_COUL_1UNSEL_0,
00111 DEFAULT_DART_COUL_1UNSEL_1,
00112 DEFAULT_DART_COUL_1UNSEL_2);
00113 setCLSel(0,
00114 DEFAULT_DART_COUL_1SEL_0,
00115 DEFAULT_DART_COUL_1SEL_1,
00116 DEFAULT_DART_COUL_1SEL_2);
00117 setCLLastSel(0,
00118 DEFAULT_DART_COUL_1LAST_0,
00119 DEFAULT_DART_COUL_1LAST_1,
00120 DEFAULT_DART_COUL_1LAST_2);
00121
00122 putAllNeedToUpdate();
00123
00124 if (FNbSelectionLevels==1) return;
00125
00126 setCLUnsel(1,
00127 DEFAULT_DART_COUL_2UNSEL_0,
00128 DEFAULT_DART_COUL_2UNSEL_1,
00129 DEFAULT_DART_COUL_2UNSEL_2);
00130 setCLSel(1,
00131 DEFAULT_DART_COUL_2SEL_0,
00132 DEFAULT_DART_COUL_2SEL_1,
00133 DEFAULT_DART_COUL_2SEL_2);
00134 setCLLastSel(1,
00135 DEFAULT_DART_COUL_2LAST_0,
00136 DEFAULT_DART_COUL_2LAST_1,
00137 DEFAULT_DART_COUL_2LAST_2);
00138
00139 if (FNbSelectionLevels==2) return;
00140
00141 setCLUnsel(2,
00142 DEFAULT_DART_COUL_3UNSEL_0,
00143 DEFAULT_DART_COUL_3UNSEL_1,
00144 DEFAULT_DART_COUL_3UNSEL_2);
00145 setCLSel(2,
00146 DEFAULT_DART_COUL_3SEL_0,
00147 DEFAULT_DART_COUL_3SEL_1,
00148 DEFAULT_DART_COUL_3SEL_2);
00149 setCLLastSel(2,
00150 DEFAULT_DART_COUL_3LAST_0,
00151 DEFAULT_DART_COUL_3LAST_1,
00152 DEFAULT_DART_COUL_3LAST_2);
00153
00154 for (int i=3; i<FNbSelectionLevels; ++i)
00155 {
00156 setCLUnsel(i,
00157 DEFAULT_DART_COUL_nUNSEL_0,
00158 DEFAULT_DART_COUL_nUNSEL_1,
00159 DEFAULT_DART_COUL_nUNSEL_2);
00160 setCLSel(i,
00161 DEFAULT_DART_COUL_nSEL_0,
00162 DEFAULT_DART_COUL_nSEL_1,
00163 DEFAULT_DART_COUL_nSEL_2);
00164 setCLLastSel(i,
00165 DEFAULT_DART_COUL_nLAST_0,
00166 DEFAULT_DART_COUL_nLAST_1,
00167 DEFAULT_DART_COUL_nLAST_2);
00168 }
00169 }
00170
00171 namespace GMap3d
00172 {
00173
00174 ostream& operator<<(ostream& AStream, const CParameterDart & AParameter)
00175 {
00176 AStream<<"CParameterDart:"<<endl;
00177
00178 AStream<<" LineWidth: "<<AParameter.FLWDarts<<endl;
00179
00180 AStream<<" SizeAlone: "<<AParameter.FSAloneDarts<<endl;
00181
00182 AStream<<" SelectionLevelNumber: "<<AParameter.FNbSelectionLevels<<endl;
00183
00184 for (int i=0; i<AParameter.FNbSelectionLevels; ++i)
00185 {
00186 AStream<<" ColorUnsel "<<i<<": "<<AParameter.FCLUnsel[i][0]<<" "
00187 <<AParameter.FCLUnsel[i][1]<<" "<<AParameter.FCLUnsel[i][2]<<endl;
00188
00189 AStream<<" ColorSel "<<i<<": "<<AParameter.FCLSel[i][0]<<" "
00190 <<AParameter.FCLSel[i][1]<<" "<<AParameter.FCLSel[i][2]<<endl;
00191
00192 AStream<<" ColorLast "<<i<<": "<<AParameter.FCLLastSel[i][0]<<" "
00193 <<AParameter.FCLLastSel[i][1]<<" "<<AParameter.FCLLastSel[i][2]<<endl;
00194 }
00195
00196 AStream<<endl;
00197
00198 return AStream;
00199 }
00200
00201 istream& operator>>(istream& AStream, CParameterDart & AParameter)
00202 {
00203 char tmp[256];
00204
00205 AStream>>tmp; assert ( !strcmp(tmp, "CParameterDart:") );
00206
00207 AStream>>tmp; assert ( !strcmp(tmp, "LineWidth:") );
00208 AStream>>AParameter.FLWDarts;
00209
00210 AStream>>tmp; assert ( !strcmp(tmp, "SizeAlone:") );
00211 AStream>>AParameter.FSAloneDarts;
00212
00213 int nb, toRead, toIgnore;
00214 AStream>>tmp; assert ( !strcmp(tmp, "SelectionLevelNumber:") );
00215 AStream>>nb;
00216
00217 toRead = MIN(nb,AParameter.FNbSelectionLevels);
00218 toIgnore = nb - AParameter.FNbSelectionLevels;
00219
00220 int i;
00221 for (i=0; i<toRead; ++i)
00222 {
00223 AStream>>tmp; assert( !strcmp(tmp,"ColorUnsel") ); AStream>>tmp;
00224 AStream>>AParameter.FCLUnsel[i][0]
00225 >>AParameter.FCLUnsel[i][1]>>AParameter.FCLUnsel[i][2];
00226
00227 AStream>>tmp; assert( !strcmp(tmp,"ColorSel") ); AStream>>tmp;
00228 AStream>>AParameter.FCLSel[i][0]
00229 >>AParameter.FCLSel[i][1]>>AParameter.FCLSel[i][2];
00230
00231 AStream>>tmp; assert( !strcmp(tmp,"ColorLast") ); AStream>>tmp;
00232 AStream>>AParameter.FCLLastSel[i][0]
00233 >>AParameter.FCLLastSel[i][1]>>AParameter.FCLLastSel[i][2];
00234 }
00235
00236 for (i=0; i<toIgnore; ++i)
00237 {
00238 float dummy;
00239 AStream>>tmp; assert( !strcmp(tmp,"ColorUnsel") ); AStream>>tmp;
00240 AStream>>dummy>>dummy>>dummy;
00241 AStream>>tmp; assert( !strcmp(tmp,"ColorSel") ); AStream>>tmp;
00242 AStream>>dummy>>dummy>>dummy;
00243 AStream>>tmp; assert( !strcmp(tmp,"ColorLast") ); AStream>>tmp;
00244 AStream>>dummy>>dummy>>dummy;
00245 }
00246
00247 AParameter.putAllNeedToUpdate();
00248
00249 return AStream;
00250 }
00251
00252 }
00253
00254 int CParameterDart::getLWDarts() const
00255 { return FLWDarts; }
00256
00257 void CParameterDart::setLWDarts(int AValue)
00258 {
00259 if (FLWDarts!=AValue)
00260 {
00261 putAllNeedToUpdate();
00262 FLWDarts= AValue;
00263 }
00264 }
00265
00266 int CParameterDart::getSAloneDarts() const
00267 { return FSAloneDarts; }
00268
00269 void CParameterDart::setSAloneDarts(int AValue)
00270 {
00271 if (FSAloneDarts!=AValue)
00272 {
00273 putAllNeedToUpdate();
00274 FSAloneDarts= AValue;
00275 }
00276 }
00277
00278 float CParameterDart::getCLUnsel(int ALevel, int AIndice) const
00279 {
00280 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00281 assert(0<=AIndice && AIndice<=2);
00282 return FCLUnsel[ALevel][AIndice];
00283 }
00284
00285 void CParameterDart::setCLUnsel(int ALevel, int AIndice, float AValue)
00286 {
00287 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00288 assert(0<=AIndice && AIndice<=2);
00289 if (FCLUnsel[ALevel][AIndice]!=AValue)
00290 {
00291 putAllNeedToUpdate();
00292 FCLUnsel[ALevel][AIndice]= AValue;
00293 }
00294 }
00295
00296 const float * CParameterDart::getCLUnsel(int ALevel) const
00297 {
00298 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00299 return FCLUnsel[ALevel];
00300 }
00301
00302 void CParameterDart::setCLUnsel(int ALevel,
00303 float AValue0, float AValue1, float AValue2)
00304 {
00305 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00306 if ( FCLUnsel[ALevel][0]!=AValue0 ||
00307 FCLUnsel[ALevel][1]!=AValue1 ||
00308 FCLUnsel[ALevel][2]!=AValue2 )
00309 {
00310 putAllNeedToUpdate();
00311 FCLUnsel[ALevel][0]= AValue0;
00312 FCLUnsel[ALevel][1]= AValue1;
00313 FCLUnsel[ALevel][2]= AValue2;
00314 }
00315 }
00316 void CParameterDart::setCLUnsel(int ALevel,const float ATab[3])
00317 { setCLUnsel(ALevel,ATab[0],ATab[1],ATab[2]); }
00318
00319 float CParameterDart::getCLSel(int ALevel, int AIndice) const
00320 {
00321 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00322 assert(0<=AIndice && AIndice<=2);
00323 return FCLSel[ALevel][AIndice];
00324 }
00325 void CParameterDart::setCLSel(int ALevel, int AIndice, float AValue)
00326 {
00327 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00328 assert(0<=AIndice && AIndice<=2);
00329 if (FCLSel[ALevel][AIndice]!=AValue)
00330 {
00331 putAllNeedToUpdate();
00332 FCLSel[ALevel][AIndice]= AValue;
00333 }
00334 }
00335 const float * CParameterDart::getCLSel(int ALevel) const
00336 {
00337 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00338 return FCLSel[ALevel];
00339 }
00340 void CParameterDart::setCLSel(int ALevel,
00341 float AValue0, float AValue1, float AValue2)
00342 {
00343 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00344 if ( FCLSel[ALevel][0]!=AValue0 ||
00345 FCLSel[ALevel][1]!=AValue1 ||
00346 FCLSel[ALevel][2]!=AValue2 )
00347 {
00348 putAllNeedToUpdate();
00349 FCLSel[ALevel][0]= AValue0;
00350 FCLSel[ALevel][1]= AValue1;
00351 FCLSel[ALevel][2]= AValue2;
00352 }
00353 }
00354 void CParameterDart::setCLSel(int ALevel,const float ATab[3])
00355 { setCLSel(ALevel,ATab[0],ATab[1],ATab[2]); }
00356
00357 float CParameterDart::getCLLastSel(int ALevel, int AIndice) const
00358 {
00359 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00360 assert(0<=AIndice && AIndice<=2);
00361 return FCLLastSel[ALevel][AIndice];
00362 }
00363 void CParameterDart::setCLLastSel(int ALevel, int AIndice, float AValue)
00364 {
00365 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00366 assert(0<=AIndice && AIndice<=2);
00367 if (FCLLastSel[ALevel][AIndice]!=AValue)
00368 {
00369 putAllNeedToUpdate();
00370 FCLLastSel[ALevel][AIndice]= AValue;
00371 }
00372 }
00373 const float * CParameterDart::getCLLastSel(int ALevel) const
00374 {
00375 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00376 return FCLLastSel[ALevel];
00377 }
00378 void CParameterDart::setCLLastSel(int ALevel,
00379 float AValue0, float AValue1, float AValue2)
00380 {
00381 assert(0<=ALevel && ALevel<FNbSelectionLevels);
00382 if ( FCLLastSel[ALevel][0]!=AValue0 ||
00383 FCLLastSel[ALevel][1]!=AValue1 ||
00384 FCLLastSel[ALevel][2]!=AValue2 )
00385 {
00386 putAllNeedToUpdate();
00387 FCLLastSel[ALevel][0]= AValue0;
00388 FCLLastSel[ALevel][1]= AValue1;
00389 FCLLastSel[ALevel][2]= AValue2;
00390 }
00391 }
00392 void CParameterDart::setCLLastSel(int ALevel,const float ATab[3])
00393 { setCLLastSel(ALevel,ATab[0],ATab[1],ATab[2]); }
00394
00395 int CParameterDart::getType() const
00396 { return PARAMETER_DART; }
00397