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_TRIANGULATION
00026
00027 #include "g-map-vertex.hh"
00028 #include "controler-gmap.hh"
00029 #include "operations.hh"
00030 #include "parameter-selection.hh"
00031 #include "view-precompile.hh"
00032
00033 #include "triangulation-api.hh"
00034 #include "triangulation-tools.hh"
00035
00036 using namespace GMap3d;
00037
00038
00039
00040 bool CControlerGMap::triangulateTopoFaces()
00041 {
00042 if (canApplyOperation(COperation(OPERATION_TRIANGULATION,
00043 SUB_OPERATION_TRIANGULATION_TOPO_FACES, -1))) {
00044 CTriangulationAPI api(FMap);
00045
00046 undoRedoPreSave();
00047 api.triangulateMarkedFaces(getSelectionMark(), true);
00048 undoRedoPostSaveOk();
00049
00050 setModelChanged();
00051 setMessage("Faces triangulées");
00052 return true;
00053 }
00054
00055 return false;
00056 }
00057
00058
00059
00060 bool CControlerGMap::markNonUniformFaces()
00061 {
00062 if (canApplyOperation(COperation(OPERATION_TRIANGULATION,
00063 SUB_OPERATION_TRIANGULATION_MARK_NON_UNIFORM_FACES,
00064 -1))) {
00065 CTriangulationAPI api(FMap);
00066 CDart *d;
00067
00068 if (FMap->getMarkedCells(ORBIT_CC, getSelectionMark(), NULL, &d) != 1) {
00069 setMessage("Sélection de maillage incohérante");
00070 return false;
00071 }
00072
00073 FMap->unmarkOrbit(d, ORBIT_CC, getSelectionMark());
00074 api.markNonUniformFaces(d, getSelectionMark(), 50);
00075
00076 setMessage("Faces non uniformes marquées");
00077 setSelectionChanged();
00078 return true;
00079 }
00080
00081 return false;
00082 }
00083
00084
00085
00086 bool CControlerGMap::optimizeSelectedEdges()
00087 {
00088 if (canApplyOperation(COperation(OPERATION_TRIANGULATION,
00089 SUB_OPERATION_TRIANGULATION_OPTIMIZE, -1))) {
00090 CTriangulationAPI api(FMap);
00091
00092 undoRedoPreSave();
00093 api.optimizeMarkedEdges(getSelectionMark());
00094 undoRedoPostSaveOk();
00095
00096 setModelChanged();
00097 setMessage("Positions des arêtes optimisées");
00098 return true;
00099 }
00100
00101 return false;
00102 }
00103
00104
00105
00106 bool CControlerGMap::createDelaunayTriangulation()
00107 {
00108 if (canApplyOperation(COperation(OPERATION_TRIANGULATION,
00109 SUB_OPERATION_TRIANGULATION_DELAUNAY, -1))) {
00110 CTriangulationTools tools(FMap);
00111
00112 undoRedoPreSave();
00113 tools.createDelaunaySurface(getSelectionMark());
00114 undoRedoPostSaveOk();
00115
00116 setModelChanged();
00117 setMessage("Triangulation de Delaunay effectuée");
00118 return true;
00119 }
00120
00121 return false;
00122 }
00123
00124
00125
00126 bool CControlerGMap::createOptimizedDelaunayTriangulation()
00127 {
00128 if (canApplyOperation(COperation(OPERATION_TRIANGULATION,
00129 SUB_OPERATION_TRIANGULATION_OPTIMIZED_DELAUNAY, -1))) {
00130 CTriangulationTools tools(FMap);
00131
00132 undoRedoPreSave();
00133 tools.createDelaunaySurface(getSelectionMark(), 2);
00134 undoRedoPostSaveOk();
00135
00136 setModelChanged();
00137 setMessage("Triangulation de Delaunay effectuée");
00138 return true;
00139 }
00140
00141 return false;
00142 }
00143
00144
00145
00146 #endif // MODULE_TRIANGULATION