MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
occ_import.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// occ_import.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include "gestionversion.h"
24 #ifdef BREP_OCC
25 
26 #pragma hdrstop
27 
28 #include "TopoDS_Shape.hxx"
29 #include "TopoDS_CompSolid.hxx"
30 #include "TopoDS_Compound.hxx"
31 #include "TopoDS_Solid.hxx"
32 #include "TopoDS_Shell.hxx"
33 #include <TopTools_IndexedMapOfShape.hxx>
34 #include <TopExp.hxx>
35 #include <TopAbs_ShapeEnum.hxx>
36 #include <TopoDS.hxx>
37 #include <BRep_Tool.hxx>
38 #include <BRep_Builder.hxx>
39 #include <BRepTools.hxx>
40 #include <BRepMesh_IncrementalMesh.hxx>
41 #include <BRepTools_WireExplorer.hxx>
42 
43 #include <TopAbs_Orientation.hxx>
44 #include <Geom_Surface.hxx>
45 #include <Geom_Curve.hxx>
46 #include <Geom_Point.hxx>
47 #include <Geom_CartesianPoint.hxx>
48 #include <gp_Pnt.hxx>
49 #include <BRepBuilderAPI_MakeVertex.hxx>
50 #include <TopTools_DataMapOfShapeInteger.hxx>
51 #include <BRep_ListIteratorOfListOfCurveRepresentation.hxx>
52 #include <BRep_ListIteratorOfListOfPointRepresentation.hxx>
53 #include <BRep_PointRepresentation.hxx>
54 
55 #include <TopoDS_TShape.hxx>
56 #include <TopoDS_TFace.hxx>
57 #include <TopoDS_TEdge.hxx>
58 #include <TopoDS_TShape.hxx>
59 #include <TopoDS_TSolid.hxx>
60 #include <TopoDS_TFace.hxx>
61 #include <BRep_TFace.hxx>
62 #include <TopoDS_TEdge.hxx>
63 #include <BRep_TEdge.hxx>
64 #include <TopoDS_TWire.hxx>
65 #include <TopoDS_TVertex.hxx>
66 #include <BRep_TVertex.hxx>
67 #include <GeomTools_SurfaceSet.hxx>
68 #include <BRepMesh_IncrementalMesh.hxx>
69 #include "occ_import.h"
70 #include "mg_geometrie.h"
71 #include "mg_gestionnaire.h"
72 #include "occ_surface.h"
73 #include "occ_point.h"
74 #include "occ_courbe.h"
75 #include "occ_fonction.h"
76 #include "occ_fonction_v2015.h"
77 #include "occ_fonction_v2017.h"
78 #include "vct_multi_modele.h"
79 
80 #include <string.h>
81 #include <stdio.h>
82 
83 #pragma package(smart_init)
84 
85 OCC_IMPORT::OCC_IMPORT():afusionne(false)
86 {
87 }
89 {
90 }
91 #ifdef ALL_OCC
93  char *path_brep,
94  char* nom_caf,
95  int typefichier,
96  double precision,
97  bool fusionner_entite_similaire)
98 {
99  MG_GEOMETRIE* mggeo=NULL;
100  if(typefichier==FICHIEROCC)
101  {
102 
103  mggeo=new MG_GEOMETRIE((char*)"OCCV2017",nom_caf,0.001,precision);
104  gest.ajouter_mg_geometrie(mggeo);
105  OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
106  occ_fonction_v2017->change_precision(precision);
107  occ_fonction_v2017->importer_fichier_brep(path_brep,
108  NULL,
109  NULL,
110  NULL,
111  mggeo,
112  fusionner_entite_similaire,
113  precision);
114  }
115  return mggeo;
116 }
117 
119  char* path_step,
120  char* nom_caf,
121  int typefichier,
122  double precision,
123  bool fusionner_entite_similaire)
124 {
125  MG_GEOMETRIE* mggeo=NULL;
126  if(typefichier==FICHIERSTEP)
127  {
128 
129  mggeo=new MG_GEOMETRIE((char*)"OCCV2017",nom_caf,0.001,precision);
130  gest.ajouter_mg_geometrie(mggeo);
131  OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
132  occ_fonction_v2017->change_precision(precision);
133  occ_fonction_v2017->importer_fichier_STEP(path_step,
134  NULL,
135  NULL,
136  NULL,
137  mggeo,
138  fusionner_entite_similaire,
139  precision);
140  }
141  return mggeo;
142 }
143 #endif
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 
168 
169 
170 void OCC_IMPORT::relation(BRep_TFace* ent1,class MG_FACE* ent2)
171 {
173  r.a=ent1;
174  r.b=ent2;
175  lst_face.insert(lst_face.end(),r);
176 }
177 
178 
179 void OCC_IMPORT::relation( Geom_Surface *ent1,class MG_SURFACE* ent2)
180 {
181  /*TPL_RELATION_ENTITE<Geom_Surface,MG_SURFACE> r;
182  r.a=ent1;
183  r.b=ent2;
184  lst_surface.insert(lst_surface.end(),r);*/
185 }
186 
187 
188 void OCC_IMPORT::relation(BRep_TEdge* ent1,class MG_ARETE* ent2)
189 {
191  r.a=ent1;
192  r.b=ent2;
193  lst_arete.insert(lst_arete.end(),r);
194 }
195 
196 void OCC_IMPORT::relation( Geom_Curve *ent1,class MG_COURBE* ent2)
197 {
198  /*TPL_RELATION_ENTITE<Geom_Curve,MG_COURBE> r;
199  r.a=ent1;
200  r.b=ent2;
201  lst_courbe.insert(lst_courbe.end(),r);*/
202 }
203 
204 void OCC_IMPORT::relation(BRep_TVertex *ent1,class MG_SOMMET* ent2)
205 {
207  r.a=ent1;
208  r.b=ent2;
209  lst_sommet.insert(lst_sommet.end(),r);
210 }
211 
212 
213 
214 MG_FACE* OCC_IMPORT::trouver(BRep_TFace *face)
215 {
216  std::vector<TPL_RELATION_ENTITE<BRep_TFace,MG_FACE> >::iterator i;
217  for (i=lst_face.begin();i!=lst_face.end();i++)
218  if ((*i).a==face) return (*i).b;
219  return NULL;
220 }
221 
222 MG_SURFACE* OCC_IMPORT::trouver(Geom_Surface *surface)
223 {
224  /*std::vector<TPL_RELATION_ENTITE<Geom_Surface,MG_SURFACE> >::iterator i;
225  for (i=lst_surface.begin();i!=lst_surface.end();i++)
226  if ((*i).a==surface) return (*i).b;*/
227  return NULL;
228 }
229 
230 MG_ARETE* OCC_IMPORT::trouver(BRep_TEdge* arete)
231 {
232  std::vector<TPL_RELATION_ENTITE<BRep_TEdge,MG_ARETE> >::iterator i;
233  for (i=lst_arete.begin();i!=lst_arete.end();i++)
234  if ((*i).a==arete) return (*i).b;
235  return NULL;
236 }
237 
238 MG_COURBE* OCC_IMPORT::trouver(Geom_Curve *courbe)
239 {
240  /* std::vector<TPL_RELATION_ENTITE<Geom_Curve,MG_COURBE> >::iterator i;
241  for (i=lst_courbe.begin();i!=lst_courbe.end();i++)
242  if ((*i).a==courbe) return (*i).b;*/
243 
244  return NULL;
245 }
246 MG_SOMMET* OCC_IMPORT::trouver(BRep_TVertex *sommet)
247 {
248 
249  std::vector<TPL_RELATION_ENTITE<BRep_TVertex,MG_SOMMET> >::iterator i;
250  for (i=lst_sommet.begin();i!=lst_sommet.end();i++)
251  if ((*i).a==sommet) return (*i).b;
252  return NULL;
253 }
254 
255 MG_GEOMETRIE* OCC_IMPORT::importer(MG_GESTIONNAIRE& gest, char * path,int typefichier,double precision)
256 {
257  MG_GEOMETRIE *mggeo;
258  if (typefichier==FICHIEROCC) mggeo=new MG_GEOMETRIE((char*)"OCCV2015",path,0.001,precision);
259  if (typefichier==FICHIERSTEP) mggeo=new MG_GEOMETRIE((char*)"STEPOCC",path,0.001,precision);
260  OCC_FONCTION& fonction1=mggeo->get_occ_fonction();
261  fonction1.change_precision(precision);
262  ashape=fonction1.GetShapePrincipale();
263 
264  gest.ajouter_mg_geometrie(mggeo);
265 
266 
267  TopAbs_ShapeEnum type=ashape.ShapeType();
268  if (type==TopAbs_SOLID)
269  {
270  TopTools_IndexedMapOfShape Solide;
271  TopExp::MapShapes(ashape,TopAbs_SOLID, Solide);
272  for (int i=1;i<=Solide.Extent();++i)
273  {
274  const TopoDS_Solid &solid=TopoDS::Solid(Solide.FindKey(i));
275  char idori[100];
276  sprintf(idori,"%d",fonction1.GetID(solid));
277  MG_VOLUME* mgvol=new MG_VOLUME(idori);
278  mggeo->ajouter_mg_volume(mgvol);
279  TopTools_IndexedMapOfShape coquille;
280  TopExp::MapShapes(solid,TopAbs_SHELL, coquille);
281  int nb_shell_occ=coquille.Extent();
282  for (int j=1; j<=nb_shell_occ; ++j)
283  {
284  const TopoDS_Shell &shell=TopoDS::Shell(coquille.FindKey(j));
285  MG_COQUILLE* mgcoq=new MG_COQUILLE(mgvol);
286  mggeo->ajouter_mg_coquille(mgcoq,mgvol);
287 
288  TopTools_IndexedMapOfShape faces;
289  TopExp::MapShapes(shell,TopAbs_FACE, faces);
290  int nb_face_occ=faces.Extent();
291  for (int k=1; k<=nb_face_occ;++k)
292  {
293  const TopoDS_Face &face=TopoDS::Face(faces.FindKey(k));
294  Handle(BRep_TFace) tface=Handle(BRep_TFace)::DownCast(face.TShape());
295  BRep_TFace* occface=tface.operator ->();
296  Handle(Geom_Surface) opsurface=BRep_Tool::Surface(face);
297  Geom_Surface* surface=opsurface.operator ->();
298  MG_SURFACE* mgsurface=trouver(surface);
299  if (mgsurface==NULL)
300  {
301  OCC_SURFACE* occsurface=new OCC_SURFACE(face, &fonction1);
302  mgsurface=occsurface;
303  mggeo->ajouter_mg_surface(mgsurface);
304  relation(surface,mgsurface);
305  }
306  MG_FACE* mgface=trouver(occface);
307  if (mgface==NULL)
308  {
309  int sens;
310  if (face.Orientation()==TopAbs_FORWARD) sens=1;
311  else sens=-1;
312  char idori[100];
313  sprintf(idori,"%d",fonction1.GetID(face));
314  mgface= new MG_FACE(idori,mgsurface,sens);
315  mggeo->ajouter_mg_face(mgface);
316  relation(occface,mgface);
317  }
318  int sens;
319  if (shell.Orientation()==TopAbs_FORWARD) sens=1;
320  else sens=-1;
321  MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(mgface,mgcoq,sens);
322  mgcoq->ajouter_mg_coface(mgcoface);
323 
324  TopTools_IndexedMapOfShape contours;
325  TopExp::MapShapes(face,TopAbs_WIRE, contours);
326  int nb_wire_occ=contours.Extent();
327  for (int l=1; l<=nb_wire_occ; ++l)
328  {
329  MG_BOUCLE* mgboucle=new MG_BOUCLE(mgface);
330  mggeo->ajouter_mg_boucle(mgboucle,mgface);
331  {
332  const TopoDS_Wire &wire=TopoDS::Wire(contours.FindKey(l));
333  BRepTools_WireExplorer Ex;
334  for(Ex.Init(wire); Ex.More(); Ex.Next())
335  {
336  //const TopoDS_Edge &edge=TopoDS::Edge(arretes.FindKey(m));
337  const TopoDS_Edge &edge=TopoDS::Edge(Ex.Current());
338  Handle(BRep_TEdge) tedge=Handle(BRep_TEdge)::DownCast(edge.TShape());
339  BRep_TEdge* occedge=tedge.operator ->();
340  double first, last;
341  Standard_Boolean degen1 = BRep_Tool::Degenerated(edge);
342  if (degen1) continue;
343  const Handle(Geom_Curve)& opcurve=BRep_Tool::Curve(edge,first,last);
344  Geom_Curve* courbe=opcurve.operator ->();
345  MG_COURBE* mgcourbe=trouver(courbe);
346  if (mgcourbe==NULL)
347  {
348  OCC_COURBE* occcourbe=new OCC_COURBE(edge, &fonction1);
349  mgcourbe=occcourbe;
350  mggeo->ajouter_mg_courbe(mgcourbe);
351  relation(courbe,mgcourbe);
352  }
353 
354  const TopoDS_Vertex &vertex1=TopExp::FirstVertex(edge, Standard_False);
355  Handle(BRep_TVertex) tvertex1=Handle(BRep_TVertex)::DownCast(vertex1.TShape());
356  BRep_TVertex* occvertex1=tvertex1.operator ->();
357  gp_Pnt oppoint1=BRep_Tool::Pnt(vertex1);
358 
359  MG_SOMMET* mgsom1=trouver(occvertex1);
360 
361  if (mgsom1==NULL)
362  {
363  OCC_POINT* occpoint=new OCC_POINT(vertex1, &fonction1);
364  MG_POINT* mgpoint=occpoint;
365  mggeo->ajouter_mg_point(occpoint);
366  char idori[100];
367  sprintf(idori,"%d",fonction1.GetID(vertex1));
368  mgsom1=new MG_SOMMET(idori,mgpoint);
369  mggeo->ajouter_mg_sommet(mgsom1);
370  relation(occvertex1,mgsom1);
371 
372  }
373 
374  const TopoDS_Vertex &vertex2=TopExp::LastVertex(edge,Standard_False);
375  Handle(BRep_TVertex) tvertex2=Handle(BRep_TVertex)::DownCast(vertex2.TShape());
376  BRep_TVertex* occvertex2=tvertex2.operator ->();
377  gp_Pnt oppoint2=BRep_Tool::Pnt(vertex2);
378 
379  MG_SOMMET* mgsom2=trouver(occvertex2);
380  if (mgsom2==NULL)
381  {
382  OCC_POINT* occpoint=new OCC_POINT(vertex2, &fonction1);
383  MG_POINT* mgpoint=occpoint;
384  mggeo->ajouter_mg_point(occpoint);
385  char idori[100];
386  sprintf(idori,"%d",fonction1.GetID(vertex2));
387  mgsom2=new MG_SOMMET(idori,mgpoint);
388  mggeo->ajouter_mg_sommet(mgsom2);
389  relation(occvertex2,mgsom2);
390 
391  }
392 
393  MG_ARETE* mgarete=trouver(occedge);
394 
395  if (mgarete==NULL)
396  {
397  int sens;
398  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
399  else sens=1;
400  char idori2[100];
401  sprintf(idori2,"%d",fonction1.GetID(edge));
402  mgarete=new MG_ARETE(idori2,mgcourbe,sens);
403  mggeo->ajouter_mg_arete(mgarete);
404  relation(occedge,mgarete);
405  MG_COSOMMET* mgcosom1=mggeo->ajouter_mg_cosommet(mgarete,mgsom1);
406  MG_COSOMMET* mgcosom2=mggeo->ajouter_mg_cosommet(mgarete,mgsom2);
407  mgarete->changer_cosommet1(mgcosom1);
408  mgarete->changer_cosommet2(mgcosom2);
409  }
410 
411  int sens;
412  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
413  else sens=-1;
414  MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(mgarete,mgboucle,sens);
415  mgboucle->ajouter_mg_coarete(mgcoarete);
416 
417  }//end for edge
418  }// end for wire
419  }// boucle sur mgboucle
420  }//end for face
421  }//end for shell
422  }//end for solid
423  }//end if type
424  else if (type==TopAbs_SHELL)
425  {
426  TopTools_IndexedMapOfShape Shell;
427  TopExp::MapShapes(ashape,TopAbs_SHELL, Shell);
428  for (int i=1;i<=Shell.Extent();++i)
429  {
430  const TopoDS_Shell &shell=TopoDS::Shell(Shell.FindKey(i));
431  char idori[100];
432  sprintf(idori,"%d",fonction1.GetID(shell));
433  MG_COQUE* mgcoque=new MG_COQUE(idori);
434  mggeo->ajouter_mg_coque(mgcoque);
435 
436  TopTools_IndexedMapOfShape coquille;
437  TopExp::MapShapes(shell,TopAbs_SHELL, coquille);
438  int nb_shell_occ=coquille.Extent();
439  for (int j=1; j<=nb_shell_occ; ++j)
440  {
441  const TopoDS_Shell &shell=TopoDS::Shell(coquille.FindKey(j));
442  MG_COQUILLE* mgcoq=new MG_COQUILLE(mgcoque);
443  mggeo->ajouter_mg_coquille(mgcoq,mgcoque);
444 
445  TopTools_IndexedMapOfShape faces;
446  TopExp::MapShapes(shell,TopAbs_FACE, faces);
447  int nb_face_occ=faces.Extent();
448  for (int k=1; k<=nb_face_occ;++k)
449  {
450  const TopoDS_Face &face=TopoDS::Face(faces.FindKey(k));
451  Handle(BRep_TFace) tface=Handle(BRep_TFace)::DownCast(face.TShape());
452  BRep_TFace* occface=tface.operator ->();
453  Handle(Geom_Surface) opsurface=BRep_Tool::Surface(face);
454  Geom_Surface* surface=opsurface.operator ->();
455  MG_SURFACE* mgsurface=trouver(surface);
456  if (mgsurface==NULL)
457  {
458  OCC_SURFACE* occsurface=new OCC_SURFACE(face, &fonction1);
459  mgsurface=occsurface;
460  mggeo->ajouter_mg_surface(mgsurface);
461  relation(surface,mgsurface);
462  }
463  MG_FACE* mgface=trouver(occface);
464  if (mgface==NULL)
465  {
466  int sens;
467  if (face.Orientation()==TopAbs_FORWARD) sens=1;
468  else sens=-1;
469  char idori[100];
470  sprintf(idori,"%d",fonction1.GetID(face));
471  mgface= new MG_FACE(idori,mgsurface,sens);
472  mggeo->ajouter_mg_face(mgface);
473  relation(occface,mgface);
474  }
475  int sens;
476  if (shell.Orientation()==TopAbs_FORWARD) sens=1;
477  else sens=-1;
478  MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(mgface,mgcoq,sens);
479  mgcoq->ajouter_mg_coface(mgcoface);
480 
481  TopTools_IndexedMapOfShape contours;
482  TopExp::MapShapes(face,TopAbs_WIRE, contours);
483  int nb_wire_occ=contours.Extent();
484  for (int l=1; l<=nb_wire_occ; ++l)
485  {
486  MG_BOUCLE* mgboucle=new MG_BOUCLE(mgface);
487  mggeo->ajouter_mg_boucle(mgboucle,mgface);
488  {
489  const TopoDS_Wire &wire=TopoDS::Wire(contours.FindKey(l));
490  TopTools_IndexedMapOfShape arretes;
491  TopExp::MapShapes(wire,TopAbs_EDGE,arretes);
492  int nb_edge_occ=arretes.Extent();
493  for (int m=1; m<=nb_edge_occ;++m)
494  {
495  const TopoDS_Edge &edge=TopoDS::Edge(arretes.FindKey(m));
496  Handle(BRep_TEdge) tedge=Handle(BRep_TEdge)::DownCast(edge.TShape());
497  BRep_TEdge* occedge=tedge.operator ->();
498  Standard_Boolean degen1 = BRep_Tool::Degenerated(edge);
499  if (degen1) continue;
500  double first, last;
501  const Handle(Geom_Curve)& opcurve=BRep_Tool::Curve(edge,first,last);
502  Geom_Curve* courbe=opcurve.operator ->();
503  TopTools_IndexedMapOfShape Solide;
504  TopExp::MapShapes(ashape,TopAbs_SOLID, Solide);
505  for (int i=1;i<=Solide.Extent();++i)
506  {
507  const TopoDS_Solid &solid=TopoDS::Solid(Solide.FindKey(i));
508  char idori[100];
509  sprintf(idori,"%d",fonction1.GetID(solid));
510  MG_VOLUME* mgvol=new MG_VOLUME(idori);
511  mggeo->ajouter_mg_volume(mgvol);
512 
513  TopTools_IndexedMapOfShape coquille;
514  TopExp::MapShapes(solid,TopAbs_SHELL, coquille);
515  int nb_shell_occ=coquille.Extent();
516  for (int j=1; j<=nb_shell_occ; ++j)
517  {
518  const TopoDS_Shell &shell=TopoDS::Shell(coquille.FindKey(j));
519  MG_COQUILLE* mgcoq=new MG_COQUILLE(mgvol);
520  mggeo->ajouter_mg_coquille(mgcoq,mgvol);
521 
522  TopTools_IndexedMapOfShape faces;
523  TopExp::MapShapes(shell,TopAbs_FACE, faces);
524  int nb_face_occ=faces.Extent();
525  for (int k=1; k<=nb_face_occ;++k)
526  {
527  const TopoDS_Face &face=TopoDS::Face(faces.FindKey(k));
528  Handle(BRep_TFace) tface=Handle(BRep_TFace)::DownCast(face.TShape());
529  BRep_TFace* occface=tface.operator ->();
530  Handle(Geom_Surface) opsurface=BRep_Tool::Surface(face);
531  Geom_Surface* surface=opsurface.operator ->();
532  MG_SURFACE* mgsurface=trouver(surface);
533  if (mgsurface==NULL)
534  {
535  OCC_SURFACE* occsurface=new OCC_SURFACE(face, &fonction1);
536  mgsurface=occsurface;
537  mggeo->ajouter_mg_surface(mgsurface);
538  relation(surface,mgsurface);
539  }
540  MG_FACE* mgface=trouver(occface);
541  if (mgface==NULL)
542  {
543  int sens;
544  if (face.Orientation()==TopAbs_FORWARD) sens=1;
545  else sens=-1;
546  char idori[100];
547  sprintf(idori,"%d",fonction1.GetID(face));
548  mgface= new MG_FACE(idori,mgsurface,sens);
549  mggeo->ajouter_mg_face(mgface);
550  relation(occface,mgface);
551  }
552  int sens;
553  if (shell.Orientation()==TopAbs_FORWARD) sens=1;
554  else sens=-1;
555  MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(mgface,mgcoq,sens);
556  mgcoq->ajouter_mg_coface(mgcoface);
557 
558  TopTools_IndexedMapOfShape contours;
559  TopExp::MapShapes(face,TopAbs_WIRE, contours);
560  int nb_wire_occ=contours.Extent();
561  for (int l=1; l<=nb_wire_occ; ++l)
562  {
563  MG_BOUCLE* mgboucle=new MG_BOUCLE(mgface);
564  mggeo->ajouter_mg_boucle(mgboucle,mgface);
565  {
566  const TopoDS_Wire &wire=TopoDS::Wire(contours.FindKey(l));
567  TopTools_IndexedMapOfShape arretes;
568  TopExp::MapShapes(wire,TopAbs_EDGE,arretes);
569  int nb_edge_occ=arretes.Extent();
570  for (int m=1; m<=nb_edge_occ;++m)
571  {
572  const TopoDS_Edge &edge=TopoDS::Edge(arretes.FindKey(m));
573  Handle(BRep_TEdge) tedge=Handle(BRep_TEdge)::DownCast(edge.TShape());
574  BRep_TEdge* occedge=tedge.operator ->();
575  Standard_Boolean degen1 = BRep_Tool::Degenerated(edge);
576  if (degen1) continue;
577  double first, last;
578  const Handle(Geom_Curve)& opcurve=BRep_Tool::Curve(edge,first,last);
579  Geom_Curve* courbe=opcurve.operator ->();
580 
581 
582  MG_COURBE* mgcourbe=trouver(courbe);
583  if (mgcourbe==NULL)
584  {
585  OCC_COURBE* occcourbe=new OCC_COURBE(edge, &fonction1);
586  mgcourbe=occcourbe;
587  mggeo->ajouter_mg_courbe(mgcourbe);
588  relation(courbe,mgcourbe);
589  }
590 
591  const TopoDS_Vertex &vertex1=TopExp::FirstVertex(edge, Standard_False);
592  Handle(BRep_TVertex) tvertex1=Handle(BRep_TVertex)::DownCast(vertex1.TShape());
593  BRep_TVertex* occvertex1=tvertex1.operator ->();
594  gp_Pnt oppoint1=BRep_Tool::Pnt(vertex1);
595 
596  MG_SOMMET* mgsom1=trouver(occvertex1);
597 
598  if (mgsom1==NULL)
599  {
600  OCC_POINT* occpoint=new OCC_POINT(vertex1, &fonction1);
601  MG_POINT* mgpoint=occpoint;
602  mggeo->ajouter_mg_point(occpoint);
603  char idori[100];
604  sprintf(idori,"%d",fonction1.GetID(vertex1));
605  mgsom1=new MG_SOMMET(idori,mgpoint);
606  mggeo->ajouter_mg_sommet(mgsom1);
607  relation(occvertex1,mgsom1);
608 
609  }
610 
611  const TopoDS_Vertex &vertex2=TopExp::LastVertex(edge,Standard_False);
612  Handle(BRep_TVertex) tvertex2=Handle(BRep_TVertex)::DownCast(vertex2.TShape());
613  BRep_TVertex* occvertex2=tvertex2.operator ->();
614  gp_Pnt oppoint2=BRep_Tool::Pnt(vertex2);
615 
616  MG_SOMMET* mgsom2=trouver(occvertex2);
617  if (mgsom2==NULL)
618  {
619  OCC_POINT* occpoint=new OCC_POINT(vertex2, &fonction1);
620  MG_POINT* mgpoint=occpoint;
621  mggeo->ajouter_mg_point(occpoint);
622  char idori[100];
623  sprintf(idori,"%d",fonction1.GetID(vertex2));
624  mgsom2=new MG_SOMMET(idori,mgpoint);
625  mggeo->ajouter_mg_sommet(mgsom2);
626  relation(occvertex2,mgsom2);
627 
628  }
629 
630  MG_ARETE* mgarete=trouver(occedge);
631 
632  if (mgarete==NULL)
633  {
634  int sens;
635  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
636  else sens=1;
637  char idori2[100];
638  sprintf(idori2,"%d",fonction1.GetID(edge));
639  mgarete=new MG_ARETE(idori2,mgcourbe,sens);
640  mggeo->ajouter_mg_arete(mgarete);
641  relation(occedge,mgarete);
642  MG_COSOMMET* mgcosom1=mggeo->ajouter_mg_cosommet(mgarete,mgsom1);
643  MG_COSOMMET* mgcosom2=mggeo->ajouter_mg_cosommet(mgarete,mgsom2);
644  mgarete->changer_cosommet1(mgcosom1);
645  mgarete->changer_cosommet2(mgcosom2);
646  }
647 
648  int sens;
649  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
650  else sens=-1;
651  MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(mgarete,mgboucle,sens);
652  mgboucle->ajouter_mg_coarete(mgcoarete);
653 
654 
655  }//end for edge
656  }// end for wire
657  }// boucle sur mgboucle
658  }//end for face
659  }//end for shell
660  }//end for solid
661 
662  MG_COURBE* mgcourbe=trouver(courbe);
663  if (mgcourbe==NULL)
664  {
665  OCC_COURBE* occcourbe=new OCC_COURBE(edge, &fonction1);
666  mgcourbe=occcourbe;
667  mggeo->ajouter_mg_courbe(mgcourbe);
668  relation(courbe,mgcourbe);
669  }
670 
671  const TopoDS_Vertex &vertex1=TopExp::FirstVertex(edge, Standard_False);
672  Handle(BRep_TVertex) tvertex1=Handle(BRep_TVertex)::DownCast(vertex1.TShape());
673  BRep_TVertex* occvertex1=tvertex1.operator ->();
674  gp_Pnt oppoint1=BRep_Tool::Pnt(vertex1);
675 
676  MG_SOMMET* mgsom1=trouver(occvertex1);
677 
678  if (mgsom1==NULL)
679  {
680  OCC_POINT* occpoint=new OCC_POINT(vertex1, &fonction1);
681  MG_POINT* mgpoint=occpoint;
682  mggeo->ajouter_mg_point(occpoint);
683  char idori[100];
684  sprintf(idori,"%d",fonction1.GetID(vertex1));
685  mgsom1=new MG_SOMMET(idori,mgpoint);
686  mggeo->ajouter_mg_sommet(mgsom1);
687  relation(occvertex1,mgsom1);
688 
689  }
690 
691  const TopoDS_Vertex &vertex2=TopExp::LastVertex(edge,Standard_False);
692  Handle(BRep_TVertex) tvertex2=Handle(BRep_TVertex)::DownCast(vertex2.TShape());
693  BRep_TVertex* occvertex2=tvertex2.operator ->();
694  gp_Pnt oppoint2=BRep_Tool::Pnt(vertex2);
695 
696  MG_SOMMET* mgsom2=trouver(occvertex2);
697  if (mgsom2==NULL)
698  {
699  OCC_POINT* occpoint=new OCC_POINT(vertex2, &fonction1);
700  MG_POINT* mgpoint=occpoint;
701  mggeo->ajouter_mg_point(occpoint);
702  char idori[100];
703  sprintf(idori,"%d",fonction1.GetID(vertex2));
704  mgsom2=new MG_SOMMET(idori,mgpoint);
705  mggeo->ajouter_mg_sommet(mgsom2);
706  relation(occvertex2,mgsom2);
707 
708  }
709 
710  MG_ARETE* mgarete=trouver(occedge);
711 
712  if (mgarete==NULL)
713  {
714  int sens;
715  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
716  else sens=1;
717  char idori2[100];
718  sprintf(idori2,"%d",fonction1.GetID(edge));
719  mgarete=new MG_ARETE(idori2,mgcourbe,sens);
720  mggeo->ajouter_mg_arete(mgarete);
721  relation(occedge,mgarete);
722  MG_COSOMMET* mgcosom1=mggeo->ajouter_mg_cosommet(mgarete,mgsom1);
723  MG_COSOMMET* mgcosom2=mggeo->ajouter_mg_cosommet(mgarete,mgsom2);
724  mgarete->changer_cosommet1(mgcosom1);
725  mgarete->changer_cosommet2(mgcosom2);
726  }
727 
728  int sens;
729  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
730  else sens=-1;
731  MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(mgarete,mgboucle,sens);
732  mgboucle->ajouter_mg_coarete(mgcoarete);
733 
734 
735  }//end for edge
736  }// end for wire
737  }// boucle sur mgboucle
738  }//end for face
739  }//end for shell
740  }//end for solid
741  }
742  else if (type==TopAbs_COMPOUND)
743  {
744 
745  TopTools_IndexedMapOfShape Compounde;
746  TopExp::MapShapes(ashape,TopAbs_COMPOUND, Compounde);
747  for (int i=1;i<=Compounde.Extent();++i)
748  {
749  TopoDS_Compound compound=TopoDS::Compound(Compounde.FindKey(i));
750  TopTools_IndexedMapOfShape Solide;
751  TopExp::MapShapes(compound,TopAbs_SOLID, Solide);
752  int nbsolid=Solide.Extent();
753  TopTools_IndexedMapOfShape coque;
754  TopExp::MapShapes(compound,TopAbs_SHELL, coque);
755  int nbcoque=coque.Extent();
756  int n=nbsolid;
757  if (n==0) n=nbcoque;
758  for (int i=1;i<=n;++i)
759  {
760 
761  MG_VOLUME* mgvol=NULL;
762  MG_COQUE* mgcoque=NULL;
763  TopTools_IndexedMapOfShape coquille;
764  if (nbsolid!=0)
765  {
766  const TopoDS_Solid& solid=TopoDS::Solid(Solide.FindKey(i));
767  char idori[100];
768  sprintf(idori,"%d",fonction1.GetID(solid));
769  mgvol=new MG_VOLUME(idori);
770  mggeo->ajouter_mg_volume(mgvol);
771  TopExp::MapShapes(solid,TopAbs_SHELL, coquille);
772  }
773  else
774  {
775  mgcoque=new MG_COQUE("-1");
776  mggeo->ajouter_mg_coque(mgcoque);
777  TopExp::MapShapes(compound,TopAbs_SHELL, coquille);
778  }
779  int nb_shell_occ=coquille.Extent();
780  for (int j=1; j<=nb_shell_occ; ++j)
781  {
782  const TopoDS_Shell &shell=TopoDS::Shell(coquille.FindKey(j));
783  if (nbsolid==0) fonction1.GetID(shell);
784  MG_COQUILLE* mgcoq;
785  if (nbsolid!=0)
786  {
787  mgcoq=new MG_COQUILLE(mgvol);
788  mggeo->ajouter_mg_coquille(mgcoq,mgvol);
789  }
790  else
791  {
792  mgcoq=new MG_COQUILLE(mgcoque);
793  mggeo->ajouter_mg_coquille(mgcoq,mgcoque);
794  }
795  TopTools_IndexedMapOfShape faces;
796  TopExp::MapShapes(shell,TopAbs_FACE, faces);
797  int nb_face_occ=faces.Extent();
798  for (int k=1; k<=nb_face_occ;++k)
799  {
800  const TopoDS_Face &face=TopoDS::Face(faces.FindKey(k));
801  Handle_BRep_TFace tface=Handle(BRep_TFace)::DownCast(face.TShape());
802  BRep_TFace* occface=tface.operator ->();
803  Handle(Geom_Surface) opsurface=BRep_Tool::Surface(face);
804  Geom_Surface* surface=opsurface.operator ->();
805  MG_SURFACE* mgsurface=trouver(surface);
806 
807  if (mgsurface==NULL)
808  {
809  OCC_SURFACE* occsurface=new OCC_SURFACE(face, &fonction1);
810  mgsurface=occsurface;
811  mggeo->ajouter_mg_surface(mgsurface);
812  relation(surface,mgsurface);
813  }
814  MG_FACE* mgface=trouver(occface);
815  if (mgface==NULL)
816  {
817  char idori[100];
818  sprintf(idori,"%d",fonction1.GetID(face));
819  int sens;
820  if (face.Orientation()==TopAbs_FORWARD) sens=1;
821  else sens=-1;
822  mgface= new MG_FACE(idori,mgsurface,sens);
823  mggeo->ajouter_mg_face(mgface);
824  relation(occface,mgface);
825  }
826  int sens;
827  if (shell.Orientation()==TopAbs_FORWARD) sens=1;
828  else sens=-1;
829  MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(mgface,mgcoq,sens);
830  mgcoq->ajouter_mg_coface(mgcoface);
831  TopTools_IndexedMapOfShape contours;
832  TopExp::MapShapes(face,TopAbs_WIRE, contours);
833  int nb_wire_occ=contours.Extent();
834  for (int l=1; l<=nb_wire_occ; ++l)
835  {
836  MG_BOUCLE* mgboucle=new MG_BOUCLE(mgface);
837  mggeo->ajouter_mg_boucle(mgboucle,mgface);
838  {
839  const TopoDS_Wire &wire=TopoDS::Wire(contours.FindKey(l));
840  BRepTools_WireExplorer Ex;
841  for(Ex.Init(wire); Ex.More(); Ex.Next())
842  {
843  TopoDS_Edge edge=TopoDS::Edge(Ex.Current());
844  Handle(BRep_TEdge) tedge=Handle(BRep_TEdge)::DownCast(edge.TShape());
845  BRep_TEdge* occedge=tedge.operator ->();
846  Standard_Boolean degen1 = BRep_Tool::Degenerated(edge);
847  if (degen1) continue;
848 
849  double first, last;
850  Handle(Geom_Curve) opcurve=BRep_Tool::Curve(edge,first,last);
851 
852  Geom_Curve* courbe=opcurve.operator ->();
853 
854  MG_COURBE* mgcourbe=trouver(courbe);
855  if (mgcourbe==NULL)
856  {
857  OCC_COURBE* occcourbe=new OCC_COURBE(edge, &fonction1);
858  mgcourbe=occcourbe;
859  mggeo->ajouter_mg_courbe(mgcourbe);
860  relation(courbe,mgcourbe);
861 
862  }
863 
864  const TopoDS_Vertex &vertex1=TopExp::FirstVertex(edge, Standard_False);
865  Handle(BRep_TVertex) tvertex1=Handle(BRep_TVertex)::DownCast(vertex1.TShape());
866  BRep_TVertex* occvertex1=tvertex1.operator ->();
867  gp_Pnt oppoint1=BRep_Tool::Pnt(vertex1);
868 
869  MG_SOMMET* mgsom1=trouver(occvertex1);
870  if (mgsom1==NULL)
871  {
872  OCC_POINT* occpoint=new OCC_POINT(vertex1, &fonction1);
873  MG_POINT* mgpoint=occpoint;
874  mggeo->ajouter_mg_point(occpoint);
875  char idori[100];
876  sprintf(idori,"%d",fonction1.GetID(vertex1));
877  mgsom1=new MG_SOMMET(idori,mgpoint);
878  mggeo->ajouter_mg_sommet(mgsom1);
879  relation(occvertex1,mgsom1);
880 
881  }
882 
883  const TopoDS_Vertex &vertex2=TopExp::LastVertex(edge,Standard_False);
884  Handle(BRep_TVertex) tvertex2=Handle(BRep_TVertex)::DownCast(vertex2.TShape());
885  BRep_TVertex* occvertex2=tvertex2.operator ->();
886  gp_Pnt oppoint2=BRep_Tool::Pnt(vertex2);
887 
888  MG_SOMMET* mgsom2=trouver(occvertex2);
889  if (mgsom2==NULL)
890  {
891  OCC_POINT* occpoint=new OCC_POINT(vertex2, &fonction1);
892  MG_POINT* mgpoint=occpoint;
893  mggeo->ajouter_mg_point(occpoint);
894  char idori[100];
895  sprintf(idori,"%d",fonction1.GetID(vertex2));
896  mgsom2=new MG_SOMMET(idori,mgpoint);
897  mggeo->ajouter_mg_sommet(mgsom2);
898  relation(occvertex2,mgsom2);
899 
900  }
901 
902  MG_ARETE* mgarete=trouver(occedge);
903  if (mgarete==NULL)
904  {
905  int sens;
906  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
907  else sens=1;
908  char idori2[100];
909  sprintf(idori2,"%d",fonction1.GetID(edge));
910  mgarete=new MG_ARETE(idori2,mgcourbe,sens);
911  mggeo->ajouter_mg_arete(mgarete);
912  relation(occedge,mgarete);
913  MG_COSOMMET* mgcosom1=mggeo->ajouter_mg_cosommet(mgarete,mgsom1);
914  MG_COSOMMET* mgcosom2=mggeo->ajouter_mg_cosommet(mgarete,mgsom2);
915  mgarete->changer_cosommet1(mgcosom1);
916  mgarete->changer_cosommet2(mgcosom2);
917  }
918 
919  int sens;
920  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
921  else sens=-1;
922  MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(mgarete,mgboucle,sens);
923  mgboucle->ajouter_mg_coarete(mgcoarete);
924 
925 
926  }//end for edge
927  }// end for wire
928  }// boucle sur mgboucle
929  }//end for face
930  }//end for shell
931  }//end for solid
932 
933  }//end for compound
934  }
935 
936  else if (type==TopAbs_COMPSOLID)
937  {
938  TopTools_IndexedMapOfShape Compsolide;
939  TopExp::MapShapes(ashape,TopAbs_COMPSOLID, Compsolide);
940  for (int i=1;i<=Compsolide.Extent();++i)
941  {
942  TopoDS_CompSolid compsolid=TopoDS::CompSolid(Compsolide.FindKey(i));
943 
944  TopTools_IndexedMapOfShape Solide;
945  TopExp::MapShapes(compsolid,TopAbs_SOLID, Solide);
946  for (int i=1;i<=Solide.Extent();++i)
947  {
948  const TopoDS_Solid &solid=TopoDS::Solid(Solide.FindKey(i));
949  char idori[100];
950  sprintf(idori,"%d",fonction1.GetID(solid));
951  MG_VOLUME* mgvol=new MG_VOLUME(idori);
952  mggeo->ajouter_mg_volume(mgvol);
953  TopTools_IndexedMapOfShape coquille;
954  TopExp::MapShapes(solid,TopAbs_SHELL, coquille);
955  int nb_shell_occ=coquille.Extent();
956  for (int j=1; j<=nb_shell_occ; ++j)
957  {
958  const TopoDS_Shell &shell=TopoDS::Shell(coquille.FindKey(j));
959  MG_COQUILLE* mgcoq=new MG_COQUILLE(mgvol);
960  mggeo->ajouter_mg_coquille(mgcoq,mgvol);
961 
962  TopTools_IndexedMapOfShape faces;
963  TopExp::MapShapes(shell,TopAbs_FACE, faces);
964  int nb_face_occ=faces.Extent();
965  for (int k=1; k<=nb_face_occ;++k)
966  {
967  const TopoDS_Face &face=TopoDS::Face(faces.FindKey(k));
968  Handle_BRep_TFace tface=Handle(BRep_TFace)::DownCast(face.TShape());
969  BRep_TFace* occface=tface.operator ->();
970 
971  Handle(Geom_Surface) opsurface=BRep_Tool::Surface(face);
972  Geom_Surface* surface=opsurface.operator ->();
973  MG_SURFACE* mgsurface=trouver(surface);
974 
975  if (mgsurface==NULL)
976  {
977  OCC_SURFACE* occsurface=new OCC_SURFACE(face, &fonction1);
978  mgsurface=occsurface;
979  mggeo->ajouter_mg_surface(mgsurface);
980  relation(surface,mgsurface);
981  }
982  MG_FACE* mgface=trouver(occface);
983  if (mgface==NULL)
984  {
985  char idori[100];
986  sprintf(idori,"%d",fonction1.GetID(face));
987  int sens;
988  if (face.Orientation()==TopAbs_FORWARD) sens=1;
989  else sens=-1;
990  mgface= new MG_FACE(idori,mgsurface,sens);
991  mggeo->ajouter_mg_face(mgface);
992  relation(occface,mgface);
993  }
994  int sens;
995  if (shell.Orientation()==TopAbs_FORWARD) sens=1;
996  else sens=-1;
997  MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(mgface,mgcoq,sens);
998  mgcoq->ajouter_mg_coface(mgcoface);
999 
1000  TopTools_IndexedMapOfShape contours;
1001  TopExp::MapShapes(face,TopAbs_WIRE, contours);
1002  int nb_wire_occ=contours.Extent();
1003  for (int l=1; l<=nb_wire_occ; ++l)
1004  {
1005  MG_BOUCLE* mgboucle=new MG_BOUCLE(mgface);
1006  mggeo->ajouter_mg_boucle(mgboucle,mgface);
1007  {
1008  TopoDS_Wire wire=TopoDS::Wire(contours.FindKey(l));
1009  BRepTools_WireExplorer Ex;
1010  for(Ex.Init(wire); Ex.More(); Ex.Next())
1011  {
1012  const TopoDS_Edge &edge=TopoDS::Edge(Ex.Current());
1013  Handle(BRep_TEdge) tedge=Handle(BRep_TEdge)::DownCast(edge.TShape());
1014  BRep_TEdge* occedge=tedge.operator ->();
1015  Standard_Boolean degen1 = BRep_Tool::Degenerated(edge);
1016  if (degen1) continue;
1017 
1018  double first, last;
1019  Handle(Geom_Curve) opcurve=BRep_Tool::Curve(edge,first,last);
1020 
1021  Geom_Curve* courbe=opcurve.operator ->();
1022 
1023  MG_COURBE* mgcourbe=trouver(courbe);
1024  if (mgcourbe==NULL)
1025  {
1026  OCC_COURBE* occcourbe=new OCC_COURBE(edge, &fonction1);
1027  mgcourbe=occcourbe;
1028  mggeo->ajouter_mg_courbe(mgcourbe);
1029  relation(courbe,mgcourbe);
1030 
1031  }
1032 
1033  const TopoDS_Vertex &vertex1=TopExp::FirstVertex(edge, Standard_False);
1034  Handle(BRep_TVertex) tvertex1=Handle(BRep_TVertex)::DownCast(vertex1.TShape());
1035  BRep_TVertex* occvertex1=tvertex1.operator ->();
1036  gp_Pnt oppoint1=BRep_Tool::Pnt(vertex1);
1037 
1038  MG_SOMMET* mgsom1=trouver(occvertex1);
1039  if (mgsom1==NULL)
1040  {
1041  OCC_POINT* occpoint=new OCC_POINT(vertex1, &fonction1);
1042  MG_POINT* mgpoint=occpoint;
1043  mggeo->ajouter_mg_point(occpoint);
1044  char idori[100];
1045  sprintf(idori,"%d",fonction1.GetID(vertex1));
1046 
1047  mgsom1=new MG_SOMMET(idori,mgpoint);
1048  mggeo->ajouter_mg_sommet(mgsom1);
1049  relation(occvertex1,mgsom1);
1050 
1051  }
1052 
1053  const TopoDS_Vertex &vertex2=TopExp::LastVertex(edge,Standard_False);
1054  Handle(BRep_TVertex) tvertex2=Handle(BRep_TVertex)::DownCast(vertex2.TShape());
1055  BRep_TVertex* occvertex2=tvertex2.operator ->();
1056  gp_Pnt oppoint2=BRep_Tool::Pnt(vertex2);
1057 
1058  MG_SOMMET* mgsom2=trouver(occvertex2);
1059  if (mgsom2==NULL)
1060  {
1061  OCC_POINT* occpoint=new OCC_POINT(vertex2, &fonction1);
1062  MG_POINT* mgpoint=occpoint;
1063  mggeo->ajouter_mg_point(occpoint);
1064  char idori[100];
1065  sprintf(idori,"%d",fonction1.GetID(vertex2));
1066  mgsom2=new MG_SOMMET(idori,mgpoint);
1067  mggeo->ajouter_mg_sommet(mgsom2);
1068  relation(occvertex2,mgsom2);
1069 
1070  }
1071 
1072  MG_ARETE* mgarete=trouver(occedge);
1073  if (mgarete==NULL)
1074  {
1075  int sens;
1076  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
1077  else sens=1;
1078  char idori2[100];
1079  sprintf(idori2,"%d",fonction1.GetID(edge));
1080  mgarete=new MG_ARETE(idori2,mgcourbe,sens);
1081  mggeo->ajouter_mg_arete(mgarete);
1082  relation(occedge,mgarete);
1083  MG_COSOMMET* mgcosom1=mggeo->ajouter_mg_cosommet(mgarete,mgsom1);
1084  MG_COSOMMET* mgcosom2=mggeo->ajouter_mg_cosommet(mgarete,mgsom2);
1085  mgarete->changer_cosommet1(mgcosom1);
1086  mgarete->changer_cosommet2(mgcosom2);
1087  }
1088 
1089  int sens;
1090  if (edge.Orientation()==TopAbs_FORWARD) sens=1;
1091  else sens=-1;
1092  MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(mgarete,mgboucle,sens*(edge.Orientation()));
1093  mgboucle->ajouter_mg_coarete(mgcoarete);
1094 
1095 
1096  }//end for edge
1097  }// end for wire
1098  }// boucle sur mgboucle
1099  }//end for face
1100  }//end for shell
1101  }//end for solid
1102 
1103  }//end for compound solid
1104 
1105  }
1106 
1107  LISTE_MG_FACE::iterator it_mg_face;
1108  for(MG_FACE* face=mggeo->get_premier_face(it_mg_face);face!=NULL;face=mggeo->get_suivant_face(it_mg_face))
1109  {
1110  fonction1.marquer_sommet_pole(face,precision);
1111  }
1112 
1113  return mggeo;
1114 }
1116 {
1117 VCT_MULTI_MODELE vct(mggeo);
1118 vct.recherche_identite();
1119 afusionne=true;
1120 }
1121 
1123 {
1124 #ifdef ALL_OCC
1125  BRep_Builder brep_builder;
1126  TopoDS_Compound Compound;
1127  brep_builder.MakeCompound(Compound);
1128  LISTE_MG_VOLUME::iterator it_volume;
1129  for(MG_VOLUME* mg_volume=mggeo->get_premier_volume(it_volume);mg_volume!=NULL;mg_volume=mggeo->get_suivant_volume(it_volume))
1130  {
1131  OCC_VOLUME* occ_volume = (OCC_VOLUME*)mg_volume;
1132  brep_builder.Add(Compound,occ_volume->get_TopoDS_Solid());
1133  }
1134  LISTE_MG_COQUILLE::iterator it_coquille;
1135  for(MG_COQUILLE* mg_coquille=mggeo->get_premier_coquille(it_coquille);mg_coquille!=NULL;mg_coquille=mggeo->get_suivant_coquille(it_coquille))
1136  {
1137  OCC_COQUILLE* occ_coquille = (OCC_COQUILLE*)mg_coquille;
1138  brep_builder.Add(Compound,occ_coquille->get_TopoDS_Shell());
1139  }
1140  LISTE_MG_FACE::iterator it_face;
1141  for(MG_FACE* mg_face=mggeo->get_premier_face(it_face);mg_face!=NULL;mg_face=mggeo->get_suivant_face(it_face))
1142  {
1143  OCC_FACE* occ_face = (OCC_FACE*)mg_face;
1144  brep_builder.Add(Compound,occ_face->get_TopoDS_Face());
1145  }
1146  LISTE_MG_BOUCLE::iterator it_boucle;
1147  for(MG_BOUCLE* mg_boucle=mggeo->get_premier_boucle(it_boucle);mg_boucle!=NULL;mg_boucle=mggeo->get_suivant_boucle(it_boucle))
1148  {
1149  OCC_BOUCLE* occ_boucle = (OCC_BOUCLE*)mg_boucle;
1150  brep_builder.Add(Compound,occ_boucle->get_TopoDS_Wire());
1151  }
1152  LISTE_MG_ARETE::iterator it_arete;
1153  for(MG_ARETE* mg_arete=mggeo->get_premier_arete(it_arete);mg_arete!=NULL;mg_arete=mggeo->get_suivant_arete(it_arete))
1154  {
1155  OCC_ARETE* occ_arete = (OCC_ARETE*)mg_arete;
1156  brep_builder.Add(Compound,occ_arete->get_TopoDS_Edge());
1157  }
1158  LISTE_MG_SOMMET::iterator it_sommet;
1159  for(MG_SOMMET* mg_sommet=mggeo->get_premier_sommet(it_sommet);mg_sommet!=NULL;mg_sommet=mggeo->get_suivant_sommet(it_sommet))
1160  {
1161  OCC_SOMMET* occ_sommet = (OCC_SOMMET*)mg_sommet;
1162  brep_builder.Add(Compound,occ_sommet->get_TopoDS_Vertex());
1163  }
1164  BRepMesh_IncrementalMesh(Compound,epsilon);
1165  TPL_MAP_ENTITE<MG_FACE*> facemaille;
1166  MG_MAILLAGE* mai=new MG_MAILLAGE(mggeo);
1167  gest.ajouter_mg_maillage(mai);
1168  int nb_volume=mggeo->get_nb_mg_volume();
1169  std::multimap<double,MG_NOEUD*,std::less<double> > tabnoeudfus;
1170  for (int i=0;i<nb_volume;i++)
1171  {
1172  MG_VOLUME* vol=mggeo->get_mg_volume(i);
1173  int nb_coquille=vol->get_nb_mg_coquille();
1174  for (int j=0;j<nb_coquille;j++)
1175  {
1176  MG_COQUILLE* coquille=vol->get_mg_coquille(j);
1177  int nbface=coquille->get_nb_mg_coface();
1178  for (int k=0;k<nbface;k++)
1179  {
1180  MG_FACE* face=coquille->get_mg_coface(k)->get_face();
1181  if (facemaille.existe(face)) continue;
1182  MG_SURFACE* sur=face->get_surface();
1183  OCC_SURFACE* occsur=(OCC_SURFACE*)sur;
1184  occsur->get_triangulation(mai,face,tabnoeudfus,epsilon,mode);
1185  facemaille.ajouter(face);
1186  }
1187  }
1188  }
1189  int nbcoque=mggeo->get_nb_mg_coque() ;
1190  for (int i=0;i<nbcoque;i++)
1191  {
1192  MG_COQUE* coq=mggeo->get_mg_coque(i);
1193  if (afusionne==false) tabnoeudfus.clear();
1194  int nb_coquille=coq->get_nb_mg_coquille();
1195  for (int j=0;j<nb_coquille;j++)
1196  {
1197  MG_COQUILLE* coquille=coq->get_mg_coquille(j);
1198  int nbface=coquille->get_nb_mg_coface();
1199  for (int k=0;k<nbface;k++)
1200  {
1201  MG_FACE* face=coquille->get_mg_coface(k)->get_face();
1202  if (facemaille.existe(face)) continue;
1203  MG_SURFACE* sur=face->get_surface();
1204  OCC_SURFACE* occsur=(OCC_SURFACE*)sur;
1205  occsur->get_triangulation(mai,face,tabnoeudfus,epsilon,mode);
1206  facemaille.ajouter(face);
1207  }
1208  }
1209  }
1210  return mai;
1211 #endif
1212 }
1213 
1214 
1216 {
1217  TPL_MAP_ENTITE<MG_FACE*> facemaille;
1218  BRepMesh_IncrementalMesh(ashape,epsilon);
1219  MG_MAILLAGE* mai=new MG_MAILLAGE(mggeo);
1220  gest.ajouter_mg_maillage(mai);
1221  int nb_volume=mggeo->get_nb_mg_volume();
1222  std::multimap<double,MG_NOEUD*,std::less<double> > tabnoeudfus;
1223  for (int i=0;i<nb_volume;i++)
1224  {
1225  MG_VOLUME* vol=mggeo->get_mg_volume(i);
1226  if (afusionne==false) tabnoeudfus.clear();
1227  int nb_coquille=vol->get_nb_mg_coquille();
1228  for (int j=0;j<nb_coquille;j++)
1229  {
1230  MG_COQUILLE* coquille=vol->get_mg_coquille(j);
1231  int nbface=coquille->get_nb_mg_coface();
1232  for (int k=0;k<nbface;k++)
1233  {
1234  MG_FACE* face=coquille->get_mg_coface(k)->get_face();
1235  if (facemaille.existe(face)) continue;
1236  MG_SURFACE* sur=face->get_surface();
1237  OCC_SURFACE* occsur=(OCC_SURFACE*)sur;
1238  occsur->get_triangulation(mai,face,tabnoeudfus,epsilon,mode);
1239  facemaille.ajouter(face);
1240  }
1241  }
1242 
1243  }
1244  int nbcoque=mggeo->get_nb_mg_coque() ;
1245  for (int i=0;i<nbcoque;i++)
1246  {
1247  MG_COQUE* coq=mggeo->get_mg_coque(i);
1248  if (afusionne==false) tabnoeudfus.clear();
1249  int nb_coquille=coq->get_nb_mg_coquille();
1250  for (int j=0;j<nb_coquille;j++)
1251  {
1252  MG_COQUILLE* coquille=coq->get_mg_coquille(j);
1253  int nbface=coquille->get_nb_mg_coface();
1254  for (int k=0;k<nbface;k++)
1255  {
1256  MG_FACE* face=coquille->get_mg_coface(k)->get_face();
1257  if (facemaille.existe(face)) continue;
1258  MG_SURFACE* sur=face->get_surface();
1259  OCC_SURFACE* occsur=(OCC_SURFACE*)sur;
1260  occsur->get_triangulation(mai,face,tabnoeudfus,epsilon,mode);
1261  facemaille.ajouter(face);
1262  }
1263  }
1264 
1265  }
1266 
1267 
1268 
1269 
1270 
1271 
1272  return mai;
1273 }
1274 
1275 
1276 
1277 #endif
1278 
1279 
1280 
1281 
MG_ARETE::changer_cosommet2
virtual void changer_cosommet2(class MG_COSOMMET *cosom)
Definition: mg_arete.cpp:77
OCC_IMPORT::~OCC_IMPORT
virtual ~OCC_IMPORT()
Definition: occ_import.cpp:88
VCT_MULTI_MODELE
Definition: vct_multi_modele.h:30
mg_geometrie.h
occ_point.h
MG_VOLUME::get_nb_mg_coquille
virtual int get_nb_mg_coquille(void)
Definition: mg_volume.cpp:65
MG_GEOMETRIE::get_premier_boucle
MG_BOUCLE * get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
Definition: mg_geometrie.cpp:1192
MG_BOUCLE
Definition: mg_boucle.h:35
gestionversion.h
MG_SURFACE
Definition: mg_surface.h:31
OCC_COURBE
Definition: occ_courbe.h:40
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
MG_GEOMETRIE::get_suivant_volume
MG_VOLUME * get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1702
mg_gestionnaire.h
MG_GEOMETRIE::ajouter_mg_boucle
virtual int ajouter_mg_boucle(MG_BOUCLE *mgboucle)
Definition: mg_geometrie.cpp:1041
OCC_VOLUME::get_TopoDS_Solid
TopoDS_Solid get_TopoDS_Solid(void)
Definition: occ_volume.cpp:53
OCC_IMPORT::importer_fichier_brep_V2017
class MG_GEOMETRIE * importer_fichier_brep_V2017(class MG_GESTIONNAIRE &gest, char *path_brep, char *nom_caf, int typefichier, double precision=1e-6, bool fusionner_entite_similaire=false)
Definition: occ_import.cpp:92
TPL_RELATION_ENTITE
Definition: tpl_relation_entite.h:31
MG_COSOMMET
Definition: mg_cosommet.h:31
robustPredicates::epsilon
static REAL epsilon
Definition: robustpredicates.cc:371
OCC_FONCTION::change_precision
virtual void change_precision(double val)
Definition: occ_fonction.cpp:93
MG_COARETE
Definition: mg_coarete.h:31
OCC_IMPORT::afusionne
bool afusionne
Definition: occ_import.h:105
occ_courbe.h
MG_GEOMETRIE::ajouter_mg_volume
virtual int ajouter_mg_volume(MG_VOLUME *mgvol)
Definition: mg_geometrie.cpp:1642
MG_GEOMETRIE::get_premier_face
MG_FACE * get_premier_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1338
TPL_RELATION_ENTITE::b
B * b
Definition: tpl_relation_entite.h:35
MG_COFACE::get_face
virtual MG_FACE * get_face(void)
Definition: mg_coface.cpp:58
OCC_VOLUME
Definition: occ_volume.h:34
MG_COQUE::get_mg_coquille
virtual MG_COQUILLE * get_mg_coquille(int num)
Definition: mg_coque.cpp:74
TPL_MAP_ENTITE::existe
virtual int existe(X x)
Definition: tpl_map_entite.h:61
MG_BOUCLE::ajouter_mg_coarete
virtual void ajouter_mg_coarete(class MG_COARETE *mgcoarete)
Definition: mg_boucle.cpp:73
OCC_SURFACE
Definition: occ_surface.h:38
MG_VOLUME
Definition: mg_volume.h:33
MG_COQUILLE
Definition: mg_coquille.h:34
MG_GESTIONNAIRE
Definition: mg_gestionnaire.h:57
MG_COFACE
Definition: mg_coface.h:33
MG_GEOMETRIE::ajouter_mg_sommet
virtual int ajouter_mg_sommet(MG_SOMMET *mgsom)
Definition: mg_geometrie.cpp:497
FICHIEROCC
#define FICHIEROCC
Definition: occ_import.h:58
MG_COURBE
Definition: mg_courbe.h:30
OCC_IMPORT::importer
class MG_GEOMETRIE * importer(class MG_GESTIONNAIRE &gest, char *path, int typefichier, double precision=1e-6)
Definition: occ_import.cpp:255
occ_import.h
MG_VOLUME::get_mg_coquille
virtual MG_COQUILLE * get_mg_coquille(int num)
Definition: mg_volume.cpp:70
MG_GEOMETRIE::get_suivant_boucle
MG_BOUCLE * get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
Definition: mg_geometrie.cpp:1200
OCC_BOUCLE::get_TopoDS_Wire
TopoDS_Wire get_TopoDS_Wire(void)
Definition: occ_boucle.cpp:98
MG_GEOMETRIE::get_suivant_sommet
MG_SOMMET * get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:632
OCC_ARETE::get_TopoDS_Edge
TopoDS_Edge get_TopoDS_Edge(void)
Definition: occ_arete.cpp:65
MG_GESTIONNAIRE::ajouter_mg_maillage
int ajouter_mg_maillage(MG_MAILLAGE *mgmai)
Definition: mg_gestionnaire.cpp:521
MG_GEOMETRIE::ajouter_mg_coquille
virtual int ajouter_mg_coquille(MG_COQUILLE *mgcoq)
Definition: mg_geometrie.cpp:1473
MG_GEOMETRIE::ajouter_mg_coface
virtual int ajouter_mg_coface(MG_COFACE *mgcoface)
Definition: mg_geometrie.cpp:1356
OCC_FONCTION::GetShapePrincipale
virtual TopoDS_Shape & GetShapePrincipale(void)
Definition: occ_fonction.cpp:72
OCC_IMPORT::importer_triangulation_V2017
class MG_MAILLAGE * importer_triangulation_V2017(class MG_GESTIONNAIRE &gest, MG_GEOMETRIE *mggeo, double epsilon=1., int mode=1)
Definition: occ_import.cpp:1122
OCC_IMPORT::OCC_IMPORT
OCC_IMPORT()
Definition: occ_import.cpp:85
MG_GEOMETRIE::ajouter_mg_cosommet
virtual int ajouter_mg_cosommet(MG_COSOMMET *mgcosom)
Definition: mg_geometrie.cpp:643
OCC_BOUCLE
Definition: occ_boucle.h:38
OCC_FONCTION_V2017::importer_fichier_brep
virtual int importer_fichier_brep(char *file, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:81
OCC_SOMMET
Definition: occ_sommet.h:34
MG_GESTIONNAIRE::ajouter_mg_geometrie
int ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
Definition: mg_gestionnaire.cpp:306
MG_GEOMETRIE::get_suivant_coquille
MG_COQUILLE * get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
Definition: mg_geometrie.cpp:1552
OCC_COQUILLE::get_TopoDS_Shell
TopoDS_Shell get_TopoDS_Shell(void)
Definition: occ_coquille.cpp:83
occ_fonction_v2015.h
occ_fonction_v2017.h
OCC_COQUILLE
Definition: occ_coquille.h:36
MG_GEOMETRIE::get_nb_mg_coque
unsigned int get_nb_mg_coque(void)
Definition: mg_geometrie.cpp:1847
MG_POINT
Definition: mg_point.h:33
OCC_SOMMET::get_TopoDS_Vertex
TopoDS_Vertex get_TopoDS_Vertex(void)
Definition: occ_sommet.cpp:52
MG_GEOMETRIE::get_premier_sommet
MG_SOMMET * get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:624
VCT_MULTI_MODELE::recherche_identite
void recherche_identite(void)
Definition: vct_multi_modele.cpp:47
OCC_IMPORT::fusionne
void fusionne(MG_GEOMETRIE *mggeo)
Definition: occ_import.cpp:1115
OCC_IMPORT::trouver
MG_FACE * trouver(BRep_TFace *face)
Definition: occ_import.cpp:214
OCC_IMPORT::importer_fichier_STEP_V2017
class MG_GEOMETRIE * importer_fichier_STEP_V2017(class MG_GESTIONNAIRE &gest, char *path_step, char *nom_caf, int typefichier, double precision=1e-6, bool fusionner_entite_similaire=false)
Definition: occ_import.cpp:118
MG_GEOMETRIE::ajouter_mg_courbe
virtual int ajouter_mg_courbe(MG_COURBE *mgcrb)
Definition: mg_geometrie.cpp:251
MG_GEOMETRIE::get_premier_coquille
MG_COQUILLE * get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
Definition: mg_geometrie.cpp:1544
TPL_RELATION_ENTITE::a
A * a
Definition: tpl_relation_entite.h:34
MG_GEOMETRIE::ajouter_mg_face
virtual int ajouter_mg_face(MG_FACE *mgface)
Definition: mg_geometrie.cpp:1210
MG_GEOMETRIE::ajouter_mg_coarete
virtual int ajouter_mg_coarete(MG_COARETE *mgcoarete)
Definition: mg_geometrie.cpp:925
OCC_IMPORT::lst_face
std::vector< TPL_RELATION_ENTITE< BRep_TFace,MG_FACE > > lst_face
Definition: occ_import.h:107
MG_GEOMETRIE::get_premier_arete
MG_ARETE * get_premier_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:907
occ_surface.h
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
MG_GEOMETRIE::get_nb_mg_volume
unsigned int get_nb_mg_volume(void)
Definition: mg_geometrie.cpp:1712
OCC_FONCTION::marquer_sommet_pole
virtual void marquer_sommet_pole(class MG_FACE *face, double precision=1.0e-06)
Definition: occ_fonction.cpp:83
MG_GEOMETRIE::ajouter_mg_arete
virtual int ajouter_mg_arete(MG_ARETE *mgarete)
Definition: mg_geometrie.cpp:759
vct_multi_modele.h
MG_GEOMETRIE::ajouter_mg_point
virtual int ajouter_mg_point(MG_POINT *mgpt)
Definition: mg_geometrie.cpp:137
OCC_FACE::get_TopoDS_Face
TopoDS_Face get_TopoDS_Face(void)
Definition: occ_face.cpp:53
FICHIERSTEP
#define FICHIERSTEP
Definition: occ_import.h:57
OCC_POINT
Definition: occ_point.h:45
MG_COQUILLE::ajouter_mg_coface
virtual void ajouter_mg_coface(class MG_COFACE *mgcoface)
Definition: mg_coquille.cpp:71
OCC_FONCTION_V2017::importer_fichier_STEP
virtual int importer_fichier_STEP(char *file, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:44
MG_ARETE::changer_cosommet1
virtual void changer_cosommet1(class MG_COSOMMET *cosom)
Definition: mg_arete.cpp:73
MG_GEOMETRIE::get_premier_volume
MG_VOLUME * get_premier_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1694
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_GEOMETRIE::get_mg_coque
MG_COQUE * get_mg_coque(unsigned int num)
Definition: mg_geometrie.cpp:1818
OCC_IMPORT::relation
void relation(BRep_TFace *ent1, class MG_FACE *ent2)
Definition: occ_import.cpp:170
MG_COQUILLE::get_nb_mg_coface
virtual int get_nb_mg_coface(void)
Definition: mg_coquille.cpp:76
MG_COQUILLE::get_mg_coface
virtual MG_COFACE * get_mg_coface(int num)
Definition: mg_coquille.cpp:90
OCC_FACE
Definition: occ_face.h:34
MG_GEOMETRIE::ajouter_mg_coque
virtual int ajouter_mg_coque(MG_COQUE *mgcoque)
Definition: mg_geometrie.cpp:1777
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
OCC_FONCTION_V2017
Definition: occ_fonction_v2017.h:104
MG_COQUE
Definition: mg_coque.h:33
MG_COQUE::get_nb_mg_coquille
virtual int get_nb_mg_coquille(void)
Definition: mg_coque.cpp:69
occ_fonction.h
OCC_IMPORT::ashape
TopoDS_Shape ashape
Definition: occ_import.h:85
MG_SOMMET
Definition: mg_sommet.h:35
OCC_ARETE
Definition: occ_arete.h:34
OCC_IMPORT::lst_sommet
std::vector< TPL_RELATION_ENTITE< BRep_TVertex, MG_SOMMET > > lst_sommet
Definition: occ_import.h:111
OCC_FONCTION::GetID
virtual int GetID(const TopoDS_Shape &shape)
Definition: occ_fonction.cpp:59
MG_GEOMETRIE::get_suivant_face
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1346
OCC_FONCTION
Definition: occ_fonction.h:40
MG_GEOMETRIE::ajouter_mg_surface
virtual int ajouter_mg_surface(MG_SURFACE *mgsrf)
Definition: mg_geometrie.cpp:366
MG_GEOMETRIE::get_mg_volume
MG_VOLUME * get_mg_volume(unsigned int num)
Definition: mg_geometrie.cpp:1683
MG_FACE::get_surface
virtual MG_SURFACE * get_surface(void)
Definition: mg_face.cpp:109
MG_GEOMETRIE::get_suivant_arete
MG_ARETE * get_suivant_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:915
OCC_IMPORT::lst_arete
std::vector< TPL_RELATION_ENTITE< BRep_TEdge, MG_ARETE > > lst_arete
Definition: occ_import.h:109
MG_GEOMETRIE::get_occ_fonction
class OCC_FONCTION & get_occ_fonction(void)
Definition: mg_geometrie.cpp:2701
OCC_SURFACE::get_triangulation
virtual void get_triangulation(class MG_MAILLAGE *mai, class MG_FACE *face, std::multimap< double, class MG_NOEUD *, std::less< double > > &tabnoeudfusm, double eps, int mode)
Definition: occ_surface.cpp:644
m
#define m(i, j)