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 "g-map-vertex.hh"
00026 #include "controler-gmap.hh"
00027 #include <cassert>
00028
00029 using namespace GMap3d;
00030
00031 bool CControlerGMap::canExtendSelection()
00032 {
00033 if (!canApplyOperation(COperation(OPERATION_SELECT,
00034 SUB_OPERATION_EXTEND_SELECTION, -1)))
00035 return false;
00036
00037 bool ok =
00038 getSelectionOrbit()==ORBIT_03 || getSelectionOrbit()==ORBIT_02 ||
00039 getSelectionOrbit()==ORBIT_023 || getSelectionOrbit()==ORBIT_01 ||
00040 getSelectionOrbit()==ORBIT_013 || getSelectionOrbit()==ORBIT_012;
00041
00042 if (!ok)
00043 {
00044 setMessage("Mode de sélection incohérent");
00045 return false;
00046 }
00047
00048 if (getLastSelectedDart()==NULL)
00049 {
00050 setMessage("Dernier brin sélectionné introuvable");
00051 return false;
00052 }
00053
00054 return true;
00055 }
00056
00057 bool CControlerGMap::goForward1()
00058 {
00059 if (!canExtendSelection())
00060 return false;
00061
00062 CDart* next = FMap->go(CGMapGeneric::Forward, getLastSelectedDart(),
00063 getSelectionOrbit(), getSelectionMark(), true);
00064 selectDart(next);
00065 setMessage("Sélection en avant effectuée");
00066 return true;
00067 }
00068
00069 bool CControlerGMap::goForward0()
00070 {
00071 if (!canExtendSelection())
00072 return false;
00073
00074 CDart* next = FMap->go(CGMapGeneric::Forward, getLastSelectedDart(),
00075 getSelectionOrbit(), getSelectionMark(), false);
00076 selectDart(next);
00077 setMessage("Désélection en avant effectuée");
00078 return true;
00079 }
00080
00081 bool CControlerGMap::goBackward1()
00082 {
00083 if (!canExtendSelection())
00084 return false;
00085
00086 CDart* next = FMap->go(CGMapGeneric::Backward, getLastSelectedDart(),
00087 getSelectionOrbit(), getSelectionMark(), true);
00088 selectDart(next);
00089 setMessage("Sélection en arrière effectuée");
00090 return true;
00091 }
00092
00093 bool CControlerGMap::goBackward0()
00094 {
00095 if (!canExtendSelection())
00096 return false;
00097
00098 CDart* next = FMap->go(CGMapGeneric::Backward, getLastSelectedDart(),
00099 getSelectionOrbit(), getSelectionMark(), false);
00100 selectDart(next);
00101 setMessage("Désélection en arrière effectuée");
00102 return true;
00103 }
00104
00105 bool CControlerGMap::goLeft1()
00106 {
00107 if (!canExtendSelection())
00108 return false;
00109
00110 CDart* next = FMap->go(CGMapGeneric::Left, getLastSelectedDart(),
00111 getSelectionOrbit(), getSelectionMark(), true);
00112 selectDart(next);
00113 setMessage("Sélection à gauche effectuée");
00114 return true;
00115 }
00116
00117 bool CControlerGMap::goLeft0()
00118 {
00119 if (!canExtendSelection())
00120 return false;
00121
00122 CDart* next = FMap->go(CGMapGeneric::Left, getLastSelectedDart(),
00123 getSelectionOrbit(), getSelectionMark(), false);
00124 selectDart(next);
00125 setMessage("Désélection à gauche effectuée");
00126 return true;
00127 }
00128
00129 bool CControlerGMap::goRight1()
00130 {
00131 if (!canExtendSelection())
00132 return false;
00133
00134 CDart* next = FMap->go(CGMapGeneric::Right, getLastSelectedDart(),
00135 getSelectionOrbit(), getSelectionMark(), true);
00136 selectDart(next);
00137 setMessage("Sélection à droite effectuée");
00138 return true;
00139 }
00140
00141 bool CControlerGMap::goRight0()
00142 {
00143 if (!canExtendSelection())
00144 return false;
00145
00146 CDart* next = FMap->go(CGMapGeneric::Right, getLastSelectedDart(),
00147 getSelectionOrbit(), getSelectionMark(), false);
00148 selectDart(next);
00149 setMessage("Désélection à droite effectuée");
00150 return true;
00151 }
00152
00153 bool CControlerGMap::goForward1Rep()
00154 {
00155 if (!canExtendSelection())
00156 return false;
00157
00158 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Forward,
00159 getLastSelectedDart(),
00160 getSelectionOrbit(),
00161 getSelectionMark(), true);
00162 selectDart(next);
00163 setMessage("Sélection en avant effectuée");
00164 return true;
00165 }
00166
00167 bool CControlerGMap::goForward0Rep()
00168 {
00169 if (!canExtendSelection())
00170 return false;
00171
00172 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Forward,
00173 getLastSelectedDart(),
00174 getSelectionOrbit(),
00175 getSelectionMark(), false);
00176 selectDart(next);
00177 setMessage("Désélection en avant effectuée");
00178 return true;
00179 }
00180
00181 bool CControlerGMap::goBackward1Rep()
00182 {
00183 if (!canExtendSelection())
00184 return false;
00185
00186 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Backward,
00187 getLastSelectedDart(),
00188 getSelectionOrbit(),
00189 getSelectionMark(), true);
00190 selectDart(next);
00191 setMessage("Sélection en arrière effectuée");
00192 return true;
00193 }
00194
00195 bool CControlerGMap::goBackward0Rep()
00196 {
00197 if (!canExtendSelection())
00198 return false;
00199
00200 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Backward,
00201 getLastSelectedDart(),
00202 getSelectionOrbit(),
00203 getSelectionMark(), false);
00204 selectDart(next);
00205 setMessage("Désélection en arrière effectuée");
00206 return true;
00207 }
00208
00209 bool CControlerGMap::goLeft1Rep()
00210 {
00211 if (!canExtendSelection())
00212 return false;
00213
00214 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Left,
00215 getLastSelectedDart(),
00216 getSelectionOrbit(),
00217 getSelectionMark(), true);
00218 selectDart(next);
00219 setMessage("Sélection à gauche effectuée");
00220 return true;
00221 }
00222
00223 bool CControlerGMap::goLeft0Rep()
00224 {
00225 if (!canExtendSelection())
00226 return false;
00227
00228 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Left,
00229 getLastSelectedDart(),
00230 getSelectionOrbit(),
00231 getSelectionMark(), false);
00232 selectDart(next);
00233 setMessage("Désélection à gauche effectuée");
00234 return true;
00235 }
00236
00237 bool CControlerGMap::goRight1Rep()
00238 {
00239 if (!canExtendSelection())
00240 return false;
00241
00242 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Right,
00243 getLastSelectedDart(),
00244 getSelectionOrbit(),
00245 getSelectionMark(), true);
00246 selectDart(next);
00247 setMessage("Sélection à droite effectuée");
00248 return true;
00249 }
00250
00251 bool CControlerGMap::goRight0Rep()
00252 {
00253 if (!canExtendSelection())
00254 return false;
00255
00256 CDart* next = FMap->goAsFarAsPossible(CGMapGeneric::Right,
00257 getLastSelectedDart(),
00258 getSelectionOrbit(),
00259 getSelectionMark(), false);
00260 selectDart(next);
00261 setMessage("Désélection à droite effectuée");
00262 return true;
00263 }
00264
00265 bool CControlerGMap::goAlphai( unsigned int ADim )
00266 {
00267 assert( ADim<= 3);
00268
00269 if (!canApplyOperation(COperation(OPERATION_SELECT,
00270 SUB_OPERATION_MOVE_SELECTION, -1)))
00271 {
00272 setMessage("Mode de sélection incohérent");
00273 return false;
00274 }
00275
00276 if (getLastSelectedDart()==NULL)
00277 {
00278 setMessage("Dernier brin sélectionné introuvable");
00279 return false;
00280 }
00281
00282 if ( !FMap->isFree(getLastSelectedDart(),ADim) )
00283 {
00284 selectDart(FMap->alpha(getLastSelectedDart(),ADim));
00285 setMessage("Sélection par alpha", ADim, " effectuée");
00286 }
00287 else
00288 {
00289 setMessage("Le dernier brin sélectionné est ", ADim, " libre");
00290 return false;
00291 }
00292
00293 return true;
00294 }
00295
00296 bool CControlerGMap::goAlpha0()
00297 { return goAlphai(0); }
00298
00299 bool CControlerGMap::goAlpha1()
00300 { return goAlphai(1); }
00301
00302 bool CControlerGMap::goAlpha2()
00303 { return goAlphai(2); }
00304
00305 bool CControlerGMap::goAlpha3()
00306 { return goAlphai(3); }
00307