MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
occ_ot_cg.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_ot_cg.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifdef ALL_OCC
23 #include "occ_ot_cg.h"
24 #include "mg_cg.h"
25 #include "occ_fonction_v2017.h"
26 #include "mg_cg_modele.h"
27 #include "mg_cg_forme.h"
28 #include "mg_cg_forme_arete.h"
29 #include "mg_cg_forme_volume.h"
30 #include "mg_cg_forme_multiple.h"
32 #include <TopoDS_Shape.hxx>
33 
35  TopoDS_Shape topods_shape,
36  OCC_FONCTION* occ_fonction,
38  bool fusionner_entite_similaire,
39  double precision,
40  bool importer_triangulation,
41  double epsilon_triangulation)
42 {
43  std::vector<MG_SOMMET*> vector_sommet;
44  std::vector<MG_ARETE*> vector_arete;
45  std::vector<MG_BOUCLE*> vector_boucle;
46  std::vector<MG_FACE*> vector_face;
47  std::vector<MG_COQUILLE*> vector_coquille;
48  std::vector<MG_VOLUME*> vector_volume;
49  creer_nouveau_mg_element(topods_shape,
50  occ_fonction,
52  vector_sommet,
53  vector_arete,
54  vector_boucle,
55  vector_face,
56  vector_coquille,
57  vector_volume,
58  fusionner_entite_similaire,
59  precision,
60  importer_triangulation,
61  epsilon_triangulation);
62 
63  if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==1)
64  {
65  MG_CG_FORME* mgcg_forme = MG_CG::creer_MG_CG_FORME_VOLUME(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,*vector_volume.begin());
66  mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
67  return mgcg_forme;
68  }
69  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()>=1)
70  {
71  MG_CG_FORME* mgcg_forme = MG_CG::creer_MG_CG_FORME_MULTI_VOLUME(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,vector_volume);
72  mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
73  return mgcg_forme;
74  }
75  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==1 && vector_volume.size()==0)
76  {
77  }
78  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==1 && vector_coquille.size()==0 && vector_volume.size()==0)
79  {
80  }
81  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==1 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
82  {
83  }
84  else if(vector_sommet.size()==0 && vector_arete.size()==1 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
85  {
86  MG_CG_FORME* mgcg_forme = MG_CG::creer_MG_CG_FORME_ARETE(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,*vector_arete.begin());
87  mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
88  return mgcg_forme;
89  }
90  else if(vector_sommet.size()==1 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
91  {
92  }
93  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
94  {
95  return NULL;
96  }
97  else
98  {
99  std::vector<MG_ELEMENT_TOPOLOGIQUE*> vector_mg_element_topologique;
100  std::vector<MG_ELEMENT_COTOPOLOGIQUE*> vector_mg_element_cotopologique;
101  std::vector<MG_SOMMET*>::iterator it_vector_sommet;
102  std::vector<MG_ARETE*>::iterator it_vector_arete;
103  std::vector<MG_BOUCLE*>::iterator it_vector_boucle;
104  std::vector<MG_FACE*>::iterator it_vector_face;
105  std::vector<MG_COQUILLE*>::iterator it_vector_coquille;
106  std::vector<MG_VOLUME*>::iterator it_vector_volume;
107  for(it_vector_sommet=vector_sommet.begin();it_vector_sommet!=vector_sommet.end();it_vector_sommet++) vector_mg_element_topologique.push_back(*it_vector_sommet);
108  for(it_vector_arete=vector_arete.begin();it_vector_arete!=vector_arete.end();it_vector_arete++) vector_mg_element_topologique.push_back(*it_vector_arete);
109  for(it_vector_face=vector_face.begin();it_vector_face!=vector_face.end();it_vector_face++) vector_mg_element_topologique.push_back(*it_vector_face);
110  for(it_vector_volume=vector_volume.begin();it_vector_volume!=vector_volume.end();it_vector_volume++) vector_mg_element_topologique.push_back(*it_vector_volume);
111  for(it_vector_boucle=vector_boucle.begin();it_vector_boucle!=vector_boucle.end();it_vector_boucle++) vector_mg_element_cotopologique.push_back(*it_vector_boucle);
112  for(it_vector_coquille=vector_coquille.begin();it_vector_coquille!=vector_coquille.end();it_vector_coquille++) vector_mg_element_cotopologique.push_back(*it_vector_coquille);
113  MG_CG_FORME* mgcg_forme = MG_CG::creer_MG_CG_FORME_MULTIPLE(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,vector_mg_element_topologique,vector_mg_element_cotopologique);
114  mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
115  return mgcg_forme;
116  }
117 return 0;
118 
119 }
120 
122  TopoDS_Shape topods_shape,
123  OCC_FONCTION* occ_fonction,
125  bool fusionner_entite_similaire,
126  double precision,
127  bool importer_triangulation,
128  double epsilon_triangulation)
129 {
130  std::vector<MG_SOMMET*> vector_sommet;
131  std::vector<MG_ARETE*> vector_arete;
132  std::vector<MG_BOUCLE*> vector_boucle;
133  std::vector<MG_FACE*> vector_face;
134  std::vector<MG_COQUILLE*> vector_coquille;
135  std::vector<MG_VOLUME*> vector_volume;
136  creer_nouveau_mg_element(topods_shape,
137  occ_fonction,
138  mg_geometrie,
139  vector_sommet,
140  vector_arete,
141  vector_boucle,
142  vector_face,
143  vector_coquille,
144  vector_volume,
145  fusionner_entite_similaire,
146  precision,
147  importer_triangulation,
148  epsilon_triangulation);
149 
150  if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==1)
151  {
152  MG_CG_MODELE* mgcg_modele = mgcg_forme->get_mgcg_modele();
153  if(mgcg_forme->get_type_forme()!=MG_CG_FORME::TYPE_FORME::VOLUME)
154  {
155  char message[1000];
156  sprintf(message,"ATTENTION ! : MG_CG_MODELE id %li : Reconstruction de MG_CG_FORME id %li : changement de TYPE_FORME (%i) -> (%i)\n",mgcg_modele->get_id(),mgcg_forme->get_id(),mgcg_forme->get_type_forme(),MG_CG_FORME::TYPE_FORME::VOLUME);
157  mgcg_modele->affiche(message);
158  MG_CG_FORME* nouvelle_mgcg_forme = MG_CG::creer_MG_CG_FORME_VOLUME(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,*vector_volume.begin());
159  nouvelle_mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
160  mgcg_modele->remplacer_mgcg_forme(nouvelle_mgcg_forme,mgcg_forme);
161  return nouvelle_mgcg_forme;
162  }
163  MG_CG_FORME_VOLUME* mgcg_forme_volume = (MG_CG_FORME_VOLUME*)mgcg_forme;
164  mgcg_forme_volume->change_mg_volume(*vector_volume.begin());
165  mgcg_modele->mise_a_jour_geometrie();
166  mgcg_forme_volume->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
167  return NULL;
168  }
169  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()>=1)
170  {
171  MG_CG_MODELE* mgcg_modele = mgcg_forme->get_mgcg_modele();
172  if(mgcg_forme->get_type_forme()!=MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
173  {
174  char message[1000];
175  sprintf(message,"ATTENTION ! : MG_CG_MODELE id %li : Reconstruction de MG_CG_FORME id %li : changement de TYPE_FORME (%i) -> (%i)\n",mgcg_modele->get_id(),mgcg_forme->get_id(),mgcg_forme->get_type_forme(),MG_CG_FORME::TYPE_FORME::MULTI_VOLUME);
176  mgcg_modele->affiche(message);
177  MG_CG_FORME* nouvelle_mgcg_forme = MG_CG::creer_MG_CG_FORME_MULTI_VOLUME(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,vector_volume);
178  nouvelle_mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
179  mgcg_modele->remplacer_mgcg_forme(nouvelle_mgcg_forme,mgcg_forme);
180  return nouvelle_mgcg_forme;
181  }
182  MG_CG_FORME_MULTI_VOLUME* mgcg_forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)mgcg_forme;
183  mgcg_forme_multi_volume->retirer_tout_mg_volume();
184  std::vector<MG_VOLUME*>::iterator it_volume;
185  for(it_volume=vector_volume.begin();it_volume!=vector_volume.end();it_volume++) mgcg_forme_multi_volume->ajouter_mg_volume(*it_volume);
186  mgcg_modele->mise_a_jour_geometrie();
187  mgcg_forme_multi_volume->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
188  return NULL;
189  }
190  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==1 && vector_volume.size()==0)
191  {
192  }
193  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==1 && vector_coquille.size()==0 && vector_volume.size()==0)
194  {
195  }
196  else if(vector_sommet.size()==0 && vector_arete.size()==0 && vector_boucle.size()==1 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
197  {
198  }
199  else if(vector_sommet.size()==0 && vector_arete.size()==1 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
200  {
201  MG_CG_MODELE* mgcg_modele = mgcg_forme->get_mgcg_modele();
202  if(mgcg_forme->get_type_forme()!=MG_CG_FORME::TYPE_FORME::ARETE)
203  {
204  char message[1000];
205  sprintf(message,"ATTENTION ! : MG_CG_MODELE id %li : Reconstruction de MG_CG_FORME id %li : changement de TYPE_FORME (%i) -> (%i)\n",mgcg_modele->get_id(),mgcg_forme->get_id(),mgcg_forme->get_type_forme(),MG_CG_FORME::TYPE_FORME::VOLUME);
206  mgcg_modele->affiche(message);
207  MG_CG_FORME* nouvelle_mgcg_forme = MG_CG::creer_MG_CG_FORME_ARETE(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,*vector_arete.begin());
208  nouvelle_mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
209  mgcg_modele->remplacer_mgcg_forme(nouvelle_mgcg_forme,mgcg_forme);
210  return nouvelle_mgcg_forme;
211  }
212  MG_CG_FORME_ARETE* mgcg_forme_arete = (MG_CG_FORME_ARETE*)mgcg_forme;
213  mgcg_forme_arete->change_mg_arete(*vector_arete.begin());
214  mgcg_modele->mise_a_jour_geometrie();
215  mgcg_forme_arete->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
216  return NULL;
217  }
218  else if(vector_sommet.size()==1 && vector_arete.size()==0 && vector_boucle.size()==0 && vector_face.size()==0 && vector_coquille.size()==0 && vector_volume.size()==0)
219  {
220  }
221  else
222  {
223  std::vector<MG_ELEMENT_TOPOLOGIQUE*> vector_mg_element_topologique;
224  std::vector<MG_ELEMENT_COTOPOLOGIQUE*> vector_mg_element_cotopologique;
225  std::vector<MG_SOMMET*>::iterator it_vector_sommet;
226  std::vector<MG_ARETE*>::iterator it_vector_arete;
227  std::vector<MG_BOUCLE*>::iterator it_vector_boucle;
228  std::vector<MG_FACE*>::iterator it_vector_face;
229  std::vector<MG_COQUILLE*>::iterator it_vector_coquille;
230  std::vector<MG_VOLUME*>::iterator it_vector_volume;
231  for(it_vector_sommet=vector_sommet.begin();it_vector_sommet!=vector_sommet.end();it_vector_sommet++) vector_mg_element_topologique.push_back(*it_vector_sommet);
232  for(it_vector_arete=vector_arete.begin();it_vector_arete!=vector_arete.end();it_vector_arete++) vector_mg_element_topologique.push_back(*it_vector_arete);
233  for(it_vector_face=vector_face.begin();it_vector_face!=vector_face.end();it_vector_face++) vector_mg_element_topologique.push_back(*it_vector_face);
234  for(it_vector_volume=vector_volume.begin();it_vector_volume!=vector_volume.end();it_vector_volume++) vector_mg_element_topologique.push_back(*it_vector_volume);
235  for(it_vector_boucle=vector_boucle.begin();it_vector_boucle!=vector_boucle.end();it_vector_boucle++) vector_mg_element_cotopologique.push_back(*it_vector_boucle);
236  for(it_vector_coquille=vector_coquille.begin();it_vector_coquille!=vector_coquille.end();it_vector_coquille++) vector_mg_element_cotopologique.push_back(*it_vector_coquille);
237  MG_CG_MODELE* mgcg_modele = mgcg_forme->get_mgcg_modele();
238  if(mgcg_forme->get_type_forme()!=MG_CG_FORME::TYPE_FORME::MULTIPLE)
239  {
240  char message[1000];
241  sprintf(message,"ATTENTION ! : MG_CG_MODELE id %li : Reconstruction de MG_CG_FORME id %li : changement de TYPE_FORME (%i) -> (%i)\n",mgcg_modele->get_id(),mgcg_forme->get_id(),mgcg_forme->get_type_forme(),MG_CG_FORME::TYPE_FORME::MULTIPLE);
242  mgcg_modele->affiche(message);
243  MG_CG_FORME* nouvelle_mgcg_forme = MG_CG::creer_MG_CG_FORME_MULTIPLE(mgcg_modele,MG_CG_FORME::PROVENANCE_FORME::GENEREE,vector_mg_element_topologique,vector_mg_element_cotopologique);
244  nouvelle_mgcg_forme->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
245  mgcg_modele->remplacer_mgcg_forme(nouvelle_mgcg_forme,mgcg_forme);
246  return nouvelle_mgcg_forme;
247  }
248  MG_CG_FORME_MULTIPLE* mgcg_forme_multiple = (MG_CG_FORME_MULTIPLE*)mgcg_forme;
249  mgcg_forme_multiple->retirer_tout_mg_element_topologique();
250  mgcg_forme_multiple->retirer_tout_mg_element_cotopologique();
251  std::vector<MG_ELEMENT_TOPOLOGIQUE*>::iterator it_vector_topo;
252  for(it_vector_topo=vector_mg_element_topologique.begin();it_vector_topo!=vector_mg_element_topologique.end();it_vector_topo++) mgcg_forme_multiple->ajouter_mg_element_topologique(*it_vector_topo);
253  std::vector<MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_vector_cotopo;
254  for(it_vector_cotopo=vector_mg_element_cotopologique.begin();it_vector_cotopo!=vector_mg_element_cotopologique.end();it_vector_cotopo++) mgcg_forme_multiple->ajouter_mg_element_cotopologique(*it_vector_cotopo);
255  mgcg_modele->mise_a_jour_geometrie();
256  mgcg_forme_multiple->change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
257  return NULL;
258  }
259 return NULL;
260 }
261 
262 
263 void OCC_OT_CG::creer_nouveau_mg_element(TopoDS_Shape topods_shape,
264  OCC_FONCTION* occ_fonction,
266  std::vector< MG_SOMMET* >& vector_sommet,
267  std::vector< MG_ARETE* >& vector_arete,
268  std::vector< MG_BOUCLE* >& vector_boucle,
269  std::vector< MG_FACE* >& vector_face,
270  std::vector< MG_COQUILLE* >& vector_coquille,
271  std::vector< MG_VOLUME* >& vector_volume,
272  bool fusionner_entite_similaire,
273  double precision,
274  bool importer_triangulation,
275  double epsilon_triangulation)
276 {
277  if(occ_fonction->get_version()=="OCCV2017")
278  {
279  OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)occ_fonction;
280  switch(topods_shape.ShapeType())
281  {
282  case TopAbs_ShapeEnum::TopAbs_COMPOUND:
283  {
284 
285  TopTools_DataMapOfShapeShape map_TopoDS_Solid;
286  TopTools_DataMapOfShapeShape map_TopoDS_Shell;
287  TopTools_DataMapOfShapeShape map_TopoDS_Face;
288  TopTools_DataMapOfShapeShape map_TopoDS_Wire;
289  TopTools_DataMapOfShapeShape map_TopoDS_Edge;
290  TopTools_DataMapOfShapeShape map_TopoDS_Vertex;
291  occ_fonction_v2017->decompose_TopoDS_Compound(TopoDS::Compound(topods_shape),
292  map_TopoDS_Solid,
293  map_TopoDS_Shell,
294  map_TopoDS_Face,
295  map_TopoDS_Wire,
296  map_TopoDS_Edge,
297  map_TopoDS_Vertex);
298  if(importer_triangulation) BRepMesh_IncrementalMesh(TopoDS::Compound(topods_shape),epsilon_triangulation);
299 
300  for(TopTools_DataMapOfShapeShape::Iterator it_solid(map_TopoDS_Solid);it_solid.More();it_solid.Next())
301  {
302  TopoDS_Solid topods_solid = TopoDS::Solid(it_solid.Value());
303  MG_VOLUME* mg_volume = occ_fonction_v2017->importer_TopoDS_Solid(topods_solid,
304  NULL,
305  NULL,
306  NULL,
307  mg_geometrie,
308  fusionner_entite_similaire,
309  precision);
310  vector_volume.push_back(mg_volume);
311  }
312 
313  for(TopTools_DataMapOfShapeShape::Iterator it_shell(map_TopoDS_Shell);it_shell.More();it_shell.Next())
314  {
315  TopoDS_Shell topods_shell = TopoDS::Shell(it_shell.Value());
316  MG_COQUILLE* mg_coquille = occ_fonction_v2017->importer_TopoDS_Shell(topods_shell,
317  NULL,
318  NULL,
319  NULL,
320  NULL,
321  mg_geometrie,
322  fusionner_entite_similaire,
323  precision);
324  vector_coquille.push_back(mg_coquille);
325  }
326 
327  for(TopTools_DataMapOfShapeShape::Iterator it_face(map_TopoDS_Face);it_face.More();it_face.Next())
328  {
329  TopoDS_Face topods_face = TopoDS::Face(it_face.Value());
330  MG_FACE* mg_face = occ_fonction_v2017->importer_TopoDS_Face(topods_face,
331  NULL,
332  NULL,
333  NULL,
334  NULL,
335  mg_geometrie,
336  fusionner_entite_similaire,
337  precision);
338  vector_face.push_back(mg_face);
339  }
340 
341  for(TopTools_DataMapOfShapeShape::Iterator it_wire(map_TopoDS_Wire);it_wire.More();it_wire.Next())
342  {
343  TopoDS_Wire topods_wire = TopoDS::Wire(it_wire.Value());
344  MG_BOUCLE* mg_boucle = occ_fonction_v2017->importer_TopoDS_Wire(topods_wire,
345  NULL,
346  NULL,
347  NULL,
348  NULL,
349  mg_geometrie,
350  fusionner_entite_similaire,
351  precision);
352  vector_boucle.push_back(mg_boucle);
353  }
354 
355  for(TopTools_DataMapOfShapeShape::Iterator it_edge(map_TopoDS_Edge);it_edge.More();it_edge.Next())
356  {
357  TopoDS_Edge topods_edge = TopoDS::Edge(it_edge.Value());
358  MG_ARETE* mg_arete = occ_fonction_v2017->importer_TopoDS_Edge(topods_edge,NULL,
359  NULL,
360  NULL,
361  NULL,
362  NULL,
363  mg_geometrie,
364  fusionner_entite_similaire,
365  precision);
366  vector_arete.push_back(mg_arete);
367  }
368 
369  for(TopTools_DataMapOfShapeShape::Iterator it_vertex(map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
370  {
371  TopoDS_Vertex topods_vertex = TopoDS::Vertex(it_vertex.Value());
372  MG_SOMMET* mg_sommet = occ_fonction_v2017->importer_TopoDS_Vertex(topods_vertex,
373  NULL,
374  NULL,
375  NULL,
376  NULL,
377  1,
378  mg_geometrie,
379  fusionner_entite_similaire,
380  precision);
381  vector_sommet.push_back(mg_sommet);
382  }
383  break;
384  }
385  case TopAbs_ShapeEnum::TopAbs_COMPSOLID:
386  {
387  if(importer_triangulation) BRepMesh_IncrementalMesh(TopoDS::CompSolid(topods_shape),epsilon_triangulation);
388  TopTools_IndexedMapOfShape map_volume;
389  TopExp::MapShapes(topods_shape,TopAbs_SOLID, map_volume);
390  for(int i=1;i<map_volume.Extent()+1;i++)
391  {
392  TopoDS_Solid topods_solid = TopoDS::Solid(map_volume.FindKey(i));
393  MG_VOLUME* mg_volume = occ_fonction_v2017->importer_TopoDS_Solid(topods_solid,
394  NULL,
395  NULL,
396  NULL,
397  mg_geometrie,
398  fusionner_entite_similaire,
399  precision);
400  vector_volume.push_back(mg_volume);
401  }
402  break;
403  }
404  case TopAbs_ShapeEnum::TopAbs_SOLID:
405  {
406  TopoDS_Solid topods_solid = TopoDS::Solid(topods_shape);
407  MG_VOLUME* mg_volume = occ_fonction_v2017->importer_TopoDS_Solid(topods_solid,
408  NULL,
409  NULL,
410  NULL,
411  mg_geometrie,
412  fusionner_entite_similaire,
413  precision);
414  vector_volume.push_back(mg_volume);
415  break;
416  }
417  case TopAbs_ShapeEnum::TopAbs_EDGE:
418  {
419  TopoDS_Edge topods_edge = TopoDS::Edge(topods_shape);
420  MG_ARETE* mg_arete = occ_fonction_v2017->importer_TopoDS_Edge(topods_edge,
421  NULL,
422  NULL,
423  NULL,
424  NULL,
425  NULL,
426  mg_geometrie,
427  fusionner_entite_similaire,
428  precision);
429  break;
430  }
431 
432  }
433  }
434 }
435 
436 
437 
438 
439 
440 
441 
442 
443 
444 
445 
446 
447 
448 
449 
450 
451 
452 
453 
454 void OCC_OT_CG::get_listofTopoDS_Shape(MG_CG_FORME* mgcg_forme, TopTools_ListOfShape& listofshape)
455 {
456  switch(mgcg_forme->get_type_forme())
457  {
458  case MG_CG_FORME::TYPE_FORME::MULTIPLE:
459  {
460  MG_CG_FORME_MULTIPLE* mgcg_forme_multiple = (MG_CG_FORME_MULTIPLE*)mgcg_forme;
461  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
462  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
463  for(MG_ELEMENT_TOPOLOGIQUE* ele=mgcg_forme_multiple->get_premier_mg_element_topologique(it_topo);ele!=NULL;ele=mgcg_forme_multiple->get_suivant_mg_element_topologique(it_topo))
464  {
465  switch(ele->get_type())
466  {
467  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
468  {
469  OCC_VOLUME* occ_volume = (OCC_VOLUME*)ele;
470  listofshape.Append(occ_volume->get_TopoDS_Solid());
471  break;
472  }
473  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
474  {
475  OCC_FACE* occ_face = (OCC_FACE*)ele;
476  listofshape.Append(occ_face->get_TopoDS_Face());
477  break;
478  }
479  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
480  {
481  OCC_ARETE* occ_arete = (OCC_ARETE*)ele;
482  listofshape.Append(occ_arete->get_TopoDS_Edge());
483  break;
484  }
485  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
486  {
487  OCC_SOMMET* occ_sommet = (OCC_SOMMET*)ele;
488  listofshape.Append(occ_sommet->get_TopoDS_Vertex());
489  break;
490  }
491  }
492  }
493  for(MG_ELEMENT_COTOPOLOGIQUE* ele=mgcg_forme_multiple->get_premier_mg_element_cotopologique(it_cotopo);ele!=NULL;ele=mgcg_forme_multiple->get_suivant_mg_element_cotopologique(it_cotopo))
494  {
495  if(ele->get_type()==MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE)
496  {
497  OCC_COQUILLE* occ_coquille = (OCC_COQUILLE*)ele;
498  listofshape.Append(occ_coquille->get_TopoDS_Shell());
499  break;
500  }
501  else if(ele->get_type()==MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE)
502  {
503  OCC_BOUCLE* occ_boucle = (OCC_BOUCLE*)ele;
504  listofshape.Append(occ_boucle->get_TopoDS_Wire());
505  break;
506  }
507  }
508  break;
509  }
510  case MG_CG_FORME::TYPE_FORME::MULTI_VOLUME:
511  {
512  MG_CG_FORME_MULTI_VOLUME* mgcg_forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)mgcg_forme;
513  std::map<long,MG_VOLUME*>::iterator it_volume;
514  for(MG_VOLUME* mg_volume = mgcg_forme_multi_volume->get_premier_mg_volume(it_volume);mg_volume!=NULL;mg_volume=mgcg_forme_multi_volume->get_suivant_mg_volume(it_volume))
515  {
516  OCC_VOLUME* occ_volume = (OCC_VOLUME*)mg_volume;
517  listofshape.Append(occ_volume->get_TopoDS_Solid());
518  }
519  break;
520  }
521  case MG_CG_FORME::TYPE_FORME::VOLUME:
522  {
523  MG_CG_FORME_VOLUME* mgcg_forme_volume = (MG_CG_FORME_VOLUME*)mgcg_forme;
524  OCC_VOLUME* occ_volume = (OCC_VOLUME*)mgcg_forme_volume->get_mg_volume();
525  listofshape.Append(occ_volume->get_TopoDS_Solid());
526  break;
527  }
528  case MG_CG_FORME::TYPE_FORME::ARETE:
529  {
530  MG_CG_FORME_ARETE* mgcg_forme_arete = (MG_CG_FORME_ARETE*)mgcg_forme;
531  OCC_ARETE* occ_arete = (OCC_ARETE*)mgcg_forme_arete->get_mg_arete();
532  listofshape.Append(occ_arete->get_TopoDS_Edge());
533  break;
534  }
535  }
536 }
537 
538 void OCC_OT_CG::get_listofTopoDS_Shape(std::map< MG_CG_FORME*, MG_CG_FORME* >* map_forme, TopTools_ListOfShape& listofshape)
539 {
540  std::map<MG_CG_FORME*,MG_CG_FORME*>::iterator it_forme;
541  for(it_forme=map_forme->begin();it_forme!=map_forme->end();it_forme++)
542  {
543  MG_CG_FORME* mgcg_forme = it_forme->second;
544  get_listofTopoDS_Shape(mgcg_forme,listofshape);
545  }
546 }
547 
548 
549 
550 #endif
mg_cg_forme.h
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
mg_cg_forme_multi_volume.h
occ_ot_cg.h
MG_BOUCLE
Definition: mg_boucle.h:35
MG_CG::creer_MG_CG_FORME_VOLUME
static MG_CG_FORME_VOLUME * creer_MG_CG_FORME_VOLUME(MG_CG_MODELE *mgcg_modele, int provenance, MG_VOLUME *mg_volume)
Definition: mg_cg.cpp:191
mg_cg.h
MG_CG_FORME_MULTIPLE::get_premier_mg_element_cotopologique
virtual MG_ELEMENT_COTOPOLOGIQUE * get_premier_mg_element_cotopologique(std::map< long, MG_ELEMENT_COTOPOLOGIQUE * >::iterator &it)
Definition: mg_cg_forme_multiple.cpp:174
MG_CG_MODELE::remplacer_mgcg_forme
virtual int remplacer_mgcg_forme(MG_CG_FORME *mgcg_forme_nouvelle, MG_CG_FORME *mgcg_forme_ancienne)
Definition: mg_cg_modele.cpp:217
OCC_OT_CG::creer_MG_CG_FORME
static MG_CG_FORME * creer_MG_CG_FORME(MG_CG_MODELE *mgcg_modele, TopoDS_Shape topods_shape, OCC_FONCTION *occ_fonction, MG_GEOMETRIE *mg_geometrie, bool fusionner_entite_similaire=false, double precision=1e-6, bool importer_triangulation=false, double epsilon_triangulation=1.)
Definition: occ_ot_cg.cpp:34
mg_cg_forme_volume.h
MG_CG_MODELE::affiche
void affiche(char *message)
Definition: mg_cg_modele.cpp:78
OCC_VOLUME::get_TopoDS_Solid
TopoDS_Solid get_TopoDS_Solid(void)
Definition: occ_volume.cpp:53
MG_CG_FORME_VOLUME::change_mg_volume
virtual void change_mg_volume(MG_VOLUME *mg_volume)
Definition: mg_cg_forme_volume.cpp:73
MG_CG_FORME_MULTIPLE::get_premier_mg_element_topologique
virtual MG_ELEMENT_TOPOLOGIQUE * get_premier_mg_element_topologique(std::map< long, MG_ELEMENT_TOPOLOGIQUE * >::iterator &it)
Definition: mg_cg_forme_multiple.cpp:132
MG_CG_FORME_MULTI_VOLUME::ajouter_mg_volume
virtual int ajouter_mg_volume(MG_VOLUME *mg_volume)
Definition: mg_cg_forme_multi_volume.cpp:80
MG_CG_FORME_MULTI_VOLUME::get_suivant_mg_volume
virtual MG_VOLUME * get_suivant_mg_volume(std::map< long, MG_VOLUME * >::iterator &it)
Definition: mg_cg_forme_multi_volume.cpp:138
MG_CG_FORME_MULTI_VOLUME::retirer_tout_mg_volume
virtual void retirer_tout_mg_volume(void)
Definition: mg_cg_forme_multi_volume.cpp:99
OCC_VOLUME
Definition: occ_volume.h:34
MG_CG_FORME_MULTIPLE::retirer_tout_mg_element_cotopologique
virtual void retirer_tout_mg_element_cotopologique(void)
Definition: mg_cg_forme_multiple.cpp:169
OCC_OT_CG::get_listofTopoDS_Shape
static void get_listofTopoDS_Shape(std::map< MG_CG_FORME *, MG_CG_FORME * > *map_forme, TopTools_ListOfShape &listofshape)
Definition: occ_ot_cg.cpp:538
MG_CG_FORME::change_etat
virtual void change_etat(int etat_forme)
Definition: mg_cg_forme.cpp:81
MG_VOLUME
Definition: mg_volume.h:33
MG_COQUILLE
Definition: mg_coquille.h:34
MG_CG_FORME_MULTI_VOLUME
Definition: mg_cg_forme_multi_volume.h:35
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_CG_FORME_MULTIPLE::ajouter_mg_element_topologique
virtual int ajouter_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE *mg_element_topologique)
Definition: mg_cg_forme_multiple.cpp:108
MG_CG_FORME_MULTI_VOLUME::get_premier_mg_volume
virtual MG_VOLUME * get_premier_mg_volume(std::map< long, MG_VOLUME * >::iterator &it)
Definition: mg_cg_forme_multi_volume.cpp:131
MG_CG_FORME_MULTIPLE::get_suivant_mg_element_cotopologique
virtual MG_ELEMENT_COTOPOLOGIQUE * get_suivant_mg_element_cotopologique(std::map< long, MG_ELEMENT_COTOPOLOGIQUE * >::iterator &it)
Definition: mg_cg_forme_multiple.cpp:181
OCC_ARETE::get_TopoDS_Edge
TopoDS_Edge get_TopoDS_Edge(void)
Definition: occ_arete.cpp:65
OCC_OT_CG::reconstruire_MG_CG_FORME
static MG_CG_FORME * reconstruire_MG_CG_FORME(MG_CG_FORME *mgcg_forme, TopoDS_Shape topods_shape, OCC_FONCTION *occ_fonction, MG_GEOMETRIE *mg_geometrie, bool fusionner_entite_similaire=false, double precision=1e-6, bool importer_triangulation=false, double epsilon_triangulation=1.)
Definition: occ_ot_cg.cpp:121
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_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_FORME::get_mgcg_modele
virtual MG_CG_MODELE * get_mgcg_modele(void)
Definition: mg_cg_forme.cpp:61
OCC_BOUCLE
Definition: occ_boucle.h:38
MG_CG_MODELE::mise_a_jour_geometrie
virtual void mise_a_jour_geometrie(void)
Definition: mg_cg_modele.cpp:561
OCC_SOMMET
Definition: occ_sommet.h:34
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
mg_cg_forme_arete.h
OCC_COQUILLE::get_TopoDS_Shell
TopoDS_Shell get_TopoDS_Shell(void)
Definition: occ_coquille.cpp:83
MG_CG_MODELE
Definition: mg_cg_modele.h:41
OCC_OT_CG::creer_nouveau_mg_element
static void creer_nouveau_mg_element(TopoDS_Shape topods_shape, OCC_FONCTION *occ_fonction, MG_GEOMETRIE *mg_geometrie, std::vector< MG_SOMMET * > &vector_sommet, std::vector< MG_ARETE * > &vector_arete, std::vector< MG_BOUCLE * > &vector_boucle, std::vector< MG_FACE * > &vector_face, std::vector< MG_COQUILLE * > &vector_coquille, std::vector< MG_VOLUME * > &vector_volume, bool fusionner_entite_similaire=false, double precision=1e-6, bool importer_triangulation=false, double epsilon_triangulation=1.)
Definition: occ_ot_cg.cpp:263
occ_fonction_v2017.h
MG_CG_FORME_VOLUME::get_mg_volume
virtual MG_VOLUME * get_mg_volume(void)
Definition: mg_cg_forme_volume.cpp:68
MG_CG::creer_MG_CG_FORME_MULTIPLE
static MG_CG_FORME_MULTIPLE * creer_MG_CG_FORME_MULTIPLE(MG_CG_MODELE *mgcg_modele, int provenance, std::vector< MG_ELEMENT_TOPOLOGIQUE * > &vector_mg_element_topologique, std::vector< MG_ELEMENT_COTOPOLOGIQUE * > &vector_mg_element_cotopologique)
Definition: mg_cg.cpp:285
OCC_COQUILLE
Definition: occ_coquille.h:36
MG_ELEMENT_COTOPOLOGIQUE
Definition: mg_element_cotopologique.h:30
MG_CG_FORME_MULTIPLE::ajouter_mg_element_cotopologique
virtual int ajouter_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE *mg_element_cotopologique)
Definition: mg_cg_forme_multiple.cpp:150
OCC_SOMMET::get_TopoDS_Vertex
TopoDS_Vertex get_TopoDS_Vertex(void)
Definition: occ_sommet.cpp:52
mg_cg_modele.h
MG_CG_FORME_ARETE
Definition: mg_cg_forme_arete.h:36
MG_CG_FORME_MULTIPLE::get_suivant_mg_element_topologique
virtual MG_ELEMENT_TOPOLOGIQUE * get_suivant_mg_element_topologique(std::map< long, MG_ELEMENT_TOPOLOGIQUE * >::iterator &it)
Definition: mg_cg_forme_multiple.cpp:139
mg_cg_forme_multiple.h
MG_MAILLAGE::mg_geometrie
MG_GEOMETRIE * mg_geometrie
Definition: mg_maillage.h:210
MG_CG::creer_MG_CG_FORME_MULTI_VOLUME
static MG_CG_FORME_MULTI_VOLUME * creer_MG_CG_FORME_MULTI_VOLUME(MG_CG_MODELE *mgcg_modele, int provenance, std::vector< MG_VOLUME * > &vector_mg_volume)
Definition: mg_cg.cpp:295
MG_CG::creer_MG_CG_FORME_ARETE
static MG_CG_FORME_ARETE * creer_MG_CG_FORME_ARETE(MG_CG_MODELE *mgcg_modele, int provenance, MG_ARETE *mg_arete)
Definition: mg_cg.cpp:167
MG_CG_FORME_MULTIPLE
Definition: mg_cg_forme_multiple.h:39
MG_CG_FORME_MULTIPLE::retirer_tout_mg_element_topologique
virtual void retirer_tout_mg_element_topologique(void)
Definition: mg_cg_forme_multiple.cpp:127
OCC_FACE::get_TopoDS_Face
TopoDS_Face get_TopoDS_Face(void)
Definition: occ_face.cpp:53
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::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_CG_FORME::get_type_forme
virtual int get_type_forme(void)=0
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_CG_FORME_ARETE::change_mg_arete
virtual void change_mg_arete(MG_ARETE *mg_arete)
Definition: mg_cg_forme_arete.cpp:69
MG_CG_FORME_ARETE::get_mg_arete
virtual MG_ARETE * get_mg_arete(void)
Definition: mg_cg_forme_arete.cpp:74
OCC_FACE
Definition: occ_face.h:34
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
OCC_FONCTION_V2017
Definition: occ_fonction_v2017.h:104
MG_SOMMET
Definition: mg_sommet.h:35
OCC_ARETE
Definition: occ_arete.h:34
OCC_FONCTION
Definition: occ_fonction.h:40
MG_CG_FORME_VOLUME
Definition: mg_cg_forme_volume.h:36
OCC_FONCTION::get_version
virtual std::string get_version(void)
Definition: occ_fonction.cpp:88
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
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