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 <iostream>
00028 #include <cassert>
00029
00030 #ifdef MODULE_EXTRACTION_IMAGE
00031 #include "extraction-images.hh"
00032 #endif // MODULE_EXTRACTION_IMAGE
00033
00034 using namespace GMap3d;
00035 using namespace std;
00036
00037 bool CControlerGMap::empty()
00038 {
00039 bool res = false;
00040
00041 if (canApplyOperation(COperation(OPERATION_DELETE_DARTS)))
00042 {
00043 undoRedoPreSave();
00044
00045 FMap->removeAllDarts();
00046
00047 unsetLastSelectedDart();
00048
00049 undoRedoPostSaveOk();
00050 setModelChanged();
00051 setMessage("Carte vidée");
00052 res = true;
00053 }
00054 return res;
00055 }
00056
00057 bool CControlerGMap::addMap(const char * AFilename)
00058 {
00059 bool res = false;
00060
00061 if (canApplyOperation(COperation(OPERATION_LOAD, SUB_OPERATION_ADD_MAP, -1)))
00062 {
00063 undoRedoPreSave();
00064
00065 if (FMap->load(AFilename)!=NULL)
00066 {
00067 undoRedoPostSaveOk();
00068 setModelChanged();
00069 setMessage("Ajout effectué");
00070 res = true;
00071 }
00072 else
00073 {
00074 undoRedoPostSaveFailed();
00075 setMessage("Chargement impossible");
00076 }
00077
00078 assert(isMapOk());
00079 }
00080
00081 return res;
00082 }
00083
00084 bool CControlerGMap::loadMap(const char * AFilename)
00085 {
00086 bool res = false;
00087
00088 if (canApplyOperation(COperation(OPERATION_LOAD, SUB_OPERATION_LOAD_MAP, -1)))
00089 {
00090 undoRedoPreSave();
00091
00092 FMap->removeAllDarts();
00093 unsetAllLastSelectedDarts();
00094
00095 if (FMap->load(AFilename)!=NULL)
00096 {
00097 undoRedoPostSaveOk();
00098 setModelChanged();
00099 setMessage("Chargement effectué");
00100 res = true;
00101 }
00102 else
00103 {
00104 undoRedoPostSaveFailed();
00105 setMessage("Chargement impossible");
00106 }
00107
00108 assert(isMapOk());
00109 }
00110
00111 return res;
00112 }
00113
00114 bool CControlerGMap::saveMapAscii(const char* AFilename)
00115 {
00116 bool res = false;
00117 if (canApplyOperation(COperation(OPERATION_SAVE)))
00118 {
00119 res = FMap->save(AFilename, AsciiFormat);
00120 if (res)
00121 setMessage("Sauvegarde effectuée");
00122 else
00123 setMessage("Sauvegarde impossible");
00124 }
00125
00126 return res;
00127 }
00128
00129 bool CControlerGMap::saveMapBinary(const char * AFilename)
00130 {
00131 bool res = false;
00132 if (canApplyOperation(COperation(OPERATION_SAVE)))
00133 {
00134 res = FMap->save(AFilename, BinaryFormat);
00135 if (res)
00136 setMessage("Sauvegarde binaire effectuée");
00137 else
00138 setMessage("Sauvegarde binaire impossible");
00139 }
00140
00141 return res;
00142 }
00143
00144 bool CControlerGMap::exportXfig(const char * AFilename, TViewId AViewId,
00145 bool AArrow, bool AFace, bool ASews,
00146 bool AGrid, bool AVertices)
00147 {
00148 bool res = false;
00149 if (canApplyOperation(COperation(OPERATION_EXPORT)))
00150 {
00151
00152 ofstream fout(AFilename, ios::trunc);
00153 sauveCarteXfig(AViewId, fout, AArrow, AFace, ASews, AGrid, AVertices);
00154 fout.close();
00155 setMessage("Export xfig effectué");
00156 res = true;
00157 }
00158
00159 return res;
00160 }
00161
00162 bool CControlerGMap::exportPov(const char * AFilename)
00163 {
00164 bool res = false;
00165 if (canApplyOperation(COperation(OPERATION_EXPORT)))
00166 {
00167
00168 ofstream fout(AFilename, ios::trunc);
00169 bool ok = FMap->exportToPov(fout);
00170 fout.close();
00171 setMessage(ok ? "Export PoV effectué" : "Export PoV echoué");
00172 res = true;
00173 }
00174
00175 return res;
00176 }
00177
00178 bool CControlerGMap::exportXfigAsIntervoxel(const char * AFilename,
00179 TViewId AViewId)
00180 {
00181 bool res = false;
00182 if (canApplyOperation(COperation(OPERATION_EXPORT)))
00183 {
00184
00185 ofstream fout(AFilename, ios::trunc);
00186 sauveCarteIntervoxelXfig(AViewId, fout);
00187 fout.close();
00188 setMessage("Export intervoxel effectué");
00189 res = true;
00190 }
00191
00192 return res;
00193 }
00194
00195 #ifdef MODULE_EXTRACTION_IMAGE
00196
00197 #ifndef MODULE_EXTRACTION_WITHOUT_MAGICK
00198
00199 bool CControlerGMap::extractImage2D(const string & AFilename)
00200 {
00201 bool res = false;
00202 if (canApplyOperation(COperation(OPERATION_EXTRACT_IMAGE, 2)))
00203 {
00204 undoRedoPreSave();
00205
00206 CExtractionImage extractor(FMap);
00207
00208 if (extractor.extract2dImage(AFilename))
00209 {
00210 undoRedoPostSaveOk();
00211 setModelChanged();
00212 setMessage("Extraction de l'image 2d effectuée");
00213 res = true;
00214 }
00215 else
00216 {
00217 setMessage("Erreur durant l'extraction de l'image 2d");
00218 undoRedoPostSaveFailed();
00219 }
00220 }
00221
00222 return res;
00223 }
00224
00225 #endif // MODULE_EXTRACTION_WITHOUT_MAGICK
00226
00227 bool CControlerGMap::extractImage3D(const string & AFilename, int AFirstPlane,
00228 int ANbPlane, int ALevel, int NbChiffres,
00229 bool ADestroyBorder, bool AKeepFictiveEdges,
00230 bool AShiftFictiveEdges, bool AWithPrecodes,
00231 bool ACEAFormat)
00232 {
00233 bool res = false;
00234 if (canApplyOperation(COperation(OPERATION_EXTRACT_IMAGE, 3)))
00235 {
00236 undoRedoPreSave();
00237
00238 CExtractionImage extractor(FMap);
00239
00240 if (ACEAFormat)
00241 {
00242 if (AWithPrecodes)
00243 res =
00244 extractor.extract3dImageCEAWithPrecodes(AFilename, AFirstPlane,
00245 ANbPlane, ALevel,
00246 ADestroyBorder,
00247 AKeepFictiveEdges,
00248 AShiftFictiveEdges);
00249 else
00250 res = extractor.extract3dImageCEA(AFilename, AFirstPlane, ANbPlane,
00251 ALevel, ADestroyBorder,
00252 AKeepFictiveEdges,
00253 AShiftFictiveEdges);
00254 }
00255 else
00256 {
00257 if (AWithPrecodes)
00258 res =
00259 extractor.extract3dImageWithPrecodes(AFilename, AFirstPlane,
00260 ANbPlane, ALevel,
00261 NbChiffres, ADestroyBorder,
00262 AKeepFictiveEdges,
00263 AShiftFictiveEdges);
00264 else
00265 res = extractor.extract3dImage(AFilename, AFirstPlane, ANbPlane,
00266 ALevel, NbChiffres, ADestroyBorder,
00267 AKeepFictiveEdges,
00268 AShiftFictiveEdges);
00269 }
00270
00271 if (res)
00272 {
00273 undoRedoPostSaveOk();
00274 setModelChanged();
00275 setMessage("Extraction de l'image 3d effectuée");
00276 }
00277 else
00278 {
00279 setMessage("Erreur durant l'extraction de l'image 3d");
00280 undoRedoPostSaveFailed();
00281 }
00282 }
00283
00284 return res;
00285 }
00286
00287 bool CControlerGMap::extractOneRegionVoxels(const std::string & AFilename,
00288 int AFirstPlane, int ANbPlane,
00289 int NbChiffres,
00290 int ARed, int AGreen, int ABlue,
00291 int AAlpha)
00292 {
00293 bool res = false;
00294 if (canApplyOperation(COperation(OPERATION_EXTRACT_IMAGE, 3)))
00295 {
00296 undoRedoPreSave();
00297
00298 CExtractionImage extractor(FMap);
00299
00300 res =
00301 extractor.extractOneRegionVoxels(AFilename, AFirstPlane,
00302 ANbPlane, NbChiffres,
00303 ARed, AGreen, ABlue, AAlpha);
00304
00305 if (res)
00306 {
00307 undoRedoPostSaveOk();
00308 setModelChanged();
00309 setMessage("Extraction des voxels d'une région effectuée");
00310 }
00311 else
00312 {
00313 setMessage("Erreur durant l'extraction des voxels "
00314 "d'une région effectuée");
00315 undoRedoPostSaveFailed();
00316 }
00317 }
00318
00319 return res;
00320 }
00321
00322 #endif // MODULE_EXTRACTION_IMAGE
00323
00324 bool CControlerGMap::importOff(const char* AFilename)
00325 {
00326 bool res = false;
00327
00328 if (canApplyOperation(COperation(OPERATION_LOAD, SUB_OPERATION_ADD_MAP, -1)))
00329 {
00330 undoRedoPreSave();
00331
00332 if (FMap->importOff(AFilename)!=NULL)
00333 {
00334 undoRedoPostSaveOk();
00335 setModelChanged();
00336 setMessage("Import OFF effectué");
00337 res = true;
00338 }
00339 else
00340 {
00341 undoRedoPostSaveFailed();
00342 setMessage("Erreur durant l'import OFF");
00343 }
00344
00345 assert(isMapOk());
00346 }
00347
00348 return res;
00349 }
00350
00351 bool CControlerGMap::exportOff(const char* AFilename)
00352 {
00353 bool res = false;
00354
00355 if (canApplyOperation(COperation(OPERATION_EXPORT)))
00356 {
00357 if (FMap->exportOff(AFilename))
00358 {
00359 setMessage("Export OFF effectué");
00360 res = true;
00361 }
00362 else
00363 {
00364 setMessage("Erreur durant l'export OFF");
00365 }
00366 }
00367
00368 return res;
00369 }
00370
00371 bool CControlerGMap::exportOff3D(const char* AFilename)
00372 {
00373 bool res = false;
00374
00375 if (canApplyOperation(COperation(OPERATION_EXPORT)))
00376 {
00377 if (FMap->exportOff3D(AFilename))
00378 {
00379 setMessage("Export OFF effectué");
00380 res = true;
00381 }
00382 else
00383 {
00384 setMessage("Erreur durant l'export OFF");
00385 }
00386 }
00387
00388 return res;
00389 }
00390