ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/ot_geometrie.cpp
Revision: 934
Committed: Mon May 28 19:32:31 2018 UTC (6 years, 11 months ago) by couturad
File size: 22378 byte(s)
Log Message:
Correction bugs dans MICROSTRUCTURE
Ajout d'une fonction de vérification du decalage entre deux faces pour la detection des couches minces

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