ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/ot_geometrie.cpp
Revision: 919
Committed: Tue Mar 6 17:51:54 2018 UTC (7 years, 2 months ago) by couturad
File size: 21054 byte(s)
Log Message:
Correction des bugs lors de l'execution en mode RELWITHDEBINFO.
Ajouts de fichiers pour la librairie MICROSTRUCTURE

File Contents

# User Rev Content
1 couturad 907 #include "ot_geometrie.h"
2     #include "ot_mathematique.h"
3     #ifdef ALL_OCC
4     #include <BRepExtrema_DistShapeShape.hxx>
5     #include <GeomAPI_ProjectPointOnCurve.hxx>
6     #include <GeomAPI_ProjectPointOnSurf.hxx>
7     #include <ShapeAnalysis.hxx>
8     #include <BRepBuilderAPI_MakeVertex.hxx>
9 couturad 911 #include <BRepAlgoAPI_Common.hxx>
10     #include <BRepGProp.hxx>
11     #include <GProp_GProps.hxx>
12     #include <limits>
13    
14 couturad 907 #endif
15    
16     OT_GEOMETRIE::OT_GEOMETRIE()
17     {
18    
19     }
20    
21     OT_GEOMETRIE::~OT_GEOMETRIE()
22     {
23    
24     }
25    
26     int OT_GEOMETRIE::projection_orthogonale_sur_mg_arete(double* xyz, MG_ARETE* mgarete, double& t)
27     {
28     #ifdef ALL_OCC
29     gp_Pnt point(xyz[0],xyz[1],xyz[2]);
30     TopoDS_Edge edge = ((OCC_ARETE*)mgarete)->get_TopoDS_Edge();
31     GeomAPI_ProjectPointOnCurve projecteur;
32     double t0,t1;
33     Handle(Geom_Curve) courbe_edge = BRep_Tool::Curve(edge,t0,t1);
34     projecteur.Init(point,courbe_edge,t0,t1);
35     if(projecteur.NbPoints()==0) return FAIL;
36     t = projecteur.LowerDistanceParameter();
37     return OK;
38     #endif
39     }
40    
41     int OT_GEOMETRIE::projection_orthogonale_sur_mg_face(double* xyz, MG_FACE* mgface,double* xyz2)
42     {
43     #ifdef ALL_OCC
44     gp_Pnt point(xyz[0],xyz[1],xyz[2]);
45     TopoDS_Face face = ((OCC_FACE*)mgface)->get_TopoDS_Face();
46     GeomAPI_ProjectPointOnSurf projecteur;
47     double u0,u1,v0,v1;
48     ShapeAnalysis::GetFaceUVBounds(face,u0,u1,v0,v1);
49     Handle(Geom_Surface) surface = BRep_Tool::Surface(face);
50     projecteur.Init(point,surface,u0,u1,v0,v1);
51     if(!projecteur.IsDone()) return FAIL;
52     if(projecteur.NbPoints()==0) return FAIL;
53     gp_Pnt point2 = projecteur.Point(1);
54     xyz2[0]= point2.X();
55     xyz2[1]= point2.Y();
56     xyz2[2]= point2.Z();
57     return OK;
58     #endif
59     }
60    
61 couturad 911 int OT_GEOMETRIE::projection_au_plus_pres_sur_mg_face(double* xyz1,MG_FACE* mgface1, MG_FACE* mgface2, double* xyz2)
62 couturad 907 {
63     #ifdef ALL_OCC
64 couturad 911 gp_Pnt point(xyz1[0],xyz1[1],xyz1[2]);
65     BRepBuilderAPI_MakeVertex makevertex(point);
66     TopoDS_Vertex vertex=makevertex.Vertex();
67     TopoDS_Face face1 = ((OCC_FACE*)mgface1)->get_TopoDS_Face();
68     TopoDS_Face face2 = ((OCC_FACE*)mgface2)->get_TopoDS_Face();
69     BRepClass_FaceClassifier face1_classifier(face1,point,Precision::Confusion());
70     if(face1_classifier.State()==TopAbs_OUT) return FAIL;
71     BRepExtrema_DistShapeShape distshapeshape(vertex,face2);
72     distshapeshape.Perform();
73     if(!distshapeshape.IsDone()) return FAIL;
74     gp_Pnt point2= distshapeshape.PointOnShape2(1);
75     xyz2[0]=point2.X();
76     xyz2[1]=point2.Y();
77     xyz2[2]=point2.Z();
78     return OK;
79     #endif
80     }
81    
82     int OT_GEOMETRIE::projection_au_plus_pres_sur_mg_arete(double* xyz, MG_ARETE* mgarete, double* xyz2)
83     {
84     #ifdef ALL_OCC
85 couturad 907 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
86     BRepBuilderAPI_MakeVertex makevertex(point);
87     TopoDS_Vertex vertex=makevertex.Vertex();
88 couturad 911 TopoDS_Edge edge = ((OCC_ARETE*)mgarete)->get_TopoDS_Edge();
89     BRepExtrema_DistShapeShape distshapeshape(vertex,edge);
90 couturad 907 distshapeshape.Perform();
91     if(!distshapeshape.IsDone()) return FAIL;
92     gp_Pnt point2= distshapeshape.PointOnShape2(1);
93     xyz2[0]=point2.X();
94     xyz2[1]=point2.Y();
95     xyz2[2]=point2.Z();
96     return OK;
97     #endif
98     }
99    
100    
101 couturad 911
102 couturad 907 void OT_GEOMETRIE::get_param_face(MG_FACE* mgface, double &umin, double &umax, double &vmin, double &vmax)
103     {
104     #ifdef ALL_OCC
105     TopoDS_Face face = ((OCC_FACE*)mgface)->get_TopoDS_Face();
106     ShapeAnalysis::GetFaceUVBounds(face,umin,umax,vmin,vmax);
107     #endif
108     }
109    
110     int OT_GEOMETRIE::get_distance_min_mg_volume_mg_volume(MG_VOLUME* mgvolume1, MG_VOLUME* mgvolume2,double &distance)
111     {
112     #ifdef ALL_OCC
113     TopoDS_Solid solid1 = ((OCC_VOLUME*)mgvolume1)->get_TopoDS_Solid();
114     TopoDS_Solid solid2 = ((OCC_VOLUME*)mgvolume2)->get_TopoDS_Solid();
115 couturad 911 BRepExtrema_DistShapeShape distshapeshape(solid1,solid2,Extrema_ExtFlag_MIN);
116 couturad 907 distshapeshape.Perform();
117     if(!distshapeshape.IsDone()) return FAIL;
118     distance=distshapeshape.Value();
119     return OK;
120     #endif
121     }
122    
123     int OT_GEOMETRIE::get_distance_min_mg_face_mg_volume(MG_FACE* mgface, MG_VOLUME* mgvolume, double& distance)
124     {
125     #ifdef ALL_OCC
126     TopoDS_Face face = ((OCC_FACE*)mgface)->get_TopoDS_Face();
127     TopoDS_Solid solid = ((OCC_VOLUME*)mgvolume)->get_TopoDS_Solid();
128     BRepExtrema_DistShapeShape distshapeshape(face,solid);
129     distshapeshape.Perform();
130     if(!distshapeshape.IsDone()) return FAIL;
131     distance=distshapeshape.Value();
132     return OK;
133     #endif
134     }
135    
136 couturad 911 int OT_GEOMETRIE::get_distance_min_mg_face_mg_face(MG_FACE* mgface1, MG_FACE* mgface2, double& distance)
137     {
138     #ifdef ALL_OCC
139     TopoDS_Face face1 = ((OCC_FACE*)mgface1)->get_TopoDS_Face();
140     TopoDS_Face face2 = ((OCC_FACE*)mgface2)->get_TopoDS_Face();
141     BRepExtrema_DistShapeShape distshapeshape(face1,face2);
142     distshapeshape.Perform();
143     if(!distshapeshape.IsDone()) return FAIL;
144     distance=distshapeshape.Value();
145     return OK;
146     #endif
147     }
148 couturad 907
149 couturad 911
150     int OT_GEOMETRIE::get_distance_min_liste_mg_face_mg_volume(TPL_MAP_ENTITE< MG_FACE* >& map_face, MG_VOLUME* mgvolume,double &distance)
151     {
152     distance=std::numeric_limits<double>::max();
153     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it_face;
154     for(MG_FACE* face=map_face.get_premier(it_face);face!=NULL;face=map_face.get_suivant(it_face))
155     {
156     double distance_i;
157     if(OT_GEOMETRIE::get_distance_min_mg_face_mg_volume(face,mgvolume,distance_i)==FAIL) return FAIL;
158     if(distance_i<distance) distance=distance_i;
159     }
160     return OK;
161     }
162    
163     int OT_GEOMETRIE::get_distance_min_mg_arete_mg_arete(MG_ARETE* mgarete1, MG_ARETE* mgarete2, double& distance)
164     {
165     #ifdef ALL_OCC
166     TopoDS_Edge edge1 = ((OCC_ARETE*)mgarete1)->get_TopoDS_Edge();
167     TopoDS_Edge edge2 = ((OCC_ARETE*)mgarete2)->get_TopoDS_Edge();
168     BRepExtrema_DistShapeShape distshapeshape(edge1,edge2);
169     distshapeshape.Perform();
170     if(!distshapeshape.IsDone()) return FAIL;
171     distance=distshapeshape.Value();
172     return OK;
173     #endif
174     }
175    
176    
177     double OT_GEOMETRIE::get_volume_intersection(MG_VOLUME* mgvolume1, MG_VOLUME* mgvolume2)
178     {
179     #ifdef ALL_OCC
180     TopoDS_Solid solid1 = ((OCC_VOLUME*)mgvolume1)->get_TopoDS_Solid();
181     TopoDS_Solid solid2 = ((OCC_VOLUME*)mgvolume2)->get_TopoDS_Solid();
182     BRepAlgoAPI_Common brep_common(solid1,solid2);
183     if(!brep_common.IsDone()) return 0.0;
184     if(brep_common.Shape().IsNull()) std::cerr << "NULL SHAPE !!!!!!!!!!!" << std::endl;
185     GProp_GProps props;
186     BRepGProp::VolumeProperties(brep_common.Shape(), props);
187     return props.Mass();
188     #endif
189     }
190    
191 couturad 919 double OT_GEOMETRIE::get_volume(MG_VOLUME* mgvolume,double eps)
192 couturad 911 {
193     #ifdef ALL_OCC
194     TopoDS_Solid solid = ((OCC_VOLUME*)mgvolume)->get_TopoDS_Solid();
195     GProp_GProps props;
196 couturad 919 BRepGProp::VolumeProperties(solid,props,eps);
197 couturad 911 return props.Mass();
198     #endif
199     }
200    
201     double OT_GEOMETRIE::get_longueur(MG_ARETE* mgarete)
202     {
203     #ifdef ALL_OCC
204     TopoDS_Edge edge = ((OCC_ARETE*)mgarete)->get_TopoDS_Edge();
205     GProp_GProps props;
206     BRepGProp::LinearProperties(edge,props);
207     return props.Mass();
208     #endif
209     }
210    
211 couturad 919 double OT_GEOMETRIE::get_aire(MG_FACE* mgface,double eps)
212 couturad 911 {
213     #ifdef ALL_OCC
214     TopoDS_Face face = ((OCC_FACE*)mgface)->get_TopoDS_Face();
215     GProp_GProps props;
216 couturad 919 BRepGProp::SurfaceProperties(face,props,eps);
217 couturad 911 return props.Mass();
218     #endif
219     }
220    
221 couturad 907 void OT_GEOMETRIE::get_map_mg_sommet_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mgeletopo, TPL_MAP_ENTITE< MG_SOMMET* >& map_sommet)
222     {
223     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_ele_topo;
224     mgeletopo->get_topologie_sousjacente(&map_ele_topo);
225     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
226     for(MG_ELEMENT_TOPOLOGIQUE *ele=map_ele_topo.get_premier(it);ele!=NULL;ele=map_ele_topo.get_suivant(it))
227     {
228     if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
229     {
230     map_sommet.ajouter(dynamic_cast<MG_SOMMET*>(ele));
231     }
232     }
233     }
234    
235     void OT_GEOMETRIE::get_map_mg_arete_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mgeletopo, TPL_MAP_ENTITE< MG_ARETE* >& map_arete)
236     {
237     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_ele_topo;
238     mgeletopo->get_topologie_sousjacente(&map_ele_topo);
239     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
240     for(MG_ELEMENT_TOPOLOGIQUE *ele=map_ele_topo.get_premier(it);ele!=NULL;ele=map_ele_topo.get_suivant(it))
241     {
242     if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE)
243     {
244     map_arete.ajouter(dynamic_cast<MG_ARETE*>(ele));
245     }
246     }
247     }
248    
249     void OT_GEOMETRIE::get_map_mg_face_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mgeletopo, TPL_MAP_ENTITE< MG_FACE* >& map_face)
250     {
251     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_ele_topo;
252     mgeletopo->get_topologie_sousjacente(&map_ele_topo);
253     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
254     for(MG_ELEMENT_TOPOLOGIQUE *ele=map_ele_topo.get_premier(it);ele!=NULL;ele=map_ele_topo.get_suivant(it))
255     {
256     if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
257     {
258     map_face.ajouter(dynamic_cast<MG_FACE*>(ele));
259     }
260     }
261     }
262    
263     void OT_GEOMETRIE::get_map_mg_point_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mgeletopo, TPL_MAP_ENTITE< MG_POINT* >& map_point)
264     {
265     TPL_MAP_ENTITE<MG_SOMMET*> map_sommet;
266     get_map_mg_sommet_sous_jacent(mgeletopo,map_sommet);
267     TPL_MAP_ENTITE<MG_SOMMET*>::ITERATEUR it;
268     for(MG_SOMMET* sommet=map_sommet.get_premier(it);sommet!=NULL;sommet=map_sommet.get_suivant(it))
269     map_point.ajouter(sommet->get_point());
270     }
271    
272     void OT_GEOMETRIE::get_map_mg_courbe_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mgeletopo, TPL_MAP_ENTITE< MG_COURBE* >& map_courbe)
273     {
274     TPL_MAP_ENTITE<MG_ARETE*> map_arete;
275     get_map_mg_arete_sous_jacent(mgeletopo,map_arete);
276     TPL_MAP_ENTITE<MG_ARETE*>::ITERATEUR it;
277     for(MG_ARETE* arete=map_arete.get_premier(it);arete!=NULL;arete=map_arete.get_suivant(it))
278     map_courbe.ajouter(arete->get_courbe());
279     }
280    
281     void OT_GEOMETRIE::get_map_mg_surface_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mgeletopo, TPL_MAP_ENTITE< MG_SURFACE* >& map_surface)
282     {
283     TPL_MAP_ENTITE<MG_FACE*> map_face;
284     get_map_mg_face_sous_jacent(mgeletopo,map_face);
285     TPL_MAP_ENTITE<MG_FACE*>::ITERATEUR it;
286     for(MG_FACE* face=map_face.get_premier(it);face!=NULL;face=map_face.get_suivant(it))
287     map_surface.ajouter(face->get_surface());
288     }
289    
290     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_SOMMET* sommet,
291     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
292     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
293     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
294     {
295     if(map_mg_element_geometrique!=NULL) map_mg_element_geometrique->ajouter(sommet->get_point());
296     }
297    
298     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_COSOMMET* cosommet,
299     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
300     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
301     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
302     {
303     if(map_mg_element_topologique!=NULL) map_mg_element_topologique->ajouter(cosommet->get_sommet());
304     get_map_mg_element_sous_jacent(cosommet->get_sommet(),
305     map_mg_element_topologique,
306     map_mg_element_cotopologique,
307     map_mg_element_geometrique);
308     }
309    
310     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_ARETE* arete,
311     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
312     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
313     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
314     {
315     if(map_mg_element_cotopologique!=NULL)
316     {
317     map_mg_element_cotopologique->ajouter(arete->get_cosommet1());
318     map_mg_element_cotopologique->ajouter(arete->get_cosommet2());
319     }
320     if(map_mg_element_geometrique!=NULL) map_mg_element_geometrique->ajouter(arete->get_courbe());
321     get_map_mg_element_sous_jacent(arete->get_cosommet1(),
322     map_mg_element_topologique,
323     map_mg_element_cotopologique,
324     map_mg_element_geometrique);
325     get_map_mg_element_sous_jacent(arete->get_cosommet2(),
326     map_mg_element_topologique,
327     map_mg_element_cotopologique,
328     map_mg_element_geometrique);
329     }
330    
331     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_COARETE* coarete,
332     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
333     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
334     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
335     {
336     if(map_mg_element_topologique!=NULL) map_mg_element_topologique->ajouter(coarete->get_arete());
337     get_map_mg_element_sous_jacent(coarete->get_arete(),
338     map_mg_element_topologique,
339     map_mg_element_cotopologique,
340     map_mg_element_geometrique);
341     }
342    
343     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_BOUCLE* boucle,
344     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
345     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
346     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
347     {
348     for(int i=0;i<boucle->get_nb_mg_coarete();i++)
349     {
350     if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->ajouter(boucle->get_mg_coarete(i));
351     get_map_mg_element_sous_jacent(boucle->get_mg_coarete(i),
352     map_mg_element_topologique,
353     map_mg_element_cotopologique,
354     map_mg_element_geometrique);
355     }
356     }
357    
358     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_POUTRE* poutre,
359     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
360     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
361     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
362     {
363     for(int i=0;i<poutre->get_nb_mg_boucle();i++)
364     {
365     if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->ajouter(poutre->get_mg_boucle(i));
366     get_map_mg_element_sous_jacent(poutre->get_mg_boucle(i),
367     map_mg_element_topologique,
368     map_mg_element_cotopologique,
369     map_mg_element_geometrique);
370     }
371     }
372    
373     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_FACE* face,
374     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
375     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
376     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
377     {
378     for(int i=0;i<face->get_nb_mg_boucle();i++)
379     {
380     if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->ajouter(face->get_mg_boucle(i));
381     get_map_mg_element_sous_jacent(face->get_mg_boucle(i),
382     map_mg_element_topologique,
383     map_mg_element_cotopologique,
384     map_mg_element_geometrique);
385     }
386     if(map_mg_element_geometrique!=NULL) map_mg_element_geometrique->ajouter(face->get_surface());
387     }
388    
389     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_COFACE* coface,
390     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
391     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
392     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
393     {
394     if(map_mg_element_topologique!=NULL) map_mg_element_topologique->ajouter(coface->get_face());
395     get_map_mg_element_sous_jacent(coface->get_face(),
396     map_mg_element_topologique,
397     map_mg_element_cotopologique,
398     map_mg_element_geometrique);
399     }
400    
401     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_COQUILLE* coquille,
402     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
403     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
404     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
405     {
406     for(int i=0;i<coquille->get_nb_mg_coface();i++)
407     {
408     if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->ajouter(coquille->get_mg_coface(i));
409     get_map_mg_element_sous_jacent(coquille->get_mg_coface(i),
410     map_mg_element_topologique,
411     map_mg_element_cotopologique,
412     map_mg_element_geometrique);
413     }
414     }
415    
416     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_VOLUME* volume,
417     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
418     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
419     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
420     {
421     for(int i=0;i<volume->get_nb_mg_coquille();i++)
422     {
423     if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->ajouter(volume->get_mg_coquille(i));
424     get_map_mg_element_sous_jacent(volume->get_mg_coquille(i),
425     map_mg_element_topologique,
426     map_mg_element_cotopologique,
427     map_mg_element_geometrique);
428     }
429     }
430    
431     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_COQUE* coque,
432     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
433     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
434     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
435     {
436     for(int i=0;i<coque->get_nb_mg_coquille();i++)
437     {
438     if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->ajouter(coque->get_mg_coquille(i));
439     get_map_mg_element_sous_jacent(coque->get_mg_coquille(i),
440     map_mg_element_topologique,
441     map_mg_element_cotopologique,
442     map_mg_element_geometrique);
443     }
444     }
445    
446     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique,
447     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
448     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
449     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
450     {
451     switch(mg_element_topologique->get_type())
452     {
453     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
454     {
455     MG_SOMMET* sommet = (MG_SOMMET*)mg_element_topologique;
456     get_map_mg_element_sous_jacent(sommet,
457     map_mg_element_topologique,
458     map_mg_element_cotopologique,
459     map_mg_element_geometrique);
460     break;
461     }
462     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
463     {
464     MG_ARETE* arete = (MG_ARETE*)mg_element_topologique;
465     get_map_mg_element_sous_jacent(arete,
466     map_mg_element_topologique,
467     map_mg_element_cotopologique,
468     map_mg_element_geometrique);
469     break;
470     }
471     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
472     {
473     MG_FACE* face = (MG_FACE*)mg_element_topologique;
474     get_map_mg_element_sous_jacent(face,
475     map_mg_element_topologique,
476     map_mg_element_cotopologique,
477     map_mg_element_geometrique);
478     break;
479     }
480     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
481     {
482     MG_VOLUME* volume = (MG_VOLUME*)mg_element_topologique;
483     get_map_mg_element_sous_jacent(volume,
484     map_mg_element_topologique,
485     map_mg_element_cotopologique,
486     map_mg_element_geometrique);
487     break;
488     }
489     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
490     {
491     MG_COQUE* coque = (MG_COQUE*)mg_element_topologique;
492     get_map_mg_element_sous_jacent(coque,
493     map_mg_element_topologique,
494     map_mg_element_cotopologique,
495     map_mg_element_geometrique);
496     break;
497     }
498     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
499     {
500     MG_POUTRE* poutre = (MG_POUTRE*)mg_element_topologique;
501     get_map_mg_element_sous_jacent(poutre,
502     map_mg_element_topologique,
503     map_mg_element_cotopologique,
504     map_mg_element_geometrique);
505     break;
506     }
507     }
508     }
509    
510     void OT_GEOMETRIE::get_map_mg_element_sous_jacent(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique,
511     TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE* >* map_mg_element_topologique,
512     TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
513     TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
514     {
515     switch(mg_element_cotopologique->get_type())
516     {
517     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
518     {
519     MG_COSOMMET* cosommet = (MG_COSOMMET*)mg_element_cotopologique;
520     get_map_mg_element_sous_jacent(cosommet,
521     map_mg_element_topologique,
522     map_mg_element_cotopologique,
523     map_mg_element_geometrique);
524     break;
525     }
526     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
527     {
528     MG_COARETE* coarete = (MG_COARETE*)mg_element_cotopologique;
529     get_map_mg_element_sous_jacent(coarete,
530     map_mg_element_topologique,
531     map_mg_element_cotopologique,
532     map_mg_element_geometrique);
533     break;
534     }
535     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
536     {
537     MG_BOUCLE* boucle = (MG_BOUCLE*)mg_element_cotopologique;
538     get_map_mg_element_sous_jacent(boucle,
539     map_mg_element_topologique,
540     map_mg_element_cotopologique,
541     map_mg_element_geometrique);
542     break;
543     }
544     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
545     {
546     MG_COFACE* coface = (MG_COFACE*)mg_element_cotopologique;
547     get_map_mg_element_sous_jacent(coface,
548     map_mg_element_topologique,
549     map_mg_element_cotopologique,
550     map_mg_element_geometrique);
551     break;
552     }
553     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
554     {
555     MG_COQUILLE* coquille = (MG_COQUILLE*)mg_element_cotopologique;
556     get_map_mg_element_sous_jacent(coquille,
557     map_mg_element_topologique,
558     map_mg_element_cotopologique,
559     map_mg_element_geometrique);
560     break;
561     }
562     }
563     }
564    
565    
566    
567    
568    
569    
570    
571    
572