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 #ifdef MODULE_MESH
00026
00027 #include "g-map-vertex.hh"
00028 #include "controler-gmap.hh"
00029 #include <cassert>
00030 #include <cstring>
00031
00032 #include "mesh-interface.hh"
00033
00034 using namespace GMap3d;
00035
00036 bool CControlerGMap::meshEdges()
00037 {
00038 bool res = false;
00039 if (canApplyOperation(COperation(OPERATION_MESH, 1)))
00040 {
00041 undoRedoPreSave();
00042
00043 int sx = getParameterOperations()->getMeshNbSubdivisionsX();
00044
00045 int nb =
00046 CMesh(FMap).meshMarkedEdges(getSelectionMark(), sx, NULL,
00047 getParameterOperations()
00048 ->getInterpolationMerges(),
00049 getParameterOperations()
00050 ->getInterpolationSews());
00051
00052 if (nb==0)
00053 {
00054 setMessage("Aucune arête maillée");
00055 undoRedoPostSaveFailed();
00056 }
00057 else
00058 {
00059 undoRedoPostSaveOk();
00060 setModelChanged();
00061 setMessage(nb, nb==1 ? " arête maillée" : " arêtes maillées");
00062 res = true;
00063 }
00064 }
00065
00066 return res;
00067 }
00068
00069 bool CControlerGMap::meshSquares(int ADimFrom, int ADimTo)
00070 {
00071 if (! (0 <= ADimFrom && ADimFrom < ADimTo && ADimTo <= 2))
00072 return false;
00073
00074 bool res = false;
00075 if (canApplyOperation(COperation(OPERATION_MESH, 2)))
00076 {
00077 undoRedoPreSave();
00078
00079 int sx = getParameterOperations()->getMeshNbSubdivisionsX();
00080 int sy = getParameterOperations()->getMeshNbSubdivisionsY();
00081
00082 int nb =
00083 CMesh(FMap).meshMarkedSquares(getSelectionMark(), sx, sy, NULL,
00084 getParameterOperations()
00085 ->getInterpolationMerges(),
00086 getParameterOperations()
00087 ->getInterpolationSews(),
00088 false, ADimFrom, ADimTo);
00089
00090 char qte[128];
00091 char buf[1024];
00092
00093 if (nb==0)
00094 strcpy(qte, "Aucun");
00095 else
00096 sprintf(qte, "%d", nb);
00097
00098 sprintf(buf, "%s %s [%d -> %d]",
00099 qte, nb<2 ? "carré maillé" : "carrés maillés",
00100 ADimFrom, ADimTo);
00101
00102 if (nb==0)
00103 undoRedoPostSaveFailed();
00104 else
00105 {
00106 undoRedoPostSaveOk();
00107 setModelChanged();
00108 res = true;
00109 }
00110
00111 setMessage(buf);
00112 }
00113
00114 return res;
00115 }
00116
00117 bool CControlerGMap::meshCubes(int ADimFrom, int ADimTo)
00118 {
00119 if (! (0 <= ADimFrom && ADimFrom < ADimTo && ADimTo <= 3))
00120 return false;
00121
00122 bool res = false;
00123 if (canApplyOperation(COperation(OPERATION_MESH, 3)))
00124 {
00125 undoRedoPreSave();
00126
00127 if (! getParameterOperations()->getInterpolationMerges())
00128 {
00129 setMessage("Non implémenté!!! (le maillage à créer doit être fusionné à l'objet initial)");
00130 return false;
00131 }
00132
00133 int sx = getParameterOperations()->getMeshNbSubdivisionsX();
00134 int sy = getParameterOperations()->getMeshNbSubdivisionsY();
00135 int sz = getParameterOperations()->getMeshNbSubdivisionsZ();
00136
00137 bool merges = getParameterOperations()->getInterpolationMerges();
00138 bool sews = getParameterOperations()->getInterpolationSews();
00139
00140 int nb =
00141 CMesh(FMap).meshMarkedCubes(getSelectionMark(), sx,sy,sz, NULL,
00142 merges, sews, false, ADimFrom, ADimTo);
00143
00144 char qte[128];
00145 char buf[1024];
00146
00147 if (nb==0)
00148 strcpy(qte, "Aucun");
00149 else
00150 sprintf(qte, "%d", nb);
00151
00152 sprintf(buf, "%s %s [%d -> %d]",
00153 qte, nb<2 ? "cube maillé" : "cubes maillés",
00154 ADimFrom, ADimTo);
00155
00156 if (nb==0)
00157 undoRedoPostSaveFailed();
00158 else
00159 {
00160 undoRedoPostSaveOk();
00161 setModelChanged();
00162 res = true;
00163 }
00164
00165 setMessage(buf);
00166 }
00167 return res;
00168 }
00169
00170 bool CControlerGMap::smoothEdges()
00171 {
00172 bool res = false;
00173 if (canApplyOperation(COperation(OPERATION_SMOOTH, 1)))
00174 {
00175 undoRedoPreSave();
00176
00177 int sx = getParameterOperations()->getMeshNbSubdivisionsX();
00178
00179 int nb =
00180 CMesh(FMap).meshMarkedEdges(getSelectionMark(), sx,
00181 &getParameterOperations()->getMeshMatrix(),
00182 getParameterOperations()->getSmoothMerges(),
00183 getParameterOperations()->getSmoothSews());
00184
00185 if (nb==0)
00186 {
00187 setMessage("Aucune arête lissée");
00188 undoRedoPostSaveFailed();
00189 }
00190 else
00191 {
00192 undoRedoPostSaveOk();
00193 setModelChanged();
00194 setMessage(nb, nb==1 ? " arête lissée" : " arêtes lissées");
00195 res = true;
00196 }
00197 }
00198
00199 return res;
00200 }
00201
00202 bool CControlerGMap::smoothSquares()
00203 {
00204 bool res = false;
00205 if (canApplyOperation(COperation(OPERATION_SMOOTH, 2)))
00206 {
00207 undoRedoPreSave();
00208
00209 int sx = getParameterOperations()->getMeshNbSubdivisionsX();
00210 int sy = getParameterOperations()->getMeshNbSubdivisionsY();
00211
00212 int nb =
00213 CMesh(FMap).meshMarkedSquares(getSelectionMark(), sx,sy,
00214 &getParameterOperations()
00215 ->getMeshMatrix(),
00216 getParameterOperations()
00217 ->getSmoothMerges(),
00218 getParameterOperations()
00219 ->getSmoothSews());
00220
00221 if (nb==0)
00222 {
00223 setMessage("Aucun carré lissé");
00224 undoRedoPostSaveFailed();
00225 }
00226 else
00227 {
00228 undoRedoPostSaveOk();
00229 setModelChanged();
00230 setMessage(nb, nb==1 ? " carré lissé" : " carrés lissés");
00231 res = true;
00232 }
00233 }
00234
00235 return res;
00236 }
00237
00238 bool CControlerGMap::smoothCubes()
00239 {
00240 bool res = false;
00241 if (canApplyOperation(COperation(OPERATION_SMOOTH, 3)))
00242 {
00243 if (!getParameterOperations()->getSmoothMerges())
00244 {
00245 setMessage("Non implémenté!!! (le maillage à créer doit être fusionné à l'objet initial)");
00246 return false;
00247 }
00248
00249 undoRedoPreSave();
00250
00251 int sx = getParameterOperations()->getMeshNbSubdivisionsX();
00252 int sy = getParameterOperations()->getMeshNbSubdivisionsY();
00253 int sz = getParameterOperations()->getMeshNbSubdivisionsZ();
00254
00255 int nb =
00256 CMesh(FMap).meshMarkedCubes(getSelectionMark(), sx,sy,sz,
00257 &getParameterOperations()->getMeshMatrix(),
00258 getParameterOperations()->getSmoothMerges(),
00259 getParameterOperations()->getSmoothSews());
00260
00261 if (nb==0)
00262 {
00263 setMessage("Aucun cube lissé");
00264 undoRedoPostSaveFailed();
00265 }
00266 else
00267 {
00268 undoRedoPostSaveOk();
00269 setModelChanged();
00270 setMessage(nb, nb==1 ? " cube lissé" : " cubes lissés");
00271 res = true;
00272 }
00273 }
00274
00275 return res;
00276 }
00277
00278 #endif // MODULE_MESH
00279