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.hh"
00026
00027 #include "view-precompile.hh"
00028 #include "view-precompile-ortho.hh"
00029 #include "view-precompile-perspective.hh"
00030
00031 #include "precompile-aimed-point.hh"
00032 #include "precompile-axis.hh"
00033 #include "precompile-grid.hh"
00034
00035 using namespace std;
00036
00037 TViewId CControler::viewCreate(TView AViewType)
00038 {
00039 TViewId id = 0;
00040 vector<CViewPrecompile *>::iterator it = FViews.begin();
00041 while ( FViews[id]!=NULL && it!=FViews.end() )
00042 {
00043 ++it; ++id;
00044 }
00045
00046 if ( it==FViews.end() ) FViews.push_back(NULL);
00047
00048 CParameterEyePosition * eyePosition = new CParameterEyePosition ;
00049 CParameterAimedPosition * aimedPosition = new CParameterAimedPosition;
00050 CParameterDrawing * sceneDrawing = new CParameterDrawing ;
00051
00052 FViews[id] = newViewPrecompile(AViewType, eyePosition,
00053 aimedPosition, sceneDrawing);
00054
00055 assert( FViews[id]!=NULL );
00056
00057 return id;
00058 }
00059
00060 TViewId CControler::viewCreateShare(TView AViewType, TViewId AView)
00061 {
00062 TViewId id = viewCreate( AViewType );
00063 viewGroup( AView, id );
00064 return id;
00065 }
00066
00067 void CControler::viewDestroy(TViewId AViewId)
00068 {
00069 assert( AViewId<FViews.size() );
00070
00071 if ( FViews[AViewId]!=NULL )
00072 {
00073 delete FViews[AViewId];
00074 FViews[AViewId] = NULL;
00075 }
00076 }
00077
00078 void CControler::viewAddPrecompile(TViewId AViewId, TPrecompile APrecompileType)
00079 {
00080 assert( AViewId<FViews.size() );
00081
00082 if ( FViews[AViewId]==NULL ||
00083 FViews[AViewId]->findPrecompile(APrecompileType)!=NULL )
00084 return;
00085
00086 CPrecompile* precompile = newPrecompile(AViewId,APrecompileType);
00087
00088 assert( precompile!=NULL );
00089
00090 FViews[AViewId]->addPrecompile(precompile);
00091 }
00092
00093 void CControler::viewRemovePrecompile(TViewId AViewId,
00094 TPrecompile APrecompileType)
00095 {
00096 assert( AViewId<FViews.size());
00097
00098 if ( FViews[AViewId]!=NULL )
00099 FViews[AViewId]->removePrecompile(APrecompileType);
00100 }
00101
00102 void CControler::viewAddOrRemovePrecompile(TViewId AViewId, TPrecompile APrecom)
00103 {
00104 assert( AViewId<FViews.size() );
00105
00106 if ( FViews[AViewId]==NULL ) return;
00107
00108 CPrecompile * precompile = FViews[AViewId]->findPrecompile(APrecom);
00109 if ( precompile==NULL )
00110 viewAddPrecompile(AViewId,APrecom);
00111 else
00112 FViews[AViewId]->removePrecompile(APrecom);
00113 }
00114
00115 bool CControler::viewIsEnabledPrecompile(TViewId AViewId, TPrecompile APrecom)
00116 {
00117 assert( AViewId<FViews.size() );
00118
00119 if ( FViews[AViewId]==NULL ) return false;
00120
00121 CPrecompile * precompile = FViews[AViewId]->findPrecompile(APrecom);
00122
00123 return ( precompile!=NULL && precompile->isEnabled() );
00124 }
00125
00126 void CControler::viewEnablePrecompile(TViewId AViewId, TPrecompile APrecom)
00127 {
00128 assert( AViewId<FViews.size() );
00129
00130 if ( FViews[AViewId]==NULL ) return;
00131
00132 CPrecompile * precompile = FViews[AViewId]->findPrecompile(APrecom);
00133
00134 if ( precompile!=NULL ) precompile->enable();
00135 }
00136
00137 void CControler::viewDisablePrecompile(TViewId AViewId, TPrecompile APrecom)
00138 {
00139 assert( AViewId<FViews.size() );
00140
00141 if ( FViews[AViewId]==NULL ) return;
00142
00143 CPrecompile * precompile = FViews[AViewId]->findPrecompile(APrecom);
00144
00145 if ( precompile!=NULL ) precompile->disable();
00146 }
00147
00148 void CControler::viewTogglePrecompile(TViewId AViewId, TPrecompile APrecom)
00149 {
00150 assert( AViewId<FViews.size() );
00151
00152 if ( FViews[AViewId]==NULL ) return;
00153
00154 CPrecompile * precompile = FViews[AViewId]->findPrecompile(APrecom);
00155 if (precompile!=NULL )
00156 {
00157 if (precompile->isEnabled()) precompile->disable();
00158 else precompile->enable();
00159 }
00160 else
00161 viewAddPrecompile(AViewId, APrecom);
00162 }
00163
00164 void CControler::viewUpdate(TViewId AViewId)
00165 {
00166 assert( AViewId<FViews.size() );
00167
00168 if (FViews[AViewId]==NULL) return;
00169 FViews[AViewId]->update();
00170 }
00171
00172 void CControler::viewInit(TViewId AViewId)
00173 {
00174 assert( AViewId<FViews.size() );
00175
00176 if (FViews[AViewId]==NULL) return;
00177
00178 FViews[AViewId]->initScene();
00179 }
00180
00181 void CControler::viewDraw(TViewId AViewId)
00182 {
00183 assert( AViewId<FViews.size() );
00184
00185 if (FViews[AViewId]==NULL) return;
00186
00187 viewUpdate(AViewId);
00188 FViews[AViewId]->drawScene();
00189 }
00190
00191 void CControler::viewGroup(TViewId AViewId1, TViewId AViewId2)
00192 {
00193 assert( AViewId1<FViews.size() );
00194 assert( AViewId2<FViews.size() );
00195
00196 if ( FViews[AViewId1]==NULL || FViews[AViewId2]==NULL || AViewId1==AViewId2 )
00197 return;
00198
00199
00200 viewGroupPrecompiles(AViewId1,AViewId2);
00201
00202
00203 viewGroupParameter(AViewId1, AViewId2, PARAMETER_DRAWING);
00204 viewGroupParameter(AViewId1, AViewId2, PARAMETER_EYE_POSITION);
00205 viewGroupParameter(AViewId1, AViewId2, PARAMETER_AIMED_POSITION);
00206 }
00207
00208 void CControler::viewGroupAll(TViewId AViewId)
00209 {
00210 for (unsigned int i=0; i<FViews.size(); ++i)
00211 viewGroup(AViewId,i);
00212 }
00213
00214 void CControler::viewUngroup(TViewId AViewId)
00215 {
00216 assert( AViewId<FViews.size() );
00217
00218 if ( FViews[AViewId]!=NULL )
00219 {
00220
00221 viewUngroupPrecompiles(AViewId);
00222
00223
00224 viewUngroupParameter(AViewId, PARAMETER_DRAWING);
00225 viewUngroupParameter(AViewId, PARAMETER_EYE_POSITION);
00226 viewUngroupParameter(AViewId, PARAMETER_AIMED_POSITION);
00227 }
00228 }
00229
00230 void CControler::viewUngroupAll()
00231 {
00232 for (unsigned int i=1; i<FViews.size(); ++i)
00233 viewUngroup(i);
00234 }
00235
00236 void CControler::viewGroupPrecompile(TViewId AViewId1, TViewId AViewId2,
00237 TPrecompile APrecompileType)
00238 {
00239 assert( AViewId1<FViews.size() );
00240 assert( AViewId2<FViews.size() );
00241
00242 if ( APrecompileType==PRECOMPILE_AIMED_POINT ) return;
00243
00244 if ( FViews[AViewId1]==NULL || FViews[AViewId2]==NULL || AViewId1==AViewId2 )
00245 return;
00246
00247 CPrecompile * precompile1 = FViews[AViewId1]->findPrecompile(APrecompileType);
00248 CPrecompile * precompile2 = FViews[AViewId2]->findPrecompile(APrecompileType);
00249
00250 if ( precompile1==precompile2 )
00251 return;
00252
00253 if ( precompile1!=NULL )
00254 {
00255 if ( precompile2!=NULL )
00256 FViews[AViewId2]->removePrecompile(APrecompileType);
00257
00258 FViews[AViewId2]->addPrecompile(precompile1);
00259 }
00260 else
00261 FViews[AViewId1]->addPrecompile(precompile2);
00262 }
00263
00264 void CControler::viewGroupPrecompiles(TViewId AViewId1, TViewId AViewId2)
00265 {
00266 if ( AViewId1==AViewId2 ) return;
00267
00268 for (TPrecompile i=FIRST_PRECOMPILE_CONTROLER; i<FLastPrecompile; ++i)
00269 viewGroupPrecompile(AViewId1, AViewId2, i);
00270 }
00271
00272 void CControler::viewGroupAllPrecompiles(TViewId AViewId)
00273 {
00274 for (unsigned int i=0; i<FViews.size(); ++i)
00275 viewGroupPrecompiles(AViewId, i);
00276 }
00277
00278 void CControler::viewUngroupPrecompile(TViewId AViewId,
00279 TPrecompile APrecompileType)
00280 {
00281 assert( AViewId<FViews.size() );
00282
00283 if ( APrecompileType==PRECOMPILE_AIMED_POINT ) return;
00284
00285 if ( FViews[AViewId]!=NULL )
00286 {
00287 CPrecompile * precompile = FViews[AViewId]->findPrecompile(APrecompileType);
00288
00289 if ( precompile!=NULL && precompile->getNbView()>1 )
00290 {
00291 FViews[AViewId]->removePrecompile(APrecompileType);
00292 FViews[AViewId]->addPrecompile( precompile->copy() );
00293 }
00294 }
00295 }
00296
00297 void CControler::viewUngroupPrecompiles(TViewId AViewId)
00298 {
00299 for (TPrecompile i=FIRST_PRECOMPILE_CONTROLER; i<FLastPrecompile; ++i)
00300 viewUngroupPrecompile(AViewId, i);
00301 }
00302
00303 void CControler::viewUngroupAllPrecompiles()
00304 {
00305 for (unsigned int i=1; i<FViews.size(); ++i)
00306 viewUngroupPrecompiles(i);
00307 }
00308
00309 void CControler::viewGroupParameter(TViewId AViewId1, TViewId AViewId2,
00310 TParameter AParameterType)
00311 {
00312 assert( AViewId1<FViews.size() );
00313 assert( AViewId2<FViews.size() );
00314
00315 if ( FViews[AViewId1]==NULL || FViews[AViewId2]==NULL || AViewId1==AViewId2)
00316 return;
00317
00318 FViews[AViewId1]->groupParameter(FViews[AViewId2], AParameterType);
00319 }
00320
00321 void CControler::viewGroupAllParameter(TViewId AViewId,
00322 TParameter AParameterType)
00323 {
00324 for (unsigned int i=0; i<FViews.size(); ++i)
00325 viewGroupParameter(AViewId, i, AParameterType);
00326 }
00327
00328 void CControler::viewUngroupParameter(TViewId AViewId, TParameter AParameterType)
00329 {
00330 assert( AViewId<FViews.size() );
00331
00332 if ( FViews[AViewId]!=NULL )
00333 FViews[AViewId]->ungroupParameter(AParameterType);
00334 }
00335
00336 void CControler::viewUngroupAllParameter(TParameter AParameterType)
00337 {
00338 for (unsigned int i=1; i<FViews.size(); ++i)
00339 viewUngroupParameter(i, AParameterType);
00340 }
00341
00342 bool CControler::viewIsEnabled(TViewId AViewId)
00343 {
00344 assert( AViewId<FViews.size() );
00345
00346 if ( FViews[AViewId]==NULL )
00347 return false;
00348
00349 return FViews[AViewId]->isEnabled();
00350 }
00351
00352 void CControler::viewEnable(TViewId AViewId)
00353 {
00354 assert( AViewId<FViews.size() );
00355
00356 if ( FViews[AViewId]!=NULL )
00357 FViews[AViewId]->enable();
00358 }
00359
00360 void CControler::viewDisable(TViewId AViewId)
00361 {
00362 assert( AViewId<FViews.size() );
00363
00364 if ( FViews[AViewId]!=NULL )
00365 FViews[AViewId]->disable();
00366 }
00367