MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
occ_fonction_v2017.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_fonction_v2017.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifdef ALL_OCC
23 #include "occ_fonction_v2017.h"
24 
26 {
27  m_modifications=false;
28 }
29 
31 {
32  m_map_id_TopoDS_Shape.clear();
35 }
36 
38 {
39  return "OCCV2017";
40 }
41 
42 
43 
45  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
46  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
47  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
48  MG_GEOMETRIE* mg_geometrie,
49  bool fusionner_entite_similaire,
50  double precision)
51 {
52  STEPControl_Reader step_control_reader;
53  if(step_control_reader.ReadFile(file)!=IFSelect_RetDone)
54  {
55  std::cout << "*** OCC_FONCTION_V2017 : Erreur lecture fichier STEP ! ***" << std::endl;
56  return FAIL;
57  }
58  step_control_reader.TransferRoots();
59  int nb_shape= step_control_reader.NbShapes();
60  for(int i=1;i<nb_shape+1;i++)
61  {
62  TopoDS_Shape topods_shape = step_control_reader.Shape(i);
63  importer_TopoDS_Shape(topods_shape,
64  map_nouveau_mg_element_topologique,
65  map_nouveau_mg_element_cotopologique,
66  map_nouveau_mg_element_geometrique,
67  mg_geometrie,
68  fusionner_entite_similaire,
69  precision);
70  }
71  return OK;
72 }
73 
75  MG_GEOMETRIE* mg_geometrie)
76 {
77 
78 return 0;
79 }
80 
82  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
83  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
84  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
85  MG_GEOMETRIE* mg_geometrie,
86  bool fusionner_entite_similaire,
87  double precision)
88 {
89  TopoDS_Shape topods_shape;
90  BRep_Builder brep_builder;
91  if(!BRepTools::Read(topods_shape,file,brep_builder))
92  {
93  std::cout << "*** OCC_FONCTION_V2017 : Erreur lecture fichier BREP ! ***" << std::endl;
94  return FAIL;
95  }
96  importer_TopoDS_Shape(topods_shape,
97  map_nouveau_mg_element_topologique,
98  map_nouveau_mg_element_cotopologique,
99  map_nouveau_mg_element_geometrique,
100  mg_geometrie,
101  fusionner_entite_similaire,
102  precision);
103  return OK;
104 }
105 
107  MG_GEOMETRIE* mg_geometrie)
108 {
109  BRep_Builder brep_builder;
110  TopoDS_Compound Compound;
111  brep_builder.MakeCompound(Compound);
112  LISTE_MG_VOLUME::iterator it_volume;
113  for(MG_VOLUME* mg_volume=mg_geometrie->get_premier_volume(it_volume);mg_volume!=NULL;mg_volume=mg_geometrie->get_suivant_volume(it_volume))
114  {
115  OCC_VOLUME* occ_volume = (OCC_VOLUME*)mg_volume;
116  brep_builder.Add(Compound,occ_volume->get_TopoDS_Solid());
117  }
118  LISTE_MG_COQUILLE::iterator it_coquille;
119  for(MG_COQUILLE* mg_coquille=mg_geometrie->get_premier_coquille(it_coquille);mg_coquille!=NULL;mg_coquille=mg_geometrie->get_suivant_coquille(it_coquille))
120  {
121  OCC_COQUILLE* occ_coquille = (OCC_COQUILLE*)mg_coquille;
122  brep_builder.Add(Compound,occ_coquille->get_TopoDS_Shell());
123  }
124  LISTE_MG_FACE::iterator it_face;
125  for(MG_FACE* mg_face=mg_geometrie->get_premier_face(it_face);mg_face!=NULL;mg_face=mg_geometrie->get_suivant_face(it_face))
126  {
127  OCC_FACE* occ_face = (OCC_FACE*)mg_face;
128  brep_builder.Add(Compound,occ_face->get_TopoDS_Face());
129  }
130  LISTE_MG_BOUCLE::iterator it_boucle;
131  for(MG_BOUCLE* mg_boucle=mg_geometrie->get_premier_boucle(it_boucle);mg_boucle!=NULL;mg_boucle=mg_geometrie->get_suivant_boucle(it_boucle))
132  {
133  OCC_BOUCLE* occ_boucle = (OCC_BOUCLE*)mg_boucle;
134  brep_builder.Add(Compound,occ_boucle->get_TopoDS_Wire());
135  }
136  LISTE_MG_ARETE::iterator it_arete;
137  for(MG_ARETE* mg_arete=mg_geometrie->get_premier_arete(it_arete);mg_arete!=NULL;mg_arete=mg_geometrie->get_suivant_arete(it_arete))
138  {
139  OCC_ARETE* occ_arete = (OCC_ARETE*)mg_arete;
140  brep_builder.Add(Compound,occ_arete->get_TopoDS_Edge());
141  }
142  LISTE_MG_SOMMET::iterator it_sommet;
143  for(MG_SOMMET* mg_sommet=mg_geometrie->get_premier_sommet(it_sommet);mg_sommet!=NULL;mg_sommet=mg_geometrie->get_suivant_sommet(it_sommet))
144  {
145  OCC_SOMMET* occ_sommet = (OCC_SOMMET*)mg_sommet;
146  brep_builder.Add(Compound,occ_sommet->get_TopoDS_Vertex());
147  }
148  BRepTools::Write(Compound,file);
149  return 0;
150 }
151 
153  MG_GEOMETRIE* mg_geometrie)
154 {
155  if(!m_modifications) return OK;
156  Handle(TDocStd_Application) tdocstd_application = new TDocStd_Application ();
157  Handle(TDocStd_Document) tdocstd_document;
158  tdocstd_application->NewDocument("NewDocumentFormat", tdocstd_document);
159  Handle(XmlXCAFDrivers_DocumentRetrievalDriver) retrivaldriver = new XmlXCAFDrivers_DocumentRetrievalDriver;
160  Handle(XmlXCAFDrivers_DocumentStorageDriver) storagedriver = new XmlXCAFDrivers_DocumentStorageDriver("");
161  tdocstd_application->DefineFormat("NewDocumentFormat", "New format for OCAF documents", "ocaf",retrivaldriver,storagedriver);
162  XCAFDoc_DocumentTool doctool;
163  Handle (XCAFDoc_ShapeTool) shapetool = doctool.ShapeTool(tdocstd_document->Main());
164 
165  std::map<long,MG_IDENTIFICATEUR*> map_element_traite;
166  TDF_Label label;
167  LISTE_MG_VOLUME::iterator it_volume;
168  for(MG_VOLUME* mg_volume=mg_geometrie->get_premier_volume(it_volume);mg_volume!=NULL;mg_volume=mg_geometrie->get_suivant_volume(it_volume))
169  {
170  OCC_VOLUME* occ_volume = (OCC_VOLUME*)mg_volume;
171  identifier_TopoDS_Solid(occ_volume,map_element_traite,shapetool.operator*(),label,true);
172  }
173  LISTE_MG_COQUILLE::iterator it_coquille;
174  for(MG_COQUILLE* mg_coquille=mg_geometrie->get_premier_coquille(it_coquille);mg_coquille!=NULL;mg_coquille=mg_geometrie->get_suivant_coquille(it_coquille))
175  {
176  OCC_COQUILLE* occ_coquille = (OCC_COQUILLE*)mg_coquille;
177  identifier_TopoDS_Shell(occ_coquille,map_element_traite,shapetool.operator*(),label,true);
178  }
179  LISTE_MG_FACE::iterator it_face;
180  for(MG_FACE* mg_face=mg_geometrie->get_premier_face(it_face);mg_face!=NULL;mg_face=mg_geometrie->get_suivant_face(it_face))
181  {
182  OCC_FACE* occ_face = (OCC_FACE*)mg_face;
183  identifier_TopoDS_Face(occ_face,map_element_traite,shapetool.operator*(),label,true);
184  }
185  LISTE_MG_BOUCLE::iterator it_boucle;
186  for(MG_BOUCLE* mg_boucle=mg_geometrie->get_premier_boucle(it_boucle);mg_boucle!=NULL;mg_boucle=mg_geometrie->get_suivant_boucle(it_boucle))
187  {
188  OCC_BOUCLE* occ_boucle = (OCC_BOUCLE*)mg_boucle;
189  identifier_TopoDS_Wire(occ_boucle,map_element_traite,shapetool.operator*(),label,true);
190  }
191  LISTE_MG_ARETE::iterator it_arete;
192  for(MG_ARETE* mg_arete=mg_geometrie->get_premier_arete(it_arete);mg_arete!=NULL;mg_arete=mg_geometrie->get_suivant_arete(it_arete))
193  {
194  OCC_ARETE* occ_arete = (OCC_ARETE*)mg_arete;
195  identifier_TopoDS_Edge(occ_arete,map_element_traite,shapetool.operator*(),label,true);
196  }
197  LISTE_MG_SOMMET::iterator it_sommet;
198  for(MG_SOMMET* mg_sommet=mg_geometrie->get_premier_sommet(it_sommet);mg_sommet!=NULL;mg_sommet=mg_geometrie->get_suivant_sommet(it_sommet))
199  {
200  OCC_SOMMET* occ_sommet = (OCC_SOMMET*)mg_sommet;
201  identifier_TopoDS_Vertex(occ_sommet,map_element_traite,shapetool.operator*(),label,true);
202  }
203  TCollection_ExtendedString messagestatus;
204  tdocstd_application->SaveAs(tdocstd_document,file,messagestatus);
205  tdocstd_application->Close(tdocstd_document);
206  return OK;
207 }
208 
210 {
211  std::string str_file = file;
212  str_file.erase(str_file.end()-5,str_file.end());
213  Handle(TDocStd_Application) tdocstd_application = new TDocStd_Application ();
214  Handle(TDocStd_Document) tdocstd_document;
215  Handle(XmlXCAFDrivers_DocumentRetrievalDriver) retrivaldriver = new XmlXCAFDrivers_DocumentRetrievalDriver;
216  Handle(XmlXCAFDrivers_DocumentStorageDriver) storagedriver = new XmlXCAFDrivers_DocumentStorageDriver("");
217  tdocstd_application->DefineFormat("NewDocumentFormat", "New format for OCAF documents", "ocaf",retrivaldriver,storagedriver);
218  PCDM_ReaderStatus read_status = tdocstd_application->Open((char*)str_file.c_str(),tdocstd_document);
219  if(read_status!=PCDM_RS_OK)
220  {
221  std::cout << "*** OCC_FONCTION_V2017 : Erreur ouverture fichier OCAF ! ***" << std::endl;
222  return FAIL;
223  }
224  XCAFDoc_DocumentTool doctool;
225  Handle (XCAFDoc_ShapeTool) shapetool = doctool.ShapeTool(tdocstd_document->Main());
226  TDF_LabelSequence lst_label_top_shape;
227  shapetool->GetShapes(lst_label_top_shape);
228  TDF_LabelSequence::Iterator it(lst_label_top_shape);
229  for(;it.More();it.Next())
230  {
231  TopoDS_Shape topods_shape = shapetool->GetShape(it.Value());
232  if(topods_shape.IsNull())
233  {
234  std::cout << "*** OCC_FONCTION_V2017 : Erreur lecture fichier OCAF ! ***" << std::endl;
235  return FAIL;
236  }
237  TopTools_IndexedMapOfShape map_TopoDS_Solid;
238  TopExp::MapShapes(topods_shape,TopAbs_SOLID, map_TopoDS_Solid);
239  if(map_TopoDS_Solid.Extent()>1);
240  for(int i=1;i<map_TopoDS_Solid.Extent()+1;i++)
241  {
242  TopoDS_Solid topods_solid = TopoDS::Solid(map_TopoDS_Solid.FindKey(i));
243  TDF_Label label_topods_solid = shapetool->FindShape(topods_solid);
244  if(!label_topods_solid.IsNull())
245  {
246  Handle(TDataStd_Name) nom = new TDataStd_Name;
247  label_topods_solid.FindAttribute(TDataStd_Name::GetID(),nom);
248  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
249  label_topods_solid.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
250  ajouter_TopoDS_Solid_id(topods_solid,std::stol(num_string->Get().ToCString()));
251  }
252  }
253  TopTools_IndexedMapOfShape map_TopoDS_Shell;
254  TopExp::MapShapes(topods_shape,TopAbs_SHELL, map_TopoDS_Shell);
255  for(int i=1;i<map_TopoDS_Shell.Extent()+1;i++)
256  {
257  TopoDS_Shell topods_shell = TopoDS::Shell(map_TopoDS_Shell.FindKey(i));
258  TDF_Label label_topods_shell = shapetool->FindShape(topods_shell);
259  if(!label_topods_shell.IsNull())
260  {
261  Handle(TDataStd_Name) nom = new TDataStd_Name;
262  label_topods_shell.FindAttribute(TDataStd_Name::GetID(),nom);
263  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
264  label_topods_shell.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
265  ajouter_TopoDS_Shell_id(topods_shell,std::stol(num_string->Get().ToCString()));
266  }
267  }
268  TopTools_IndexedMapOfShape map_TopoDS_Face;
269  TopExp::MapShapes(topods_shape,TopAbs_FACE, map_TopoDS_Face);
270  for(int i=1;i<map_TopoDS_Face.Extent()+1;i++)
271  {
272  TopoDS_Face topods_face = TopoDS::Face(map_TopoDS_Face.FindKey(i));
273  TDF_Label label_topods_face = shapetool->FindShape(topods_face);
274  if(!label_topods_face.IsNull())
275  {
276  Handle(TDataStd_Name) nom = new TDataStd_Name;
277  label_topods_face.FindAttribute(TDataStd_Name::GetID(),nom);
278  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
279  label_topods_face.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
280  ajouter_TopoDS_Face_id(topods_face,std::stol(num_string->Get().ToCString()));
281  }
282  }
283  TopTools_IndexedMapOfShape map_TopoDS_Wire;
284  TopExp::MapShapes(topods_shape,TopAbs_WIRE, map_TopoDS_Wire);
285  for(int i=1;i<map_TopoDS_Wire.Extent()+1;i++)
286  {
287  TopoDS_Wire topods_wire = TopoDS::Wire(map_TopoDS_Wire.FindKey(i));
288  TDF_Label label_topods_wire = shapetool->FindShape(topods_wire);
289  if(!label_topods_wire.IsNull())
290  {
291  Handle(TDataStd_Name) nom = new TDataStd_Name;
292  label_topods_wire.FindAttribute(TDataStd_Name::GetID(),nom);
293  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
294  label_topods_wire.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
295  ajouter_TopoDS_Wire_id(topods_wire,std::stol(num_string->Get().ToCString()));
296  }
297  }
298  TopTools_IndexedMapOfShape map_TopoDS_Edge;
299  TopExp::MapShapes(topods_shape,TopAbs_EDGE, map_TopoDS_Edge);
300  for(int i=1;i<map_TopoDS_Edge.Extent()+1;i++)
301  {
302  TopoDS_Edge topods_edge = TopoDS::Edge(map_TopoDS_Edge.FindKey(i));
303  TDF_Label label_topods_edge = shapetool->FindShape(topods_edge);
304  if(!label_topods_edge.IsNull())
305  {
306  Handle(TDataStd_Name) nom = new TDataStd_Name;
307  label_topods_edge.FindAttribute(TDataStd_Name::GetID(),nom);
308  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
309  label_topods_edge.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
310  if(nom->Get()!="Arete_degenere")
311  ajouter_TopoDS_Edge_id(topods_edge,std::stol(num_string->Get().ToCString()));
312  }
313  }
314  TopTools_IndexedMapOfShape map_TopoDS_Vertex;
315  TopExp::MapShapes(topods_shape,TopAbs_VERTEX, map_TopoDS_Vertex);
316  for(int i=1;i<map_TopoDS_Vertex.Extent()+1;i++)
317  {
318  TopoDS_Vertex topods_vertex = TopoDS::Vertex(map_TopoDS_Vertex.FindKey(i));
319  TDF_Label label_topods_vertex = shapetool->FindShape(topods_vertex);
320  if(!label_topods_vertex.IsNull())
321  {
322  Handle(TDataStd_Name) nom = new TDataStd_Name;
323  label_topods_vertex.FindAttribute(TDataStd_Name::GetID(),nom);
324  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
325  label_topods_vertex.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
326  ajouter_TopoDS_Vertex_id(topods_vertex,std::stol(num_string->Get().ToCString()));
327  }
328  }
329  }
330  tdocstd_application->Close(tdocstd_document);
331  return OK;
332 }
333 
334 void OCC_FONCTION_V2017::importer_TopoDS_Shape(TopoDS_Shape topods_shape,
335  std::map< MG_ELEMENT_TOPOLOGIQUE*, MG_ELEMENT_TOPOLOGIQUE* >* map_nouveau_mg_element_topologique,
336  std::map< MG_ELEMENT_COTOPOLOGIQUE*, MG_ELEMENT_COTOPOLOGIQUE* >* map_nouveau_mg_element_cotopologique,
337  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
338  MG_GEOMETRIE* mg_geometrie,
339  bool fusionner_entite_similaire,
340  double precision)
341 {
342  m_modifications=true;
343  switch(topods_shape.ShapeType())
344  {
345  case TopAbs_COMPOUND:
346  importer_TopoDS_Compound(TopoDS::Compound(topods_shape),
347  map_nouveau_mg_element_topologique,
348  map_nouveau_mg_element_cotopologique,
349  map_nouveau_mg_element_geometrique,
350  mg_geometrie,
351  fusionner_entite_similaire,
352  precision); break;
353  case TopAbs_COMPSOLID:
354  importer_TopoDS_Compound(TopoDS::Compound(topods_shape),
355  map_nouveau_mg_element_topologique,
356  map_nouveau_mg_element_cotopologique,
357  map_nouveau_mg_element_geometrique,
358  mg_geometrie,
359  fusionner_entite_similaire,
360  precision); break;
361  case TopAbs_SOLID:
362  importer_TopoDS_Solid(TopoDS::Solid(topods_shape),
363  map_nouveau_mg_element_topologique,
364  map_nouveau_mg_element_cotopologique,
365  map_nouveau_mg_element_geometrique,
366  mg_geometrie,
367  fusionner_entite_similaire,
368  precision); break;
369  case TopAbs_SHELL:
370  importer_TopoDS_Shell(TopoDS::Shell(topods_shape),
371  map_nouveau_mg_element_topologique,
372  map_nouveau_mg_element_cotopologique,
373  map_nouveau_mg_element_geometrique,
374  NULL,
375  mg_geometrie,
376  fusionner_entite_similaire,
377  precision); break;
378  case TopAbs_FACE:
379  importer_TopoDS_Face(TopoDS::Face(topods_shape),
380  map_nouveau_mg_element_topologique,
381  map_nouveau_mg_element_cotopologique,
382  map_nouveau_mg_element_geometrique,
383  NULL,
384  mg_geometrie,
385  fusionner_entite_similaire,
386  precision); break;
387  case TopAbs_WIRE:
388  importer_TopoDS_Wire(TopoDS::Wire(topods_shape),
389  map_nouveau_mg_element_topologique,
390  map_nouveau_mg_element_cotopologique,
391  map_nouveau_mg_element_geometrique,
392  NULL,
393  mg_geometrie,
394  fusionner_entite_similaire,
395  precision); break;
396  case TopAbs_EDGE:
397  importer_TopoDS_Edge(TopoDS::Edge(topods_shape),NULL,
398  map_nouveau_mg_element_topologique,
399  map_nouveau_mg_element_cotopologique,
400  map_nouveau_mg_element_geometrique,
401  NULL,
402  mg_geometrie,
403  fusionner_entite_similaire,
404  precision); break;
405  case TopAbs_VERTEX:
406  importer_TopoDS_Vertex(TopoDS::Vertex(topods_shape),
407  map_nouveau_mg_element_topologique,
408  map_nouveau_mg_element_cotopologique,
409  map_nouveau_mg_element_geometrique,
410  NULL,
411  1,
412  mg_geometrie,
413  fusionner_entite_similaire,
414  precision); break;
415  }
416 }
417 
418 
419 void OCC_FONCTION_V2017::importer_TopoDS_Compound(TopoDS_Compound topods_compound,
420  std::map< MG_ELEMENT_TOPOLOGIQUE*, MG_ELEMENT_TOPOLOGIQUE* >* map_nouveau_mg_element_topologique,
421  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
422  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
423  MG_GEOMETRIE* mg_geometrie,
424  bool fusionner_entite_similaire,
425  double precision)
426 {
427  m_modifications=true;
428  TopTools_DataMapOfShapeShape map_TopoDS_Solid;
429  TopTools_DataMapOfShapeShape map_TopoDS_Shell;
430  TopTools_DataMapOfShapeShape map_TopoDS_Face;
431  TopTools_DataMapOfShapeShape map_TopoDS_Wire;
432  TopTools_DataMapOfShapeShape map_TopoDS_Edge;
433  TopTools_DataMapOfShapeShape map_TopoDS_Vertex;
434 
435  decompose_TopoDS_Compound(topods_compound,
436  map_TopoDS_Solid,
437  map_TopoDS_Shell,
438  map_TopoDS_Face,
439  map_TopoDS_Wire,
440  map_TopoDS_Edge,
441  map_TopoDS_Vertex);
442 
443  for(TopTools_DataMapOfShapeShape::Iterator it_solid(map_TopoDS_Solid);it_solid.More();it_solid.Next())
444  {
445  TopoDS_Solid topods_solid = TopoDS::Solid(it_solid.Value());
446  MG_VOLUME* mg_volume = importer_TopoDS_Solid(topods_solid,
447  map_nouveau_mg_element_topologique,
448  map_nouveau_mg_element_cotopologique,
449  map_nouveau_mg_element_geometrique,
450  mg_geometrie,
451  fusionner_entite_similaire,
452  precision);
453  }
454 
455  for(TopTools_DataMapOfShapeShape::Iterator it_shell(map_TopoDS_Shell);it_shell.More();it_shell.Next())
456  {
457  TopoDS_Shell topods_shell = TopoDS::Shell(it_shell.Value());
458  MG_COQUILLE* mg_coquille = importer_TopoDS_Shell(topods_shell,
459  map_nouveau_mg_element_topologique,
460  map_nouveau_mg_element_cotopologique,
461  map_nouveau_mg_element_geometrique,
462  NULL,
463  mg_geometrie,
464  fusionner_entite_similaire,
465  precision);
466  }
467 
468  for(TopTools_DataMapOfShapeShape::Iterator it_face(map_TopoDS_Face);it_face.More();it_face.Next())
469  {
470  TopoDS_Face topods_face = TopoDS::Face(it_face.Value());
471  MG_FACE* mg_face = importer_TopoDS_Face(topods_face,
472  map_nouveau_mg_element_topologique,
473  map_nouveau_mg_element_cotopologique,
474  map_nouveau_mg_element_geometrique,
475  NULL,
476  mg_geometrie,
477  fusionner_entite_similaire,
478  precision);
479  }
480 
481  for(TopTools_DataMapOfShapeShape::Iterator it_wire(map_TopoDS_Wire);it_wire.More();it_wire.Next())
482  {
483  TopoDS_Wire topods_wire = TopoDS::Wire(it_wire.Value());
484  MG_BOUCLE* mg_boucle = importer_TopoDS_Wire(topods_wire,
485  map_nouveau_mg_element_topologique,
486  map_nouveau_mg_element_cotopologique,
487  map_nouveau_mg_element_geometrique,
488  NULL,
489  mg_geometrie,
490  fusionner_entite_similaire,
491  precision);
492  }
493 
494  for(TopTools_DataMapOfShapeShape::Iterator it_edge(map_TopoDS_Edge);it_edge.More();it_edge.Next())
495  {
496  TopoDS_Edge topods_edge = TopoDS::Edge(it_edge.Value());
497  MG_ARETE* mg_arete = importer_TopoDS_Edge(topods_edge,NULL,
498  map_nouveau_mg_element_topologique,
499  map_nouveau_mg_element_cotopologique,
500  map_nouveau_mg_element_geometrique,
501  NULL,
502  mg_geometrie,
503  fusionner_entite_similaire,
504  precision);
505  }
506 
507  for(TopTools_DataMapOfShapeShape::Iterator it_vertex(map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
508  {
509  TopoDS_Vertex topods_vertex = TopoDS::Vertex(it_vertex.Value());
510  MG_SOMMET* mg_sommet = importer_TopoDS_Vertex(topods_vertex,
511  map_nouveau_mg_element_topologique,
512  map_nouveau_mg_element_cotopologique,
513  map_nouveau_mg_element_geometrique,
514  NULL,
515  1,
516  mg_geometrie,
517  fusionner_entite_similaire,
518  precision);
519  }
520 }
521 
522 void OCC_FONCTION_V2017::importer_TopoDS_CompSolid(TopoDS_CompSolid topods_compsolid,
523  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
524  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
525  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
526  MG_GEOMETRIE* mg_geometrie,
527  bool fusionner_entite_similaire,
528  double precision)
529 {
530  m_modifications=true;
531  TopTools_IndexedMapOfShape map_volume;
532  TopExp::MapShapes(topods_compsolid,TopAbs_SOLID, map_volume);
533  for(int i=1;i<map_volume.Extent()+1;i++)
534  {
535  TopoDS_Solid topods_solid = TopoDS::Solid(map_volume.FindKey(i));
536  MG_VOLUME* mg_volume = importer_TopoDS_Solid(topods_solid,
537  map_nouveau_mg_element_topologique,
538  map_nouveau_mg_element_cotopologique,
539  map_nouveau_mg_element_geometrique,
540  mg_geometrie,
541  fusionner_entite_similaire,
542  precision);
543  }
544 }
545 
547  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
548  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
549  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
550  MG_GEOMETRIE* mg_geometrie,
551  bool fusionner_entite_similaire,
552  double precision)
553 {
554  m_modifications=true;
555  if(topods_solid.IsNull()) std::cerr << "OCC_FONCTION_V2017::importer_TopoDS_Solid -> topods_solid.IsNull() !" << std::endl;
556  MG_VOLUME* mg_volume=NULL;
557  if(fusionner_entite_similaire)
558  {
559  mg_volume = un_equivalent_est_present(topods_solid,true);
560  }
561  else mg_volume = un_equivalent_est_present(topods_solid,false);
562  if(mg_volume==NULL)
563  {
564  OCC_VOLUME* occ_volume = new OCC_VOLUME("-1",topods_solid,this);
565  if(map_nouveau_mg_element_topologique!=NULL) map_nouveau_mg_element_topologique->insert(std::pair<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*>(occ_volume,occ_volume));
566  ajouter_OCC_VOLUME(occ_volume);
567  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_volume(occ_volume);
568  mg_volume=occ_volume;
569  TopTools_IndexedMapOfShape map_shell;
570  TopExp::MapShapes(topods_solid,TopAbs_SHELL, map_shell);
571  for(int i=1;i<map_shell.Extent()+1;i++)
572  {
573  TopoDS_Shell topods_shell = TopoDS::Shell(map_shell.FindKey(i));
574  importer_TopoDS_Shell(topods_shell,
575  map_nouveau_mg_element_topologique,
576  map_nouveau_mg_element_cotopologique,
577  map_nouveau_mg_element_geometrique,
578  mg_volume,
579  mg_geometrie,
580  fusionner_entite_similaire,
581  precision);
582  }
583  }
584  return mg_volume;
585 }
586 
588  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
589  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
590  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
591  MG_ELEMENT_TOPOLOGIQUE* mg_ele_topo_superieur,
592  MG_GEOMETRIE* mg_geometrie,
593  bool fusionner_entite_similaire,
594  double precision)
595 {
596  m_modifications=true;
597  if(topods_shell.IsNull()) std::cerr << "OCC_FONCTION_V2017::importer_TopoDS_Shell -> topods_shell.IsNull() !" << std::endl;
598  MG_COQUILLE* mg_coquille=NULL;
599  if(fusionner_entite_similaire)
600  {
601  mg_coquille = un_equivalent_est_present(topods_shell,true);
602  }
603  else mg_coquille = un_equivalent_est_present(topods_shell,false);
604  if(mg_coquille==NULL)
605  {
606  if(mg_ele_topo_superieur!=NULL)
607  {
608  if(mg_ele_topo_superieur->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE)
609  {
610  MG_COQUE* mg_coque = (MG_COQUE*)mg_ele_topo_superieur;
611  OCC_COQUILLE* occ_coquille = new OCC_COQUILLE("-1",mg_coque,topods_shell,this);
612  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(occ_coquille,occ_coquille));
613  mg_coque->ajouter_mg_coquille(occ_coquille);
614  ajouter_OCC_COQUILLE(occ_coquille);
615  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_coquille(occ_coquille);
616  mg_coquille=occ_coquille;
617  }
618  else if(mg_ele_topo_superieur->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME)
619  {
620  MG_VOLUME* mg_volume = (MG_VOLUME*)mg_ele_topo_superieur;
621  OCC_COQUILLE* occ_coquille = new OCC_COQUILLE("-1",mg_volume,topods_shell,this);
622  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(occ_coquille,occ_coquille));
623  mg_volume->ajouter_mg_coquille(occ_coquille);
624  ajouter_OCC_COQUILLE(occ_coquille);
625  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_coquille(occ_coquille);
626  mg_coquille=occ_coquille;
627  }
628  }
629  else
630  {
631  OCC_COQUE* occ_coque = new OCC_COQUE("-1",topods_shell,this);
632  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_coque(occ_coque);
633  OCC_COQUILLE* occ_coquille = new OCC_COQUILLE("-1",occ_coque,topods_shell,this);
634  occ_coque->ajouter_mg_coquille(occ_coquille);
635  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(occ_coquille,occ_coquille));
636  ajouter_OCC_COQUILLE(occ_coquille);
637  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_coquille(occ_coquille);
638  mg_coquille=occ_coquille;
639  }
640  TopTools_IndexedMapOfShape map_face;
641  TopExp::MapShapes(topods_shell,TopAbs_FACE, map_face);
642  for(int i=1;i<map_face.Extent()+1;i++)
643  {
644  TopoDS_Face topods_face = TopoDS::Face(map_face.FindKey(i));
645  importer_TopoDS_Face(topods_face,
646  map_nouveau_mg_element_topologique,
647  map_nouveau_mg_element_cotopologique,
648  map_nouveau_mg_element_geometrique,
649  mg_coquille,
650  mg_geometrie,
651  fusionner_entite_similaire,
652  precision);
653  }
654  }
655  return mg_coquille;
656 }
657 
659  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
660  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
661  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
662  MG_COQUILLE* mg_coquille,
663  MG_GEOMETRIE* mg_geometrie,
664  bool fusionner_entite_similaire,
665  double precision)
666 {
667  m_modifications=true;
668  if(topods_face.IsNull()) std::cerr << "OCC_FONCTION_V2017::importer_TopoDS_Face -> topods_face.IsNull() !" << std::endl;
669  MG_FACE* mg_face=NULL;
670  if(fusionner_entite_similaire)
671  {
672  mg_face = (MG_FACE*)un_equivalent_est_present(topods_face,true);
673  }
674  else mg_face = (MG_FACE*)un_equivalent_est_present(topods_face,false);
675  bool nouvelle_face=false;
676  if(mg_face==NULL)
677  {
678  OCC_SURFACE* occ_surface = new OCC_SURFACE(topods_face,this);
679  if(map_nouveau_mg_element_geometrique!=NULL) map_nouveau_mg_element_geometrique->insert(std::pair<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*>(occ_surface,occ_surface));
680  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_surface(occ_surface);
681  int sens_occ_face;
682  if(topods_face.Orientation()==TopAbs_FORWARD) sens_occ_face=1;
683  else sens_occ_face=-1;
684  OCC_FACE* occ_face = new OCC_FACE("-1",occ_surface,sens_occ_face,topods_face,this);
685  if(map_nouveau_mg_element_topologique!=NULL) map_nouveau_mg_element_topologique->insert(std::pair<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*>(occ_face,occ_face));
686  mg_face=occ_face;
687  ajouter_OCC_FACE(occ_face);
688  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_face(occ_face);
689  nouvelle_face=true;
690  }
691  if(mg_coquille!=NULL )
692  {
693  int sens_mg_face=mg_face->get_orientation();
694  int sens_mg_coface;
695  if(nouvelle_face)
696  {
697  int sens_mg_coquille;
698  OCC_COQUILLE* occ_coquille = (OCC_COQUILLE*)mg_coquille;
699  if(occ_coquille->get_TopoDS_Shell().Orientation()==TopAbs_FORWARD) sens_mg_coface=1;
700  else sens_mg_coface=-1;
701 
702  }
703  else
704  {
705  OCC_FACE* occ_face = (OCC_FACE*)mg_face;
706  if(occ_face->get_TopoDS_Face().Orientation()==topods_face.Orientation())
707  {
708  sens_mg_coface=1;
709  }
710  else sens_mg_coface=-1;
711  }
712  MG_COFACE* mg_coface = new MG_COFACE(mg_face,mg_coquille,sens_mg_coface);
713  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(mg_coface,mg_coface));
714  mg_face->ajouter_mg_coface(mg_coface);
715  mg_coquille->ajouter_mg_coface(mg_coface);
716  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_coface(mg_coface);
717  }
718  if(nouvelle_face)
719  {
720  TopTools_IndexedMapOfShape map_wire;
721  TopExp::MapShapes(topods_face,TopAbs_WIRE, map_wire);
722  for(int i=1;i<map_wire.Extent()+1;i++)
723  {
724  TopoDS_Wire topods_wire = TopoDS::Wire(map_wire.FindKey(i));
725  importer_TopoDS_Wire(topods_wire,
726  map_nouveau_mg_element_topologique,
727  map_nouveau_mg_element_cotopologique,
728  map_nouveau_mg_element_geometrique,
729  mg_face,
730  mg_geometrie,
731  fusionner_entite_similaire,
732  precision);
733  }
735  }
736  return mg_face;
737 }
738 
740  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
741  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
742  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
743  MG_ELEMENT_TOPOLOGIQUE* mg_ele_topo_superieur,
744  MG_GEOMETRIE* mg_geometrie,
745  bool fusionner_entite_similaire,
746  double precision)
747 {
748  m_modifications=true;
749  if(topods_wire.IsNull()) std::cerr << "OCC_FONCTION_V2017::importer_TopoDS_Wire -> topods_wire.IsNull() !" << std::endl;
750  MG_BOUCLE* mg_boucle=NULL;
751  if(fusionner_entite_similaire)
752  {
753  mg_boucle = (MG_BOUCLE*)un_equivalent_est_present(topods_wire,true);
754  }
755  else mg_boucle = (MG_BOUCLE*)un_equivalent_est_present(topods_wire,false);
756  if(mg_boucle==NULL)
757  {
758  if(mg_ele_topo_superieur!=NULL)
759  {
760  if(mg_ele_topo_superieur->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
761  {
762  MG_FACE* mg_face = (MG_FACE*)mg_ele_topo_superieur;
763  OCC_BOUCLE* occ_boucle = new OCC_BOUCLE("-1",mg_face,topods_wire,this);
764  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(occ_boucle,occ_boucle));
765  ajouter_OCC_BOUCLE(occ_boucle);
766  mg_face->ajouter_mg_boucle(occ_boucle);
767  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_boucle(occ_boucle);
768  mg_boucle=occ_boucle;
769  }
770  else if(mg_ele_topo_superieur->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE)
771  {
772  MG_POUTRE* mg_poutre = (MG_POUTRE*)mg_ele_topo_superieur;
773  OCC_BOUCLE* occ_boucle = new OCC_BOUCLE("-1",mg_poutre,topods_wire,this);
774  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(occ_boucle,occ_boucle));
775  ajouter_OCC_BOUCLE(occ_boucle);
776  mg_poutre->ajouter_mg_boucle(occ_boucle);
777  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_boucle(occ_boucle);
778  mg_boucle=occ_boucle;
779  }
780  }
781  else
782  {
783  OCC_BOUCLE* occ_boucle = new OCC_BOUCLE("-1",topods_wire,this);
784  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(occ_boucle,occ_boucle));
785  ajouter_OCC_BOUCLE(occ_boucle);
786  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_boucle(occ_boucle);
787  mg_boucle=occ_boucle;
788  }
789  BRepTools_WireExplorer Ex;
790  for(Ex.Init(topods_wire); Ex.More(); Ex.Next())
791  {
792  TopoDS_Edge topods_edge = TopoDS::Edge(Ex.Current());
793  importer_TopoDS_Edge(topods_edge,
794  &topods_wire,
795  map_nouveau_mg_element_topologique,
796  map_nouveau_mg_element_cotopologique,
797  map_nouveau_mg_element_geometrique,
798  mg_boucle,
799  mg_geometrie,
800  fusionner_entite_similaire,
801  precision);
802  }
803  }
804  return mg_boucle;
805 }
806 
808  TopoDS_Wire *topods_wire,
809  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
810  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
811  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
812  MG_BOUCLE* mg_boucle,
813  MG_GEOMETRIE* mg_geometrie,
814  bool fusionner_entite_similaire,
815  double precision)
816 {
817  m_modifications=true;
818  if(topods_edge.IsNull()) std::cerr << "OCC_FONCTION_V2017::importer_TopoDS_Edge -> topods_edge.IsNull() !" << std::endl;
819  MG_ARETE* mg_arete=NULL;
820  if(BRep_Tool::Degenerated(topods_edge)) return NULL;
821  if(fusionner_entite_similaire)
822  {
823  mg_arete = (MG_ARETE*)un_equivalent_est_present(topods_edge,true);
824  }
825  else mg_arete = (MG_ARETE*)un_equivalent_est_present(topods_edge,false);
826  bool nouvelle_arete=false;
827  if(mg_arete==NULL)
828  {
829  int sens;
830  if (topods_edge.Orientation()==TopAbs_FORWARD) sens=1;
831  else sens=1;
832  OCC_COURBE* occcourbe=new OCC_COURBE(topods_edge,this);
833  if(map_nouveau_mg_element_geometrique!=NULL) map_nouveau_mg_element_geometrique->insert(std::pair<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*>(occcourbe,occcourbe));
834  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_courbe(occcourbe);
835  OCC_ARETE* occ_arete= new OCC_ARETE("-1",occcourbe,sens,topods_edge,this);
836  if(map_nouveau_mg_element_topologique!=NULL) map_nouveau_mg_element_topologique->insert(std::pair<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*>(occ_arete,occ_arete));
837  ajouter_OCC_ARETE(occ_arete);
838  mg_arete=occ_arete;
839  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_arete(mg_arete);
840  nouvelle_arete=true;
841  }
842  if(mg_boucle!=NULL)
843  {
844  int sens;
845  if(nouvelle_arete)
846  {
847  if (topods_edge.Orientation()==TopAbs_FORWARD) sens=1;
848  else sens=-1;
849  }
850  else
851  {
852  int sens_boucle;
853  OCC_BOUCLE* occ_boucle = (OCC_BOUCLE*)mg_boucle;
854  TopoDS_Wire wire_occ_boucle = occ_boucle->get_TopoDS_Wire();
855  if(wire_occ_boucle.Orientation()==topods_wire->Orientation()) sens_boucle=1;
856  else sens_boucle=-1;
857  if (topods_edge.Orientation()==TopAbs_FORWARD) sens=sens_boucle;
858  else sens=-sens_boucle;
859 
860  }
861  MG_COARETE* mg_coarete = new MG_COARETE(mg_arete,mg_boucle,sens);
862  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(mg_coarete,mg_coarete));
863  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_coarete(mg_coarete);
864  mg_arete->ajouter_mg_coarete(mg_coarete);
865  mg_boucle->ajouter_mg_coarete(mg_coarete);
866  }
867  if(nouvelle_arete)
868  {
869  topods_edge = ((OCC_ARETE*)mg_arete)->get_TopoDS_Edge();
870  importer_TopoDS_Vertex(TopExp::FirstVertex(topods_edge,false),
871  map_nouveau_mg_element_topologique,
872  map_nouveau_mg_element_cotopologique,
873  map_nouveau_mg_element_geometrique,
874  mg_arete,
875  1,
876  mg_geometrie,
877  fusionner_entite_similaire,
878  precision);
879  importer_TopoDS_Vertex(TopExp::LastVertex(topods_edge,false),
880  map_nouveau_mg_element_topologique,
881  map_nouveau_mg_element_cotopologique,
882  map_nouveau_mg_element_geometrique,
883  mg_arete,
884  2,
885  mg_geometrie,
886  fusionner_entite_similaire,
887  precision);
888  }
889  return mg_arete;
890 }
891 
893  std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
894  std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
895  std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
896  MG_ARETE* mg_arete,
897  int index_sommet,
898  MG_GEOMETRIE* mg_geometrie,
899  bool fusionner_entite_similaire,
900  double precision)
901 {
902  m_modifications=true;
903  if(topods_vertex.IsNull()) std::cerr << "OCC_FONCTION_V2017::importer_TopoDS_Vertex -> topods_vertex.IsNull() !" << std::endl;
904  MG_SOMMET* mg_sommet=NULL;
905  if(fusionner_entite_similaire)
906  {
907  mg_sommet = un_equivalent_est_present(topods_vertex,true);
908  }
909  else mg_sommet = un_equivalent_est_present(topods_vertex,false);
910  bool nouveau_sommet=false;
911  if(mg_sommet==NULL)
912  {
913  class OCC_POINT* occ_point=new OCC_POINT(topods_vertex, this);
914  if(map_nouveau_mg_element_geometrique!=NULL) map_nouveau_mg_element_geometrique->insert(std::pair<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*>(occ_point,occ_point));
915  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_point(occ_point);
916  OCC_SOMMET* occ_sommet = new OCC_SOMMET("-1",occ_point,topods_vertex,this);
917  if(map_nouveau_mg_element_topologique!=NULL) map_nouveau_mg_element_topologique->insert(std::pair<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*>(occ_sommet,occ_sommet));
918  ajouter_OCC_SOMMET(occ_sommet);
919  mg_sommet=occ_sommet;
920  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_sommet(mg_sommet);
921  nouveau_sommet=true;
922  }
923  if(mg_arete!=NULL)
924  {
925  if((mg_arete->get_cosommet1()==NULL && index_sommet==1) || (mg_arete->get_cosommet2()==NULL && index_sommet==2))
926  {
927  MG_COSOMMET* mg_cosommet = new MG_COSOMMET(mg_sommet,mg_arete,precision);
928  if(map_nouveau_mg_element_cotopologique!=NULL) map_nouveau_mg_element_cotopologique->insert(std::pair<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*>(mg_cosommet,mg_cosommet));
929  mg_sommet->ajouter_mg_cosommet(mg_cosommet);
930  if(mg_geometrie!=NULL) mg_geometrie->ajouter_mg_cosommet(mg_cosommet);
931  if(index_sommet==1) mg_arete->changer_cosommet1(mg_cosommet);
932  else mg_arete->changer_cosommet2(mg_cosommet);
933  }
934  }
935  return mg_sommet;
936 }
937 
938 
940 {
941  return m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Bind(occ_sommet->get_TopoDS_Vertex(),occ_sommet);
942 }
943 
945 {
947  if(occ_sommet->get_idoriginal()!="-1")
948  {
949  long id=std::stol(occ_sommet->get_idoriginal());
950  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
951  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
952  return OK;
953  }
954  return FAIL;
955 }
956 
957 int OCC_FONCTION_V2017::ajouter_TopoDS_Vertex_id(TopoDS_Vertex vertex,long id)
958 {
959  std::pair<std::map<long,TopoDS_Shape>::iterator,bool> p = m_map_id_TopoDS_Shape.insert(std::pair<long,TopoDS_Shape>(id,vertex));
960  if(!p.second) return FAIL;
961  return OK;
962 }
963 
965 {
966  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
967  if(it!=m_map_id_TopoDS_Shape.end()) return TopoDS::Vertex(it->second);
968  TopoDS_Vertex v;
969  return v;
970 }
971 
972 
973 OCC_SOMMET* OCC_FONCTION_V2017::un_equivalent_est_present(TopoDS_Vertex vertex,bool recherche_avancee)
974 {
975  if(m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.IsBound(vertex))
976  {
977  return (OCC_SOMMET*)m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Find(vertex);
978  }
979  else if(recherche_avancee)
980  {
982  }
983  return NULL;
984 }
985 
987 {
988  return m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Bind(occ_arete->get_TopoDS_Edge(),occ_arete);
989 }
990 
992 {
994  if(occ_arete->get_idoriginal()!="-1")
995  {
996  long id=std::stol(occ_arete->get_idoriginal());
997  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
998  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
999  return OK;
1000  }
1001  return FAIL;
1002 }
1003 
1004 int OCC_FONCTION_V2017::ajouter_TopoDS_Edge_id(TopoDS_Edge edge, long id)
1005 {
1006  std::pair<std::map<long,TopoDS_Shape>::iterator,bool> p = m_map_id_TopoDS_Shape.insert(std::pair<long,TopoDS_Shape>(id,edge));
1007  if(!p.second) return FAIL;
1008  return OK;
1009 }
1010 
1012 {
1013  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1014  if(it!=m_map_id_TopoDS_Shape.end()) return TopoDS::Edge(it->second);
1015  TopoDS_Edge e;
1016  return e;
1017 }
1018 
1019 
1020 OCC_ARETE* OCC_FONCTION_V2017::un_equivalent_est_present(TopoDS_Edge edge,bool recherche_avancee)
1021 {
1022  if(m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.IsBound(edge))
1023  {
1024  return (OCC_ARETE*)m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Find(edge);
1025  }
1026  else if(recherche_avancee)
1027  {
1029  }
1030  else return NULL;
1031 }
1032 
1034 {
1035  return m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE.Bind(occ_boucle->get_TopoDS_Wire(),occ_boucle);
1036 }
1037 
1039 {
1041  if(occ_boucle->get_idoriginal()!="-1")
1042  {
1043  long id=std::stol(occ_boucle->get_idoriginal());
1044  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1045  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
1046  return OK;
1047  }
1048  return FAIL;
1049 }
1050 
1051 int OCC_FONCTION_V2017::ajouter_TopoDS_Wire_id(TopoDS_Wire wire,long id)
1052 {
1053  std::pair<std::map<long,TopoDS_Shape>::iterator,bool> p = m_map_id_TopoDS_Shape.insert(std::pair<long,TopoDS_Shape>(id,wire));
1054  if(!p.second) return FAIL;
1055  return OK;
1056 }
1057 
1059 {
1060  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1061  if(it!=m_map_id_TopoDS_Shape.end()) return TopoDS::Wire(it->second);
1062  TopoDS_Wire w;
1063  return w;
1064 }
1065 
1066 OCC_BOUCLE* OCC_FONCTION_V2017::un_equivalent_est_present(TopoDS_Wire wire, bool recherche_avancee)
1067 {
1068  if(m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE.IsBound(wire))
1069  {
1071  }
1072  return NULL;
1073 }
1074 
1076 {
1077  return m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Bind(occ_face->get_TopoDS_Face(),occ_face);
1078 }
1079 
1081 {
1083  if(occ_face->get_idoriginal()!="-1")
1084  {
1085  long id=std::stol(occ_face->get_idoriginal());
1086  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1087  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
1088  return OK;
1089  }
1090  return FAIL;
1091 }
1092 
1093 int OCC_FONCTION_V2017::ajouter_TopoDS_Face_id(TopoDS_Face face, long id)
1094 {
1095  std::pair<std::map<long,TopoDS_Shape>::iterator,bool> p = m_map_id_TopoDS_Shape.insert(std::pair<long,TopoDS_Shape>(id,face));
1096  if(!p.second) return FAIL;
1097  return OK;
1098 }
1099 
1101 {
1102  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1103  if(it!=m_map_id_TopoDS_Shape.end()) return TopoDS::Face(it->second);
1104  TopoDS_Face f;
1105  return f;
1106 }
1107 
1108 OCC_FACE* OCC_FONCTION_V2017::un_equivalent_est_present(TopoDS_Face face, bool recherche_avancee)
1109 {
1110  if(m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.IsBound(face))
1111  {
1112  return (OCC_FACE*)m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Find(face);
1113  }
1114  else if(recherche_avancee)
1115  {
1117  }
1118  else return NULL;
1119 }
1120 
1122 {
1123  return m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE.Bind(occ_coquille->get_TopoDS_Shell(),occ_coquille);
1124 }
1125 
1127 {
1129  if(occ_coquille->get_idoriginal()!="-1")
1130  {
1131  long id=std::stol(occ_coquille->get_idoriginal());
1132  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1133  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
1134  return OK;
1135  }
1136  return FAIL;
1137 }
1138 
1140 {
1141  return m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Bind(occ_coque->get_TopoDS_Shell(),occ_coque);
1142 }
1143 
1145 {
1147  if(occ_coque->get_idoriginal()!="-1")
1148  {
1149  long id=std::stol(occ_coque->get_idoriginal());
1150  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1151  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
1152  return OK;
1153  }
1154  return FAIL;
1155 }
1156 
1157 int OCC_FONCTION_V2017::ajouter_TopoDS_Shell_id(TopoDS_Shell shell, long id)
1158 {
1159  std::pair<std::map<long,TopoDS_Shape>::iterator,bool> p = m_map_id_TopoDS_Shape.insert(std::pair<long,TopoDS_Shape>(id,shell));
1160  if(!p.second) return FAIL;
1161  return OK;
1162 }
1163 
1165 {
1166  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1167  if(it!=m_map_id_TopoDS_Shape.end()) return TopoDS::Shell(it->second);
1168  TopoDS_Shell s;
1169  return s;
1170 }
1171 
1172 OCC_COQUILLE* OCC_FONCTION_V2017::un_equivalent_est_present(TopoDS_Shell shell, bool recherche_avancee)
1173 {
1174  if(m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE.IsBound(shell))
1175  {
1177  }
1178  return NULL;
1179 }
1180 
1182 {
1183  return m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Bind(occ_volume->get_TopoDS_Solid(),occ_volume);
1184 }
1185 
1187 {
1189  if(occ_volume->get_idoriginal()!="-1")
1190  {
1191  long id=std::stol(occ_volume->get_idoriginal());
1192  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1193  if(it!=m_map_id_TopoDS_Shape.end()) m_map_id_TopoDS_Shape.erase(it);
1194  return OK;
1195  }
1196  return FAIL;
1197 }
1198 
1199 int OCC_FONCTION_V2017::ajouter_TopoDS_Solid_id(TopoDS_Solid solid, long id)
1200 {
1201  std::pair<std::map<long,TopoDS_Shape>::iterator,bool> p = m_map_id_TopoDS_Shape.insert(std::pair<long,TopoDS_Shape>(id,solid));
1202  if(!p.second) return FAIL;
1203  return OK;
1204 }
1205 
1207 {
1208  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id);
1209  if(it!=m_map_id_TopoDS_Shape.end()) return TopoDS::Solid(it->second);
1210  TopoDS_Solid s;
1211  return s;
1212 }
1213 
1214 OCC_VOLUME* OCC_FONCTION_V2017::un_equivalent_est_present(TopoDS_Solid solid, bool recherche_avancee)
1215 {
1216  if(m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.IsBound(solid))
1217  {
1218  return (OCC_VOLUME*)m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Find(solid);
1219  }
1220  return NULL;
1221 }
1222 
1223 const TopoDS_Shape& OCC_FONCTION_V2017::GetShape(const int id_shape)
1224 {
1225  std::map<long,TopoDS_Shape>::iterator it = m_map_id_TopoDS_Shape.find(id_shape);
1226  if(it!=m_map_id_TopoDS_Shape.end()) return it->second;
1227 }
1228 
1230 {
1231  if(m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.IsBound(topods_shape))
1232  {
1233  return m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE.Find(topods_shape);
1234  }
1235  return NULL;
1236 }
1237 
1239 {
1240  if(m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE.IsBound(topods_shape))
1241  {
1242  return m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE.Find(topods_shape);
1243  }
1244  return NULL;
1245 }
1246 
1247 
1249  std::map< long int, MG_IDENTIFICATEUR* >& map_element_identifie,
1250  XCAFDoc_ShapeTool &shape_tool,
1251  TDF_Label &top_label_shape,
1252  bool top_shape)
1253 {
1254  TopoDS_Solid topods_solid = occ_volume->get_TopoDS_Solid();
1255  std::map<long,MG_IDENTIFICATEUR*>::iterator it = map_element_identifie.find(occ_volume->get_id());
1256  if(it==map_element_identifie.end())
1257  {
1258  occ_volume->change_idoriginal(std::to_string(occ_volume->get_id()));
1259  TDF_Label label_shape;
1260  if(top_shape)
1261  {
1262  label_shape=shape_tool.NewShape();
1263  shape_tool.SetShape(label_shape,topods_solid);
1264  top_label_shape=label_shape;
1265  identifier_TopoDS_Edge_Degenerated(topods_solid,shape_tool,top_label_shape);
1266  }
1267  else
1268  {
1269  label_shape=shape_tool.AddSubShape(top_label_shape,topods_solid);
1270  }
1271  if(!label_shape.IsNull())
1272  {
1273  Handle(TDataStd_Name) nom = new TDataStd_Name;
1274  nom->Set("Volume");
1275  label_shape.AddAttribute(nom);
1276  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1277  num_string->Set(occ_volume->get_idoriginal().c_str());
1278  label_shape.AddAttribute(num_string);
1279  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_volume->get_id(),occ_volume));
1280  for(int i=0;i<occ_volume->get_nb_mg_coquille();i++)
1281  {
1282  OCC_COQUILLE* occ_coquille = (OCC_COQUILLE*)occ_volume->get_mg_coquille(i);
1283  identifier_TopoDS_Shell(occ_coquille,map_element_identifie,shape_tool,top_label_shape,false);
1284  }
1285  }
1286  }
1287 }
1288 
1290  std::map< long int, MG_IDENTIFICATEUR* >& map_element_identifie,
1291  XCAFDoc_ShapeTool &shape_tool,
1292  TDF_Label &top_label_shape,
1293  bool top_shape)
1294 {
1295  TopoDS_Shell topods_shell=occ_coquille->get_TopoDS_Shell();
1296  std::map<long,MG_IDENTIFICATEUR*>::iterator it = map_element_identifie.find(occ_coquille->get_id());
1297  if(it==map_element_identifie.end())
1298  {
1299  TDF_Label label_shape;
1300  if(top_shape)
1301  {
1302  label_shape=shape_tool.NewShape();
1303  shape_tool.SetShape(label_shape,topods_shell);
1304  top_label_shape=label_shape;
1305  identifier_TopoDS_Edge_Degenerated(topods_shell,shape_tool,top_label_shape);
1306  }
1307  else
1308  {
1309  label_shape=shape_tool.AddSubShape(top_label_shape,topods_shell);
1310  }
1311  if(!label_shape.IsNull())
1312  {
1313  Handle(TDataStd_Name) nom = new TDataStd_Name;
1314  if(label_shape.FindAttribute(TDataStd_Name::GetID(),nom)==false)
1315  {
1316  occ_coquille->change_idoriginal(std::to_string(occ_coquille->get_id()));
1317  nom->Set("Coquille");
1318  label_shape.AddAttribute(nom);
1319  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1320  num_string->Set(occ_coquille->get_idoriginal().c_str());
1321  label_shape.AddAttribute(num_string);
1322  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_coquille->get_id(),occ_coquille));
1323  for(int i=0;i<occ_coquille->get_nb_mg_coface();i++)
1324  {
1325  OCC_FACE* occ_face = (OCC_FACE*)occ_coquille->get_mg_coface(i)->get_face();
1326  identifier_TopoDS_Face(occ_face,map_element_identifie,shape_tool,top_label_shape,false);
1327  }
1328  }
1329  else
1330  {
1331  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1332  label_shape.FindAttribute(TDataStd_AsciiString::GetID(),num_string);
1333  occ_coquille->change_idoriginal(num_string->Get().ToCString());
1334  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_coquille->get_id(),occ_coquille));
1335  for(int i=0;i<occ_coquille->get_nb_mg_coface();i++)
1336  {
1337  OCC_FACE* occ_face = (OCC_FACE*)occ_coquille->get_mg_coface(i)->get_face();
1338  identifier_TopoDS_Face(occ_face,map_element_identifie,shape_tool,top_label_shape,false);
1339  }
1340  }
1341  }
1342  }
1343 }
1344 
1346  std::map< long int, MG_IDENTIFICATEUR* >& map_element_identifie,
1347  XCAFDoc_ShapeTool &shape_tool,
1348  TDF_Label &top_label_shape,
1349  bool top_shape)
1350 {
1351  TopoDS_Face topods_face=occ_face->get_TopoDS_Face();
1352  std::map<long,MG_IDENTIFICATEUR*>::iterator it = map_element_identifie.find(occ_face->get_id());
1353  if(it==map_element_identifie.end())
1354  {
1355  occ_face->change_idoriginal(std::to_string(occ_face->get_id()));
1356  occ_face->get_surface()->change_idoriginal(std::to_string(occ_face->get_id()));
1357  TDF_Label label_shape;
1358  if(top_shape)
1359  {
1360  label_shape=shape_tool.NewShape();
1361  shape_tool.SetShape(label_shape,topods_face);
1362  top_label_shape=label_shape;
1363  identifier_TopoDS_Edge_Degenerated(topods_face,shape_tool,top_label_shape);
1364  }
1365  else
1366  {
1367  label_shape=shape_tool.AddSubShape(top_label_shape,topods_face);
1368  }
1369  if(!label_shape.IsNull())
1370  {
1371  Handle(TDataStd_Name) nom = new TDataStd_Name;
1372  nom->Set("Face");
1373  label_shape.AddAttribute(nom);
1374  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1375  num_string->Set(occ_face->get_idoriginal().c_str());
1376  label_shape.AddAttribute(num_string);
1377  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_face->get_id(),occ_face));
1378  for(int i=0;i<occ_face->get_nb_mg_boucle();i++)
1379  {
1380  OCC_BOUCLE* occ_boucle = (OCC_BOUCLE*)occ_face->get_mg_boucle(i);
1381  identifier_TopoDS_Wire(occ_boucle,map_element_identifie,shape_tool,top_label_shape,false);
1382  }
1383  }
1384  }
1385 }
1386 
1388  std::map< long int, MG_IDENTIFICATEUR* >& map_element_identifie,
1389  XCAFDoc_ShapeTool &shape_tool,
1390  TDF_Label &top_label_shape,
1391  bool top_shape)
1392 {
1393  TopoDS_Wire topods_wire=occ_boucle->get_TopoDS_Wire();
1394  std::map<long,MG_IDENTIFICATEUR*>::iterator it = map_element_identifie.find(occ_boucle->get_id());
1395  if(it==map_element_identifie.end())
1396  {
1397  occ_boucle->change_idoriginal(std::to_string(occ_boucle->get_id()));
1398  TDF_Label label_shape;
1399  if(top_shape)
1400  {
1401  label_shape=shape_tool.NewShape();
1402  shape_tool.SetShape(label_shape,topods_wire);
1403  top_label_shape=label_shape;
1404  identifier_TopoDS_Edge_Degenerated(topods_wire,shape_tool,top_label_shape);
1405  }
1406  else
1407  {
1408  label_shape=shape_tool.AddSubShape(top_label_shape,topods_wire);
1409  }
1410  if(!label_shape.IsNull())
1411  {
1412  Handle(TDataStd_Name) nom = new TDataStd_Name;
1413  nom->Set("Boucle");
1414  label_shape.AddAttribute(nom);
1415  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1416  num_string->Set(occ_boucle->get_idoriginal().c_str());
1417  label_shape.AddAttribute(num_string);
1418  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_boucle->get_id(),occ_boucle));
1419  for(int i=0;i<occ_boucle->get_nb_mg_coarete();i++)
1420  {
1421  OCC_ARETE* occ_arete = (OCC_ARETE*)occ_boucle->get_mg_coarete(i)->get_arete();
1422  identifier_TopoDS_Edge(occ_arete,map_element_identifie,shape_tool,top_label_shape,false);
1423  }
1424  }
1425  }
1426 }
1427 
1429  std::map< long int, MG_IDENTIFICATEUR* >& map_element_identifie,
1430  XCAFDoc_ShapeTool &shape_tool,
1431  TDF_Label &top_label_shape,
1432  bool top_shape)
1433 {
1434  TopoDS_Edge topods_edge=occ_arete->get_TopoDS_Edge();
1435  std::map<long,MG_IDENTIFICATEUR*>::iterator it = map_element_identifie.find(occ_arete->get_id());
1436  if(it==map_element_identifie.end())
1437  {
1438  occ_arete->change_idoriginal(std::to_string(occ_arete->get_id()));
1439  occ_arete->get_courbe()->change_idoriginal(std::to_string(occ_arete->get_id()));
1440  TDF_Label label_shape;
1441  if(top_shape)
1442  {
1443  label_shape=shape_tool.NewShape();
1444  shape_tool.SetShape(label_shape,topods_edge);
1445  top_label_shape=label_shape;
1446  identifier_TopoDS_Edge_Degenerated(topods_edge,shape_tool,top_label_shape);
1447  }
1448  else
1449  {
1450  label_shape=shape_tool.AddSubShape(top_label_shape,topods_edge);
1451  }
1452  if(!label_shape.IsNull())
1453  {
1454  Handle(TDataStd_Name) nom = new TDataStd_Name;
1455  nom->Set("Arete");
1456  label_shape.AddAttribute(nom);
1457  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1458  num_string->Set(occ_arete->get_idoriginal().c_str());
1459  label_shape.AddAttribute(num_string);
1460  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_arete->get_id(),occ_arete));
1461  identifier_TopoDS_Vertex((OCC_SOMMET*)occ_arete->get_cosommet1()->get_sommet(),map_element_identifie,shape_tool,top_label_shape,false);
1462  identifier_TopoDS_Vertex((OCC_SOMMET*)occ_arete->get_cosommet2()->get_sommet(),map_element_identifie,shape_tool,top_label_shape,false);
1463  }
1464  }
1465 }
1466 
1468  std::map< long int, MG_IDENTIFICATEUR* >& map_element_identifie,
1469  XCAFDoc_ShapeTool &shape_tool,
1470  TDF_Label &top_label_shape,
1471  bool top_shape)
1472 {
1473  TopoDS_Vertex topods_vertex=occ_sommet->get_TopoDS_Vertex();
1474  std::map<long,MG_IDENTIFICATEUR*>::iterator it = map_element_identifie.find(occ_sommet->get_id());
1475  if(it==map_element_identifie.end())
1476  {
1477  occ_sommet->change_idoriginal(std::to_string(occ_sommet->get_id()));
1478  occ_sommet->get_point()->change_idoriginal(std::to_string(occ_sommet->get_id()));
1479  TDF_Label label_shape;
1480  if(top_shape)
1481  {
1482  label_shape=shape_tool.NewShape();
1483  shape_tool.SetShape(label_shape,topods_vertex);
1484  top_label_shape=label_shape;
1485  }
1486  else
1487  {
1488  label_shape=shape_tool.AddSubShape(top_label_shape,topods_vertex);
1489  }
1490  if(!label_shape.IsNull())
1491  {
1492  Handle(TDataStd_Name) nom = new TDataStd_Name;
1493  nom->Set("Sommet");
1494  label_shape.AddAttribute(nom);
1495  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1496  num_string->Set(occ_sommet->get_idoriginal().c_str());
1497  label_shape.AddAttribute(num_string);
1498  map_element_identifie.insert(std::pair<long,MG_IDENTIFICATEUR*>(occ_sommet->get_id(),occ_sommet));
1499  }
1500  }
1501 }
1502 
1503 void OCC_FONCTION_V2017::identifier_TopoDS_Edge_Degenerated(TopoDS_Shape topods_shape, XCAFDoc_ShapeTool& shape_tool, TDF_Label& top_label_shape)
1504 {
1505  if(topods_shape.ShapeType()==TopAbs_EDGE)
1506  {
1507  TopoDS_Edge topods_edge = TopoDS::Edge(topods_shape);
1508  if(BRep_Tool::Degenerated(topods_edge))
1509  {
1510  TDF_Label label_shape;
1511  label_shape=shape_tool.AddSubShape(top_label_shape,topods_edge);
1512  if(!label_shape.IsNull())
1513  {
1514  Handle(TDataStd_Name) nom = new TDataStd_Name;
1515  nom->Set("Arete_degenere");
1516  label_shape.AddAttribute(nom);
1517  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1518  num_string->Set("Aucun objet MAGiC");
1519  label_shape.AddAttribute(num_string);
1520  }
1521  }
1522  }
1523  else
1524  {
1525  TopTools_IndexedMapOfShape map_edge;
1526  TopExp::MapShapes(topods_shape,TopAbs_EDGE, map_edge);
1527  for(int i=1;i<map_edge.Extent()+1;i++)
1528  {
1529  TopoDS_Edge topods_edge = TopoDS::Edge(map_edge.FindKey(i));
1530  if(BRep_Tool::Degenerated(topods_edge))
1531  {
1532  TDF_Label label_shape;
1533  label_shape=shape_tool.AddSubShape(top_label_shape,topods_edge);
1534  if(!label_shape.IsNull())
1535  {
1536  Handle(TDataStd_Name) nom = new TDataStd_Name;
1537  nom->Set("Arete_degenere");
1538  label_shape.AddAttribute(nom);
1539  Handle(TDataStd_AsciiString) num_string = new TDataStd_AsciiString;
1540  num_string->Set("Aucun objet MAGiC");
1541  label_shape.AddAttribute(num_string);
1542  }
1543  }
1544  }
1545  }
1546 }
1547 
1548 OCC_SOMMET* OCC_FONCTION_V2017::un_equivalent_est_present_recherche_avancee(TopoDS_Vertex vertex, NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE*, TopTools_ShapeMapHasher > &MapOfShape_MG_ELEMENT_TOPOLOGIQUE)
1549 {
1550  gp_Pnt point = BRep_Tool::Pnt(vertex);
1551  NCollection_DataMap<TopoDS_Shape,MG_ELEMENT_TOPOLOGIQUE*,TopTools_ShapeMapHasher>::Iterator it(MapOfShape_MG_ELEMENT_TOPOLOGIQUE);
1552  for(;it.More();it.Next())
1553  {
1554  if(it.Key().ShapeType()==TopAbs_VERTEX)
1555  {
1556  TopoDS_Vertex vertex_compare = TopoDS::Vertex(it.Key());
1557  gp_Pnt point_compare = BRep_Tool::Pnt(vertex_compare);
1558  if(point.IsEqual(point_compare,Precision::Confusion()))
1559  {
1560  return (OCC_SOMMET*)it.Value();
1561  }
1562  }
1563  }
1564  return NULL;
1565 }
1566 
1567 OCC_ARETE* OCC_FONCTION_V2017::un_equivalent_est_present_recherche_avancee(TopoDS_Edge edge, NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE*, TopTools_ShapeMapHasher >& MapOfShape_MG_ELEMENT_TOPOLOGIQUE)
1568 {
1569  NCollection_DataMap<TopoDS_Shape,MG_ELEMENT_TOPOLOGIQUE*,TopTools_ShapeMapHasher>::Iterator it(MapOfShape_MG_ELEMENT_TOPOLOGIQUE);
1570  for(;it.More();it.Next())
1571  {
1572  if(it.Key().ShapeType()==TopAbs_EDGE)
1573  {
1574  TopoDS_Edge edge_compare = TopoDS::Edge(it.Key());
1575  Bnd_Box box_edge;
1576  Bnd_Box box_edge_compare;
1577  BRepBndLib::Add(edge,box_edge);
1578  BRepBndLib::Add(edge_compare,box_edge_compare);
1579  double centre_box_edge[3];
1580  double centre_box_edge_compare[3];
1581  double x0,y0,z0,x1,y1,z1;
1582  box_edge.Get(x0,y0,z0,x1,y1,z1);
1583  centre_box_edge[0] = x0+(x1-x0)/2.;
1584  centre_box_edge[1] = y0+(y1-y0)/2.;
1585  centre_box_edge[2] = z0+(z1-z0)/2.;
1586  box_edge_compare.Get(x0,y0,z0,x1,y1,z1);
1587  centre_box_edge_compare[0] = x0+(x1-x0)/2.;
1588  centre_box_edge_compare[1] = y0+(y1-y0)/2.;
1589  centre_box_edge_compare[2] = z0+(z1-z0)/2.;
1590  if((fabs(centre_box_edge[0]-centre_box_edge_compare[0])<Precision::Confusion()) &&
1591  (fabs(centre_box_edge[1]-centre_box_edge_compare[1])<Precision::Confusion()) &&
1592  (fabs(centre_box_edge[2]-centre_box_edge_compare[2])<Precision::Confusion()))
1593  {
1594  bool correspondance=true;
1595  gp_Pnt point_1_edge = BRep_Tool::Pnt(TopExp::FirstVertex(edge));
1596  gp_Pnt point_2_edge = BRep_Tool::Pnt(TopExp::LastVertex(edge));
1597  gp_Pnt point_1_edge_compare = BRep_Tool::Pnt(TopExp::FirstVertex(edge_compare));
1598  gp_Pnt point_2_edge_compare = BRep_Tool::Pnt(TopExp::LastVertex(edge_compare));
1599 
1600  if(!point_1_edge.IsEqual(point_1_edge_compare,Precision::Confusion()) && !point_1_edge.IsEqual(point_2_edge_compare,Precision::Confusion())) correspondance=false;
1601  if(!point_2_edge.IsEqual(point_2_edge_compare,Precision::Confusion()) && !point_2_edge.IsEqual(point_1_edge_compare,Precision::Confusion())) correspondance=false;
1602  if(correspondance)
1603  {
1604  GeomAPI_ProjectPointOnCurve projecteur;
1605  double u0_edge,u1_edge;
1606  double u0_edge_compare,u1_edge_compare;
1607  Handle(Geom_Curve) courbe_edge = BRep_Tool::Curve(edge,u0_edge,u1_edge);
1608  Handle(Geom_Curve) courbe_edge_compare = BRep_Tool::Curve(edge_compare,u0_edge_compare,u1_edge_compare);
1609  int nb_pas = 10;
1610  double pas = (u1_edge-u0_edge)/(double)nb_pas;
1611  int i=0;
1612  while(correspondance==true && i<nb_pas)
1613  {
1614  gp_Pnt point = courbe_edge->Value(u0_edge+i*pas);
1615  projecteur.Init(point,courbe_edge_compare,u0_edge_compare,u1_edge_compare);
1616  if(projecteur.NbPoints()==0) correspondance=false;
1617  else
1618  {
1619  if(projecteur.LowerDistance()>Precision::Confusion())
1620  {
1621  correspondance=false;
1622  }
1623  i++;
1624  }
1625  }
1626  if(correspondance==true)
1627  {
1628  pas = (u1_edge_compare-u0_edge_compare)/(double)nb_pas;
1629  i=0;
1630  while(correspondance==true && i<nb_pas)
1631  {
1632  gp_Pnt point = courbe_edge_compare->Value(u0_edge_compare+i*pas);
1633  projecteur.Init(point,courbe_edge,u0_edge,u1_edge);
1634  if(projecteur.NbPoints()==0) correspondance=false;
1635  else
1636  {
1637  if(projecteur.LowerDistance()>Precision::Confusion())
1638  {
1639  correspondance=false;
1640  }
1641  i++;
1642  }
1643  }
1644  return (OCC_ARETE*)it.Value();
1645  }
1646  }
1647  }
1648  }
1649  }
1650  return NULL;
1651 }
1652 
1653 OCC_FACE* OCC_FONCTION_V2017::un_equivalent_est_present_recherche_avancee(TopoDS_Face face, NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE*, TopTools_ShapeMapHasher > &MapOfShape_MG_ELEMENT_TOPOLOGIQUE)
1654 {
1655  Bnd_Box box_face;
1656  BRepBndLib::Add(face,box_face);
1657  double centre_box_face[3];
1658  double x0,y0,z0,x1,y1,z1;
1659  box_face.Get(x0,y0,z0,x1,y1,z1);
1660  centre_box_face[0] = x0+(x1-x0)/2.;
1661  centre_box_face[1] = y0+(y1-y0)/2.;
1662  centre_box_face[2] = z0+(z1-z0)/2.;
1663  NCollection_DataMap<TopoDS_Shape,MG_ELEMENT_TOPOLOGIQUE*,TopTools_ShapeMapHasher>::Iterator it(MapOfShape_MG_ELEMENT_TOPOLOGIQUE);
1664  for(;it.More();it.Next())
1665  {
1666  if(it.Key().ShapeType()==TopAbs_FACE)
1667  {
1668  TopoDS_Face face_compare = TopoDS::Face(it.Key());
1669  Bnd_Box box_face_compare;
1670  BRepBndLib::Add(face_compare,box_face_compare);
1671  double centre_box_face_compare[3];
1672  box_face_compare.Get(x0,y0,z0,x1,y1,z1);
1673  centre_box_face_compare[0] = x0+(x1-x0)/2.;
1674  centre_box_face_compare[1] = y0+(y1-y0)/2.;
1675  centre_box_face_compare[2] = z0+(z1-z0)/2.;
1676  if((fabs(centre_box_face[0]-centre_box_face_compare[0])<Precision::Confusion()) &&
1677  (fabs(centre_box_face[1]-centre_box_face_compare[1])<Precision::Confusion()) &&
1678  (fabs(centre_box_face[2]-centre_box_face_compare[2])<Precision::Confusion()))
1679  {
1680  bool correspondance=true;
1681  double u0_face, u1_face;
1682  double v0_face, v1_face;
1683  double u0_face_compare, u1_face_compare;
1684  double v0_face_compare, v1_face_compare;
1685  ShapeAnalysis::GetFaceUVBounds(face,u0_face,u1_face,v0_face,v1_face);
1686  ShapeAnalysis::GetFaceUVBounds(face_compare,u0_face_compare,u1_face_compare,v0_face_compare,v1_face_compare);
1687  GeomAPI_ProjectPointOnSurf projecteur;
1688  Handle(Geom_Surface) surface_face = BRep_Tool::Surface(face);
1689  Handle(Geom_Surface) surface_face_compare = BRep_Tool::Surface(face_compare);
1690  int nb_pas_u = 8;
1691  int nb_pas_v = 8;
1692  double pas_u = (u1_face-u0_face)/(double)nb_pas_u;
1693  double pas_v = (v1_face-v0_face)/(double)nb_pas_v;
1694  int i=0;
1695  while(correspondance==true && i<nb_pas_u)
1696  {
1697  int j=0;
1698  while(correspondance==true && j<nb_pas_v)
1699  {
1700  gp_Pnt point = surface_face->Value(u0_face+i*pas_u,v0_face+j*pas_v);
1701  GeomAPI_ProjectPointOnSurf projecteur;
1702  projecteur.Init(point,surface_face_compare,u0_face_compare,u1_face_compare,v0_face_compare,v1_face_compare);
1703  if(projecteur.IsDone() && projecteur.NbPoints()>0)
1704  {
1705  if(((projecteur.NearestPoint().X()-point.X())*(projecteur.NearestPoint().X()-point.X())+
1706  (projecteur.NearestPoint().Y()-point.Y())*(projecteur.NearestPoint().Y()-point.Y())+
1707  (projecteur.NearestPoint().Z()-point.Z())*(projecteur.NearestPoint().Z()-point.Z()))>=Precision::Confusion())
1708  correspondance=false;
1709  }
1710  else correspondance=false;
1711  if(correspondance==true)
1712  {
1713  BRepClass_FaceClassifier face_compare_classifier(face_compare,point,Precision::Confusion());
1714  if(face_compare_classifier.State()==TopAbs_OUT)
1715  {
1716  correspondance=false;
1717  }
1718  j++;
1719  }
1720  }
1721  i++;
1722  }
1723  if(correspondance==true)
1724  {
1725  pas_u = (u1_face_compare-u0_face_compare)/(double)nb_pas_u;
1726  pas_v = (v1_face_compare-v0_face_compare)/(double)nb_pas_v;
1727  i=0;
1728  while(correspondance==true && i<nb_pas_u)
1729  {
1730  int j=0;
1731  while(correspondance==true && j<nb_pas_v)
1732  {
1733  gp_Pnt point = surface_face_compare->Value(u0_face_compare+i*pas_u,v0_face_compare+j*pas_v);
1734  GeomAPI_ProjectPointOnSurf projecteur;
1735  projecteur.Init(point,surface_face,u0_face,u1_face,v0_face,v1_face);
1736  if(projecteur.IsDone() && projecteur.NbPoints()>0)
1737  {
1738  if(((projecteur.NearestPoint().X()-point.X())*(projecteur.NearestPoint().X()-point.X())+
1739  (projecteur.NearestPoint().Y()-point.Y())*(projecteur.NearestPoint().Y()-point.Y())+
1740  (projecteur.NearestPoint().Z()-point.Z())*(projecteur.NearestPoint().Z()-point.Z()))>=Precision::Confusion())
1741  correspondance=false;
1742  }
1743  else correspondance=false;
1744  if(correspondance==true)
1745  {
1746  BRepClass_FaceClassifier face_classifier(face,point,Precision::Confusion());
1747  if(face_classifier.State()==TopAbs_OUT)
1748  {
1749  correspondance=false;
1750  }
1751  j++;
1752  }
1753  }
1754  i++;
1755  }
1756  if(correspondance==true) return (OCC_FACE*)it.Value();
1757  }
1758  }
1759  }
1760  }
1761  return NULL;
1762 }
1763 
1764 
1765 
1766 int OCC_FONCTION_V2017::decompose_TopoDS_Compound(TopoDS_Compound topods_compound,
1767  TopTools_DataMapOfShapeShape& map_TopoDS_Solid,
1768  TopTools_DataMapOfShapeShape& map_TopoDS_Shell,
1769  TopTools_DataMapOfShapeShape& map_TopoDS_Face,
1770  TopTools_DataMapOfShapeShape& map_TopoDS_Wire,
1771  TopTools_DataMapOfShapeShape& map_TopoDS_Edge,
1772  TopTools_DataMapOfShapeShape& map_TopoDS_Vertex)
1773 {
1774 
1775  TopTools_IndexedMapOfShape tmp_map_TopoDS_Solid;
1776  TopTools_IndexedMapOfShape tmp_map_TopoDS_Shell;
1777  TopTools_IndexedMapOfShape tmp_map_TopoDS_Face;
1778  TopTools_IndexedMapOfShape tmp_map_TopoDS_Wire;
1779  TopTools_IndexedMapOfShape tmp_map_TopoDS_Edge;
1780  TopTools_IndexedMapOfShape tmp_map_TopoDS_Vertex;
1781 
1782  TopExp::MapShapes(topods_compound,TopAbs_SOLID, tmp_map_TopoDS_Solid);
1783  TopExp::MapShapes(topods_compound,TopAbs_SHELL, tmp_map_TopoDS_Shell);
1784  TopExp::MapShapes(topods_compound,TopAbs_FACE, tmp_map_TopoDS_Face);
1785  TopExp::MapShapes(topods_compound,TopAbs_WIRE, tmp_map_TopoDS_Wire);
1786  TopExp::MapShapes(topods_compound,TopAbs_EDGE, tmp_map_TopoDS_Edge);
1787  TopExp::MapShapes(topods_compound,TopAbs_VERTEX, tmp_map_TopoDS_Vertex);
1788 
1789  for(TopTools_IndexedMapOfShape::Iterator it_solid(tmp_map_TopoDS_Solid);it_solid.More();it_solid.Next()) map_TopoDS_Solid.Bind(it_solid.Value(),it_solid.Value());
1790  for(TopTools_IndexedMapOfShape::Iterator it_shell(tmp_map_TopoDS_Shell);it_shell.More();it_shell.Next()) map_TopoDS_Shell.Bind(it_shell.Value(),it_shell.Value());
1791  for(TopTools_IndexedMapOfShape::Iterator it_face(tmp_map_TopoDS_Face);it_face.More();it_face.Next()) map_TopoDS_Face.Bind(it_face.Value(),it_face.Value());
1792  for(TopTools_IndexedMapOfShape::Iterator it_wire(tmp_map_TopoDS_Wire);it_wire.More();it_wire.Next()) map_TopoDS_Wire.Bind(it_wire.Value(),it_wire.Value());
1793  for(TopTools_IndexedMapOfShape::Iterator it_edge(tmp_map_TopoDS_Edge);it_edge.More();it_edge.Next()) map_TopoDS_Edge.Bind(it_edge.Value(),it_edge.Value());
1794  for(TopTools_IndexedMapOfShape::Iterator it_vertex(tmp_map_TopoDS_Vertex);it_vertex.More();it_vertex.Next()) map_TopoDS_Vertex.Bind(it_vertex.Value(),it_vertex.Value());
1795 
1796  tmp_map_TopoDS_Solid.Clear();
1797  tmp_map_TopoDS_Shell.Clear();
1798  tmp_map_TopoDS_Face.Clear();
1799  tmp_map_TopoDS_Wire.Clear();
1800  tmp_map_TopoDS_Edge.Clear();
1801  tmp_map_TopoDS_Vertex.Clear();
1802 
1803  for(TopTools_DataMapOfShapeShape::Iterator it_solid(map_TopoDS_Solid);it_solid.More();it_solid.Next())
1804  {
1805  TopExp::MapShapes(it_solid.Value(),TopAbs_SHELL, tmp_map_TopoDS_Shell);
1806  TopExp::MapShapes(it_solid.Value(),TopAbs_FACE, tmp_map_TopoDS_Face);
1807  TopExp::MapShapes(it_solid.Value(),TopAbs_WIRE, tmp_map_TopoDS_Wire);
1808  TopExp::MapShapes(it_solid.Value(),TopAbs_EDGE, tmp_map_TopoDS_Edge);
1809  TopExp::MapShapes(it_solid.Value(),TopAbs_VERTEX, tmp_map_TopoDS_Vertex);
1810 
1811  for(TopTools_IndexedMapOfShape::Iterator it_shell(tmp_map_TopoDS_Shell);it_shell.More();it_shell.Next())
1812  if(map_TopoDS_Shell.IsBound(it_shell.Value())) map_TopoDS_Shell.UnBind(it_shell.Value());
1813  for(TopTools_IndexedMapOfShape::Iterator it_face(tmp_map_TopoDS_Face);it_face.More();it_face.Next())
1814  if(map_TopoDS_Face.IsBound(it_face.Value())) map_TopoDS_Face.UnBind(it_face.Value());
1815  for(TopTools_IndexedMapOfShape::Iterator it_wire(tmp_map_TopoDS_Wire);it_wire.More();it_wire.Next())
1816  if(map_TopoDS_Wire.IsBound(it_wire.Value())) map_TopoDS_Wire.UnBind(it_wire.Value());
1817  for(TopTools_IndexedMapOfShape::Iterator it_edge(tmp_map_TopoDS_Edge);it_edge.More();it_edge.Next())
1818  if(map_TopoDS_Edge.IsBound(it_edge.Value())) map_TopoDS_Edge.UnBind(it_edge.Value());
1819  for(TopTools_IndexedMapOfShape::Iterator it_vertex(tmp_map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
1820  if(map_TopoDS_Vertex.IsBound(it_vertex.Value())) map_TopoDS_Vertex.UnBind(it_vertex.Value());
1821 
1822  tmp_map_TopoDS_Shell.Clear();
1823  tmp_map_TopoDS_Face.Clear();
1824  tmp_map_TopoDS_Wire.Clear();
1825  tmp_map_TopoDS_Edge.Clear();
1826  tmp_map_TopoDS_Vertex.Clear();
1827  }
1828 
1829  for(TopTools_DataMapOfShapeShape::Iterator it_shell(map_TopoDS_Shell);it_shell.More();it_shell.Next())
1830  {
1831  TopExp::MapShapes(it_shell.Value(),TopAbs_FACE, tmp_map_TopoDS_Face);
1832  TopExp::MapShapes(it_shell.Value(),TopAbs_WIRE, tmp_map_TopoDS_Wire);
1833  TopExp::MapShapes(it_shell.Value(),TopAbs_EDGE, tmp_map_TopoDS_Edge);
1834  TopExp::MapShapes(it_shell.Value(),TopAbs_VERTEX, tmp_map_TopoDS_Vertex);
1835 
1836  for(TopTools_IndexedMapOfShape::Iterator it_face(tmp_map_TopoDS_Face);it_face.More();it_face.Next())
1837  if(map_TopoDS_Face.IsBound(it_face.Value())) map_TopoDS_Face.UnBind(it_face.Value());
1838  for(TopTools_IndexedMapOfShape::Iterator it_wire(tmp_map_TopoDS_Wire);it_wire.More();it_wire.Next())
1839  if(map_TopoDS_Wire.IsBound(it_wire.Value())) map_TopoDS_Wire.UnBind(it_wire.Value());
1840  for(TopTools_IndexedMapOfShape::Iterator it_edge(tmp_map_TopoDS_Edge);it_edge.More();it_edge.Next())
1841  if(map_TopoDS_Edge.IsBound(it_edge.Value())) map_TopoDS_Edge.UnBind(it_edge.Value());
1842  for(TopTools_IndexedMapOfShape::Iterator it_vertex(tmp_map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
1843  if(map_TopoDS_Vertex.IsBound(it_vertex.Value())) map_TopoDS_Vertex.UnBind(it_vertex.Value());
1844 
1845  tmp_map_TopoDS_Face.Clear();
1846  tmp_map_TopoDS_Wire.Clear();
1847  tmp_map_TopoDS_Edge.Clear();
1848  tmp_map_TopoDS_Vertex.Clear();
1849  }
1850 
1851  for(TopTools_DataMapOfShapeShape::Iterator it_face(map_TopoDS_Face);it_face.More();it_face.Next())
1852  {
1853  TopExp::MapShapes(it_face.Value(),TopAbs_WIRE, tmp_map_TopoDS_Wire);
1854  TopExp::MapShapes(it_face.Value(),TopAbs_EDGE, tmp_map_TopoDS_Edge);
1855  TopExp::MapShapes(it_face.Value(),TopAbs_VERTEX, tmp_map_TopoDS_Vertex);
1856 
1857  for(TopTools_IndexedMapOfShape::Iterator it_wire(tmp_map_TopoDS_Wire);it_wire.More();it_wire.Next())
1858  if(map_TopoDS_Wire.IsBound(it_wire.Value())) map_TopoDS_Wire.UnBind(it_wire.Value());
1859  for(TopTools_IndexedMapOfShape::Iterator it_edge(tmp_map_TopoDS_Edge);it_edge.More();it_edge.Next())
1860  if(map_TopoDS_Edge.IsBound(it_edge.Value())) map_TopoDS_Edge.UnBind(it_edge.Value());
1861  for(TopTools_IndexedMapOfShape::Iterator it_vertex(tmp_map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
1862  if(map_TopoDS_Vertex.IsBound(it_vertex.Value())) map_TopoDS_Vertex.UnBind(it_vertex.Value());
1863 
1864  tmp_map_TopoDS_Wire.Clear();
1865  tmp_map_TopoDS_Edge.Clear();
1866  tmp_map_TopoDS_Vertex.Clear();
1867  }
1868 
1869  for(TopTools_DataMapOfShapeShape::Iterator it_wire(map_TopoDS_Face);it_wire.More();it_wire.Next())
1870  {
1871  TopExp::MapShapes(it_wire.Value(),TopAbs_EDGE, tmp_map_TopoDS_Edge);
1872  TopExp::MapShapes(it_wire.Value(),TopAbs_VERTEX, tmp_map_TopoDS_Vertex);
1873 
1874  for(TopTools_IndexedMapOfShape::Iterator it_edge(tmp_map_TopoDS_Edge);it_edge.More();it_edge.Next())
1875  if(map_TopoDS_Edge.IsBound(it_edge.Value())) map_TopoDS_Edge.UnBind(it_edge.Value());
1876  for(TopTools_IndexedMapOfShape::Iterator it_vertex(tmp_map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
1877  if(map_TopoDS_Vertex.IsBound(it_vertex.Value())) map_TopoDS_Vertex.UnBind(it_vertex.Value());
1878 
1879  tmp_map_TopoDS_Edge.Clear();
1880  tmp_map_TopoDS_Vertex.Clear();
1881  }
1882 
1883  for(TopTools_DataMapOfShapeShape::Iterator it_edge(map_TopoDS_Edge);it_edge.More();it_edge.Next())
1884  {
1885  TopExp::MapShapes(it_edge.Value(),TopAbs_VERTEX, tmp_map_TopoDS_Vertex);
1886 
1887  for(TopTools_IndexedMapOfShape::Iterator it_vertex(tmp_map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
1888  if(map_TopoDS_Vertex.IsBound(it_vertex.Value())) map_TopoDS_Vertex.UnBind(it_vertex.Value());
1889 
1890  tmp_map_TopoDS_Vertex.Clear();
1891  }
1892 return 0;
1893 }
1894 
1895 
1896 
1897 
1898 
1899 #endif
OCC_FONCTION_V2017::ajouter_OCC_VOLUME
int ajouter_OCC_VOLUME(class OCC_VOLUME *occ_volume)
Definition: occ_fonction_v2017.cpp:1181
OCC_COQUE
Definition: occ_coque.h:35
MG_ARETE::changer_cosommet2
virtual void changer_cosommet2(class MG_COSOMMET *cosom)
Definition: mg_arete.cpp:77
MG_ARETE::get_cosommet2
virtual class MG_COSOMMET * get_cosommet2(void)
Definition: mg_arete.cpp:85
OCC_FONCTION_V2017::exporter_fichier_brep
virtual int exporter_fichier_brep(char *file, MG_GEOMETRIE *mg_geometrie)
Definition: occ_fonction_v2017.cpp:106
OCC_FONCTION_V2015::marquer_sommet_pole
virtual void marquer_sommet_pole(class MG_FACE *face, double precision=1.0e-06)
Definition: occ_fonction_v2015.cpp:88
OCC_FONCTION_V2017::ajouter_OCC_FACE
int ajouter_OCC_FACE(class OCC_FACE *occ_face)
Definition: occ_fonction_v2017.cpp:1075
OCC_FONCTION_V2017::importer_TopoDS_Shell
MG_COQUILLE * importer_TopoDS_Shell(TopoDS_Shell topods_shell, 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_ELEMENT_TOPOLOGIQUE *mg_ele_topo_superieur=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:587
OCC_FONCTION_V2017::ouvrir_fichier_OCAF
virtual int ouvrir_fichier_OCAF(char *file)
Definition: occ_fonction_v2017.cpp:209
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
MG_BOUCLE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_boucle.cpp:78
MG_VOLUME::ajouter_mg_coquille
virtual void ajouter_mg_coquille(class MG_COQUILLE *mgcoq)
Definition: mg_volume.cpp:46
OCC_COURBE
Definition: occ_courbe.h:40
FAIL
const int FAIL
Definition: mg_definition.h:39
MG_GEOMETRIE::get_suivant_volume
MG_VOLUME * get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1702
OCC_FONCTION_V2017::ajouter_TopoDS_Edge_id
int ajouter_TopoDS_Edge_id(TopoDS_Edge edge, long id)
Definition: occ_fonction_v2017.cpp:1004
MG_POUTRE::ajouter_mg_boucle
virtual void ajouter_mg_boucle(class MG_BOUCLE *mgbou)
Definition: mg_poutre.cpp:43
OCC_FONCTION_V2017::OCC_FONCTION_V2017
OCC_FONCTION_V2017(void)
Definition: occ_fonction_v2017.cpp:25
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_FONCTION_V2017::ajouter_TopoDS_Vertex_id
int ajouter_TopoDS_Vertex_id(TopoDS_Vertex vertex, long id)
Definition: occ_fonction_v2017.cpp:957
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
OCC_FONCTION_V2017::supprimer_OCC_SOMMET
int supprimer_OCC_SOMMET(OCC_SOMMET *occ_sommet)
Definition: occ_fonction_v2017.cpp:944
OCC_FONCTION_V2017::identifier_TopoDS_Edge_Degenerated
void identifier_TopoDS_Edge_Degenerated(TopoDS_Shape topods_shape, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape)
Definition: occ_fonction_v2017.cpp:1503
MG_COSOMMET
Definition: mg_cosommet.h:31
OCC_FONCTION_V2017::m_modifications
bool m_modifications
Definition: occ_fonction_v2017.h:270
OCC_FONCTION_V2017::get_TopoDS_Edge_id
TopoDS_Edge get_TopoDS_Edge_id(long id)
Definition: occ_fonction_v2017.cpp:1011
MG_COARETE
Definition: mg_coarete.h:31
OCC_FONCTION_V2017::ajouter_OCC_ARETE
int ajouter_OCC_ARETE(class OCC_ARETE *occ_arete)
Definition: occ_fonction_v2017.cpp:986
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
MG_ELEMENT_COTOPOLOGIQUE::change_idoriginal
virtual void change_idoriginal(std::string id)
Definition: mg_element_cotopologique.cpp:57
OCC_COQUE::get_TopoDS_Shell
TopoDS_Shell get_TopoDS_Shell(void)
Definition: occ_coque.cpp:53
MG_COFACE::get_face
virtual MG_FACE * get_face(void)
Definition: mg_coface.cpp:58
OCC_VOLUME
Definition: occ_volume.h:34
OCC_FONCTION_V2017::importer_TopoDS_Compound
void importer_TopoDS_Compound(TopoDS_Compound topods_compound, 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:419
OCC_FONCTION_V2017::supprimer_OCC_FACE
int supprimer_OCC_FACE(OCC_FACE *occ_face)
Definition: occ_fonction_v2017.cpp:1080
OK
const int OK
Definition: mg_definition.h:38
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_FACE::get_nb_mg_boucle
virtual int get_nb_mg_boucle(void)
Definition: mg_face.cpp:67
OCC_FONCTION_V2017::m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE
NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE *, TopTools_ShapeMapHasher > m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE
Definition: occ_fonction_v2017.h:286
OCC_FONCTION_V2017::identifier_TopoDS_Vertex
void identifier_TopoDS_Vertex(OCC_SOMMET *occ_sommet, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
Definition: occ_fonction_v2017.cpp:1467
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
MG_ELEMENT_TOPOLOGIQUE::get_type
virtual int get_type(void)=0
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_FONCTION_V2017::get_MG_ELEMENT_COTOPOLOGIQUE
MG_ELEMENT_COTOPOLOGIQUE * get_MG_ELEMENT_COTOPOLOGIQUE(TopoDS_Shape topods_shape)
Definition: occ_fonction_v2017.cpp:1238
MG_POUTRE
Definition: mg_poutre.h:33
OCC_BOUCLE::get_TopoDS_Wire
TopoDS_Wire get_TopoDS_Wire(void)
Definition: occ_boucle.cpp:98
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_GEOMETRIE::get_suivant_sommet
MG_SOMMET * get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:632
OCC_FONCTION_V2017::supprimer_OCC_BOUCLE
int supprimer_OCC_BOUCLE(OCC_BOUCLE *occ_boucle)
Definition: occ_fonction_v2017.cpp:1038
OCC_ARETE::get_TopoDS_Edge
TopoDS_Edge get_TopoDS_Edge(void)
Definition: occ_arete.cpp:65
OCC_FONCTION_V2017::get_MG_ELEMENT_TOPOLOGIQUE
MG_ELEMENT_TOPOLOGIQUE * get_MG_ELEMENT_TOPOLOGIQUE(TopoDS_Shape topods_shape)
Definition: occ_fonction_v2017.cpp:1229
OCC_FONCTION_V2017::identifier_TopoDS_Edge
void identifier_TopoDS_Edge(OCC_ARETE *occ_arete, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
Definition: occ_fonction_v2017.cpp:1428
OCC_FONCTION_V2017::decompose_TopoDS_Compound
int decompose_TopoDS_Compound(TopoDS_Compound topods_compound, TopTools_DataMapOfShapeShape &map_TopoDS_Solid, TopTools_DataMapOfShapeShape &map_TopoDS_Shell, TopTools_DataMapOfShapeShape &map_TopoDS_Face, TopTools_DataMapOfShapeShape &map_TopoDS_Wire, TopTools_DataMapOfShapeShape &map_TopoDS_Edge, TopTools_DataMapOfShapeShape &map_TopoDS_Vertex)
Definition: occ_fonction_v2017.cpp:1766
MG_GEOMETRIE::ajouter_mg_coquille
virtual int ajouter_mg_coquille(MG_COQUILLE *mgcoq)
Definition: mg_geometrie.cpp:1473
OCC_FONCTION_V2017::m_map_id_TopoDS_Shape
std::map< long, TopoDS_Shape > m_map_id_TopoDS_Shape
Definition: occ_fonction_v2017.h:285
MG_GEOMETRIE::ajouter_mg_coface
virtual int ajouter_mg_coface(MG_COFACE *mgcoface)
Definition: mg_geometrie.cpp:1356
MG_ELEMENT_COTOPOLOGIQUE::get_idoriginal
virtual std::string get_idoriginal(void)
Definition: mg_element_cotopologique.cpp:62
OCC_FONCTION_V2017::get_TopoDS_Solid_id
TopoDS_Solid get_TopoDS_Solid_id(long id)
Definition: occ_fonction_v2017.cpp:1206
f
double f(double x, long nb, double *xfonc, double *fonc, double eng, double eni, double lambda, double nor, double *fonc2)
Definition: fct_generateur_calibrage.cpp:96
OCC_FONCTION_V2017::exporter_fichier_STEP
virtual int exporter_fichier_STEP(char *file, MG_GEOMETRIE *mg_geometrie)
Definition: occ_fonction_v2017.cpp:74
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
OCC_POINT::OCC_POINT
OCC_POINT(unsigned long num, TopoDS_Vertex pt, class OCC_FONCTION *fonc)
Definition: occ_point.cpp:31
MG_FACE::ajouter_mg_boucle
virtual void ajouter_mg_boucle(class MG_BOUCLE *mgbou)
Definition: mg_face.cpp:48
OCC_FONCTION_V2017::ajouter_TopoDS_Solid_id
int ajouter_TopoDS_Solid_id(TopoDS_Solid solid, long id)
Definition: occ_fonction_v2017.cpp:1199
OCC_FONCTION_V2017::~OCC_FONCTION_V2017
virtual ~OCC_FONCTION_V2017(void)
Definition: occ_fonction_v2017.cpp:30
OCC_FONCTION_V2017::importer_TopoDS_Edge
MG_ARETE * importer_TopoDS_Edge(TopoDS_Edge topods_edge, TopoDS_Wire *topods_wire, 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_BOUCLE *mg_boucle=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:807
OCC_FONCTION_V2017::get_version
virtual std::string get_version(void)
Definition: occ_fonction_v2017.cpp:37
MG_GEOMETRIE::get_suivant_coquille
MG_COQUILLE * get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
Definition: mg_geometrie.cpp:1552
OCC_FONCTION_V2017::identifier_TopoDS_Shell
void identifier_TopoDS_Shell(OCC_COQUILLE *occ_coquille, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
Definition: occ_fonction_v2017.cpp:1289
OCC_COQUILLE::get_TopoDS_Shell
TopoDS_Shell get_TopoDS_Shell(void)
Definition: occ_coquille.cpp:83
OCC_FONCTION_V2017::ajouter_OCC_COQUE
int ajouter_OCC_COQUE(class OCC_COQUE *occ_coque)
Definition: occ_fonction_v2017.cpp:1139
OCC_FONCTION_V2017::ajouter_OCC_SOMMET
int ajouter_OCC_SOMMET(class OCC_SOMMET *occ_sommet)
Definition: occ_fonction_v2017.cpp:939
MG_ARETE::ajouter_mg_coarete
virtual void ajouter_mg_coarete(class MG_COARETE *coarete)
Definition: mg_arete.cpp:101
OCC_FONCTION_V2017::get_TopoDS_Shell_id
TopoDS_Shell get_TopoDS_Shell_id(long id)
Definition: occ_fonction_v2017.cpp:1164
occ_fonction_v2017.h
OCC_FONCTION_V2015
Definition: occ_fonction_v2015.h:41
OCC_FONCTION_V2017::identifier_TopoDS_Face
void identifier_TopoDS_Face(OCC_FACE *occ_face, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
Definition: occ_fonction_v2017.cpp:1345
OCC_FONCTION_V2017::un_equivalent_est_present_recherche_avancee
OCC_SOMMET * un_equivalent_est_present_recherche_avancee(TopoDS_Vertex vertex, NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE *, TopTools_ShapeMapHasher > &MapOfShape_MG_ELEMENT_TOPOLOGIQUE)
Definition: occ_fonction_v2017.cpp:1548
MG_SOMMET::ajouter_mg_cosommet
virtual void ajouter_mg_cosommet(class MG_COSOMMET *cosom)
Definition: mg_sommet.cpp:59
MG_SOMMET::get_point
virtual MG_POINT * get_point(void)
Definition: mg_sommet.cpp:52
OCC_COQUILLE
Definition: occ_coquille.h:36
MG_ELEMENT_COTOPOLOGIQUE
Definition: mg_element_cotopologique.h:30
OCC_FONCTION::precision
double precision
Definition: occ_fonction.h:64
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
MG_COSOMMET::get_sommet
virtual MG_SOMMET * get_sommet(void)
Definition: mg_cosommet.cpp:83
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
MG_GEOMETRIE::ajouter_mg_face
virtual int ajouter_mg_face(MG_FACE *mgface)
Definition: mg_geometrie.cpp:1210
OCC_FONCTION_V2017::ajouter_OCC_COQUILLE
int ajouter_OCC_COQUILLE(class OCC_COQUILLE *occ_coquille)
Definition: occ_fonction_v2017.cpp:1121
MG_COQUE::ajouter_mg_coquille
virtual void ajouter_mg_coquille(class MG_COQUILLE *mgcoa)
Definition: mg_coque.cpp:45
MG_GEOMETRIE::ajouter_mg_coarete
virtual int ajouter_mg_coarete(MG_COARETE *mgcoarete)
Definition: mg_geometrie.cpp:925
MG_ELEMENT_TOPOLOGIQUE::change_idoriginal
virtual void change_idoriginal(std::string id)
Definition: mg_element_topologique.cpp:304
OCC_FONCTION_V2017::enregistrer_fichier_OCAF
virtual int enregistrer_fichier_OCAF(char *file, MG_GEOMETRIE *mg_geometrie)
Definition: occ_fonction_v2017.cpp:152
MG_GEOMETRIE::get_premier_arete
MG_ARETE * get_premier_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:907
OCC_FONCTION_V2017::get_TopoDS_Vertex_id
TopoDS_Vertex get_TopoDS_Vertex_id(long id)
Definition: occ_fonction_v2017.cpp:964
OCC_FONCTION_V2017::m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE
NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_COTOPOLOGIQUE *, TopTools_ShapeMapHasher > m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE
Definition: occ_fonction_v2017.h:287
OCC_FONCTION_V2017::get_TopoDS_Wire_id
TopoDS_Wire get_TopoDS_Wire_id(long id)
Definition: occ_fonction_v2017.cpp:1058
MG_FACE::ajouter_mg_coface
virtual void ajouter_mg_coface(class MG_COFACE *coface)
Definition: mg_face.cpp:78
MG_BOUCLE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_boucle.cpp:84
OCC_FONCTION_V2017::get_TopoDS_Face_id
TopoDS_Face get_TopoDS_Face_id(long id)
Definition: occ_fonction_v2017.cpp:1100
OCC_FONCTION_V2017::un_equivalent_est_present
OCC_SOMMET * un_equivalent_est_present(TopoDS_Vertex vertex, bool recherche_avancee=false)
Definition: occ_fonction_v2017.cpp:973
OCC_FONCTION_V2017::supprimer_OCC_VOLUME
int supprimer_OCC_VOLUME(OCC_VOLUME *occ_volume)
Definition: occ_fonction_v2017.cpp:1186
MG_GEOMETRIE::ajouter_mg_arete
virtual int ajouter_mg_arete(MG_ARETE *mgarete)
Definition: mg_geometrie.cpp:759
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
OCC_FONCTION_V2017::ajouter_OCC_BOUCLE
int ajouter_OCC_BOUCLE(class OCC_BOUCLE *occ_boucle)
Definition: occ_fonction_v2017.cpp:1033
OCC_POINT
Definition: occ_point.h:45
MG_ARETE::get_courbe
virtual class MG_COURBE * get_courbe(void)
Definition: mg_arete.cpp:89
OCC_FONCTION_V2017::importer_TopoDS_Shape
void importer_TopoDS_Shape(TopoDS_Shape topods_shape, 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:334
OCC_FONCTION_V2017::supprimer_OCC_ARETE
int supprimer_OCC_ARETE(OCC_ARETE *occ_arete)
Definition: occ_fonction_v2017.cpp:991
MG_COQUILLE::ajouter_mg_coface
virtual void ajouter_mg_coface(class MG_COFACE *mgcoface)
Definition: mg_coquille.cpp:71
OCC_FONCTION_V2017::importer_TopoDS_Wire
MG_BOUCLE * importer_TopoDS_Wire(TopoDS_Wire topods_wire, 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_ELEMENT_TOPOLOGIQUE *mg_ele_topo_superieur=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:739
OCC_FONCTION_V2017::supprimer_OCC_COQUILLE
int supprimer_OCC_COQUILLE(OCC_COQUILLE *occ_coquille)
Definition: occ_fonction_v2017.cpp:1126
OCC_FONCTION_V2017::ajouter_TopoDS_Wire_id
int ajouter_TopoDS_Wire_id(TopoDS_Wire wire, long id)
Definition: occ_fonction_v2017.cpp:1051
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
OCC_FONCTION_V2017::importer_TopoDS_Face
MG_FACE * importer_TopoDS_Face(TopoDS_Face topods_face, 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_COQUILLE *mg_coquille=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:658
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
OCC_FONCTION_V2017::importer_TopoDS_CompSolid
void importer_TopoDS_CompSolid(TopoDS_CompSolid topods_compsolid, 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:522
OCC_FONCTION_V2017::ajouter_TopoDS_Shell_id
int ajouter_TopoDS_Shell_id(TopoDS_Shell shell, long id)
Definition: occ_fonction_v2017.cpp:1157
MG_GEOMETRIE
Definition: mg_geometrie.h:84
OCC_FONCTION_V2017::identifier_TopoDS_Wire
void identifier_TopoDS_Wire(OCC_BOUCLE *occ_boucle, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
Definition: occ_fonction_v2017.cpp:1387
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_FONCTION_V2017::ajouter_TopoDS_Face_id
int ajouter_TopoDS_Face_id(TopoDS_Face face, long id)
Definition: occ_fonction_v2017.cpp:1093
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
MG_COQUE
Definition: mg_coque.h:33
MG_FACE::get_mg_boucle
virtual MG_BOUCLE * get_mg_boucle(int num)
Definition: mg_face.cpp:72
MG_ELEMENT_TOPOLOGIQUE::get_idoriginal
virtual std::string get_idoriginal(void)
Definition: mg_element_topologique.cpp:299
MG_ARETE::get_cosommet1
virtual class MG_COSOMMET * get_cosommet1(void)
Definition: mg_arete.cpp:81
MG_ELEMENT_GEOMETRIQUE::change_idoriginal
virtual void change_idoriginal(std::string id)
Definition: mg_element_geometrique.cpp:47
MG_SOMMET
Definition: mg_sommet.h:35
OCC_ARETE
Definition: occ_arete.h:34
MG_GEOMETRIE::get_suivant_face
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1346
MG_COARETE::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_coarete.cpp:58
OCC_FONCTION_V2017::identifier_TopoDS_Solid
void identifier_TopoDS_Solid(OCC_VOLUME *occ_volume, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
Definition: occ_fonction_v2017.cpp:1248
OCC_FONCTION_V2017::supprimer_OCC_COQUE
int supprimer_OCC_COQUE(OCC_COQUE *occ_coque)
Definition: occ_fonction_v2017.cpp:1144
MG_GEOMETRIE::ajouter_mg_surface
virtual int ajouter_mg_surface(MG_SURFACE *mgsrf)
Definition: mg_geometrie.cpp:366
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_POINT::point
TopoDS_Vertex point
Definition: occ_point.h:60
OCC_FONCTION_V2017::importer_TopoDS_Solid
MG_VOLUME * importer_TopoDS_Solid(TopoDS_Solid topods_solid, 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:546
MG_FACE::get_orientation
virtual int get_orientation(void)
Definition: mg_face.cpp:140
OCC_FONCTION_V2017::GetShape
virtual const TopoDS_Shape & GetShape(const int id_shape)
Definition: occ_fonction_v2017.cpp:1223
OCC_FONCTION_V2017::importer_TopoDS_Vertex
MG_SOMMET * importer_TopoDS_Vertex(TopoDS_Vertex topods_vertex, 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_ARETE *mg_arete=NULL, int index_sommet=1, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:892