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::intuitivePlate()
00032 {
00033 bool res = false;
00034
00035 if (canApplyOperation(COperation(OPERATION_PLATE,
00036 SUB_OPERATION_INTUITIVE, -1)))
00037 {
00038 CDart *d1, *d2;
00039
00040 if (FMap->getMarkedCells(ORBIT_SELF, getSelectionMark(),
00041 getLastSelectedDart(), &d2,&d1) != 2)
00042 {
00043 setMessage("Sélection incohérente");
00044 return false;
00045 }
00046
00047 undoRedoPreSave();
00048
00049 if (FMap->intuitivePlate(d1,d2,
00050 getParameterOperations()->getRotateCells(),
00051 getParameterOperations()->getScaleCells(),
00052 getParameterOperations()->getTranslateCells()))
00053 {
00054 undoRedoPostSaveOk();
00055 unmarkAllCurrentSelectionLevel();
00056 setModelChanged();
00057 setMessage("Cellules plaquées");
00058 res = true;
00059 }
00060 else
00061 {
00062 setMessage("Cellules impossible à plaquer");
00063 undoRedoPostSaveFailed();
00064 }
00065 }
00066
00067 return res;
00068 }
00069
00070 bool CControlerGMap::plate(int ADimension)
00071 {
00072 if (canApplyOperation(COperation(OPERATION_PLATE, ADimension)))
00073 {
00074 assert(ADimension>=0 && ADimension<3);
00075
00076 CDart *d1, *d2;
00077
00078 if (FMap->getMarkedCells(ORBIT_SELF, getSelectionMark(),
00079 getLastSelectedDart(), &d2,&d1) != 2)
00080 {
00081 setMessage("Sélection incohérente");
00082 return false;
00083 }
00084
00085 if (!FMap->canPlate(d1,d2))
00086 {
00087 setMessage(ADimension, "-cellules impossible à plaquer");
00088 return false;
00089 }
00090
00091 undoRedoPreSave();
00092 FMap->plate(d1,d2, ADimension,
00093 getParameterOperations()->getRotateCells(),
00094 getParameterOperations()->getScaleCells(),
00095 getParameterOperations()->getTranslateCells());
00096 undoRedoPostSaveOk();
00097 unmarkAllCurrentSelectionLevel();
00098
00099 setModelChanged();
00100 setMessage(ADimension, "-cellules plaquées");
00101 return true;
00102 }
00103
00104 return false;
00105 }
00106
00107 bool CControlerGMap::plateBorders(int ADimension)
00108 {
00109 if (canApplyOperation(COperation(OPERATION_PLATE,
00110 SUB_OPERATION_GEO_BORDERS, -1)))
00111 {
00112 assert(ADimension==1 || ADimension==2);
00113
00114 CDart *d1, *d2;
00115
00116 if (FMap->getMarkedCells(ORBIT_SELF, getSelectionMark(),
00117 getLastSelectedDart(), &d2,&d1) != 2)
00118 {
00119 setMessage("Sélection incohérente");
00120 return false;
00121 }
00122
00123 if (!FMap->canPlate(d1,d2))
00124 {
00125 setMessage(ADimension, "-bords impossible à plaquer");
00126 return false;
00127 }
00128
00129 undoRedoPreSave();
00130 FMap->borderPlate(d1,d2, ADimension,
00131 getParameterOperations()->getRotateCells(),
00132 getParameterOperations()->getScaleCells(),
00133 getParameterOperations()->getTranslateCells());
00134 undoRedoPostSaveOk();
00135 unmarkAllCurrentSelectionLevel();
00136
00137 setModelChanged();
00138 setMessage(ADimension, "-bords plaqués");
00139 return true;
00140 }
00141
00142 return false;
00143 }
00144