MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
occ_cg_op_inclusion_matrice.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_cg_op_inclusion_matrice.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifdef ALL_OCC
24 #include "occ_ot_cg.h"
25 #include "mg_definition.h"
26 #include "occ_fonction_v2017.h"
27 #include "mg_cg_modele.h"
28 #include "mg_cg_forme.h"
29 #include <BRepAlgoAPI_BuilderAlgo.hxx>
31  int semantique,
32  MG_CG_FORME* mgcg_forme_inclusion_entree,
33  MG_CG_FORME* mgcg_forme_matrice_entree): MG_CG_OP_INCLUSION_MATRICE(mgcg_modele,semantique,mgcg_forme_inclusion_entree,mgcg_forme_matrice_entree)
34 {
35 
36 }
37 
39  int semantique,
40  int etat,
41  long unsigned int num,
42  MG_CG_FORME* mgcg_forme_inclusion_entree,
43  MG_CG_FORME* mgcg_forme_matrice_entree,
44  long int id_mgcg_forme_inclusion_sortie,
45  long int id_mgcg_forme_matrice_sortie): MG_CG_OP_INCLUSION_MATRICE(mgcg_modele,
46  semantique,
47  etat,
48  num,
49  mgcg_forme_inclusion_entree,
50  mgcg_forme_matrice_entree,
51  id_mgcg_forme_inclusion_sortie,
52  id_mgcg_forme_matrice_sortie)
53 {
54 
55 }
56 
58 {
59 
60 }
61 
63 {
64 
65 }
66 
68 {
69  if(m_mgcg_modele==NULL)
70  {
71  std::cerr << "*** ERREUR : OCC_CG_OP_INCLUSION_MATRICE::construire_forme -> MG_CG_MODELE NULL ***" << std::endl;
72  return FAIL;
73  }
78 }
79 
80 int OCC_CG_OP_INCLUSION_MATRICE::construire(bool fusionner_entite_similaire,
81  double precision,
82  bool importer_triangulation,
83  double epsilon_triangulation)
84 {
85 
86  if(m_mgcg_modele==NULL)
87  {
88  std::cerr << "*** ERREUR : OCC_CG_OP_INCLUSION_MATRICE::construire_forme -> MG_CG_MODELE NULL ***" << std::endl;
89  return FAIL;
90  }
91  BRepAlgoAPI_BuilderAlgo brep_fragment;
92  TopTools_ListOfShape list_of_shape_arguments;
93  TopTools_ListOfShape list_of_shape_inclusion;
94  TopTools_ListOfShape list_of_shape_matrice;
99  brep_fragment.SetArguments(list_of_shape_arguments);
100  brep_fragment.Build();
101  if(!brep_fragment.IsDone())
102  {
103  std::cout << "*** ERREUR : OCC_CG_OP_INCLUSION_MATRICE::construire_forme -> ECHEC de BRepAlgoAPI_BuilderAlgo ***" << std::endl;
104  return FAIL;
105  }
106  TopoDS_Shape shape_resultat = brep_fragment.Shape();
107  Bnd_Box box_inclusion;
108  Bnd_Box box_matrice;
109  TopTools_ListOfShape::Iterator it_shape;
110  for(it_shape.Init(list_of_shape_inclusion);it_shape.More();it_shape.Next())
111  {
112  BRepBndLib::AddOptimal(it_shape.Value(),box_inclusion,false);
113  }
114  for(it_shape.Init(list_of_shape_matrice);it_shape.More();it_shape.Next())
115  {
116  BRepBndLib::AddOptimal(it_shape.Value(),box_matrice,false);
117  }
119 
120  BRep_Builder brep_builder;
121  TopoDS_Compound Compound_inclusion;
122  TopoDS_Compound Compound_matrice;
123  brep_builder.MakeCompound(Compound_inclusion);
124  brep_builder.MakeCompound(Compound_matrice);
125  if(shape_resultat.ShapeType()==TopAbs_COMPOUND)
126  {
127  TopTools_DataMapOfShapeShape map_TopoDS_Solid;
128  TopTools_DataMapOfShapeShape map_TopoDS_Shell;
129  TopTools_DataMapOfShapeShape map_TopoDS_Face;
130  TopTools_DataMapOfShapeShape map_TopoDS_Wire;
131  TopTools_DataMapOfShapeShape map_TopoDS_Edge;
132  TopTools_DataMapOfShapeShape map_TopoDS_Vertex;
133  occ_fonction_v2017->decompose_TopoDS_Compound(TopoDS::Compound(shape_resultat),
134  map_TopoDS_Solid,
135  map_TopoDS_Shell,
136  map_TopoDS_Face,
137  map_TopoDS_Wire,
138  map_TopoDS_Edge,
139  map_TopoDS_Vertex);
140  TopTools_DataMapOfShapeShape::Iterator it_solid;
141  for(it_solid.Initialize(map_TopoDS_Solid);it_solid.More();it_solid.Next())
142  {
143  if(est_compris_dans(it_solid.Value(),box_inclusion,precision))
144  {
145  brep_builder.Add(Compound_inclusion,it_solid.Value());
146  }
147  else brep_builder.Add(Compound_matrice,it_solid.Value());
148  }
149  TopTools_DataMapOfShapeShape::Iterator it_shell;
150  for(it_shell.Initialize(map_TopoDS_Shell);it_shell.More();it_shell.Next())
151  {
152  if(est_compris_dans(it_shell.Value(),box_inclusion,precision))
153  {
154  brep_builder.Add(Compound_inclusion,it_shell.Value());
155  }
156  else brep_builder.Add(Compound_matrice,it_shell.Value());
157  }
158  TopTools_DataMapOfShapeShape::Iterator it_face;
159  for(it_face.Initialize(map_TopoDS_Face);it_face.More();it_face.Next())
160  {
161  if(est_compris_dans(it_face.Value(),box_inclusion,precision))
162  {
163  brep_builder.Add(Compound_inclusion,it_face.Value());
164  }
165  else brep_builder.Add(Compound_matrice,it_face.Value());
166  }
167  TopTools_DataMapOfShapeShape::Iterator it_wire;
168  for(it_wire.Initialize(map_TopoDS_Wire);it_wire.More();it_wire.Next())
169  {
170  if(est_compris_dans(it_wire.Value(),box_inclusion,precision))
171  {
172  brep_builder.Add(Compound_inclusion,it_wire.Value());
173  }
174  else brep_builder.Add(Compound_matrice,it_wire.Value());
175  }
176  TopTools_DataMapOfShapeShape::Iterator it_edge;
177  for(it_edge.Initialize(map_TopoDS_Edge);it_edge.More();it_edge.Next())
178  {
179  if(est_compris_dans(it_edge.Value(),box_inclusion,precision))
180  {
181  brep_builder.Add(Compound_inclusion,it_edge.Value());
182  }
183  else brep_builder.Add(Compound_matrice,it_edge.Value());
184  }
185  TopTools_DataMapOfShapeShape::Iterator it_vertex;
186  for(it_vertex.Initialize(map_TopoDS_Vertex);it_vertex.More();it_vertex.Next())
187  {
188  if(est_compris_dans(it_vertex.Value(),box_inclusion,precision))
189  {
190  brep_builder.Add(Compound_inclusion,it_vertex.Value());
191  }
192  else brep_builder.Add(Compound_matrice,it_vertex.Value());
193  }
194  }
195  else std::cout << "*** ERREUR : OCC_CG_OP_INCLUSION_MATRICE::construire_forme -> ShapeType!=TopAbs_COMPOUND ***" << std::endl;
196  MG_CG_FORME* forme_inclusion_sortie = OCC_OT_CG::creer_MG_CG_FORME(m_mgcg_modele,
197  Compound_inclusion,
198  occ_fonction_v2017,
200  fusionner_entite_similaire,
201  precision,
202  importer_triangulation,
203  epsilon_triangulation);
204  m_mgcg_modele->ajouter_mgcg_forme(forme_inclusion_sortie);
205  change_mgcg_forme_inclusion_sortie(forme_inclusion_sortie);
206  m_mgcg_modele->mise_a_jout_lien_mg_element_mgcg_forme(forme_inclusion_sortie);
208  Compound_matrice,
209  occ_fonction_v2017,
211  fusionner_entite_similaire,
212  precision,
213  importer_triangulation,
214  epsilon_triangulation);
215  m_mgcg_modele->ajouter_mgcg_forme(forme_matrice_sortie);
216  change_mgcg_forme_matrice_sortie(forme_matrice_sortie);
220  change_etat(MG_CG_OPERATEUR::ETAT_OPERATEUR::CONSTRUIT);
221  return OK;
222 }
223 
224 bool OCC_CG_OP_INCLUSION_MATRICE::est_compris_dans(TopoDS_Shape shape_objet,Bnd_Box box_comparateur,double precision)
225 {
226  Bnd_Box box_objet;
227  BRepBndLib::AddOptimal(shape_objet,box_objet,false);
228  double x0_obj,y0_obj,z0_obj,x1_obj,y1_obj,z1_obj;
229  double x0_comp,y0_comp,z0_comp,x1_comp,y1_comp,z1_comp;
230  box_objet.Get(x0_obj,y0_obj,z0_obj,x1_obj,y1_obj,z1_obj);
231  box_comparateur.Get(x0_comp,y0_comp,z0_comp,x1_comp,y1_comp,z1_comp);
232  if((x0_obj>=(x0_comp-precision)) && (x1_obj<=(x1_comp+precision)))
233  if((y0_obj>=(y0_comp-precision)) && (y1_obj<=(y1_comp+precision)))
234  if((z0_obj>=(z0_comp-precision)) && (z1_obj<=(z1_comp+precision)))
235  return true;
236  return false;
237 
238 
239 
240 }
241 
242 
243 #endif
mg_cg_forme.h
occ_ot_cg.h
MG_CG_OP_INCLUSION_MATRICE::change_mgcg_forme_matrice_sortie
virtual int change_mgcg_forme_matrice_sortie(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_op_inclusion_matrice.cpp:107
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
FAIL
const int FAIL
Definition: mg_definition.h:39
MG_CG_OPERATEUR::change_etat
virtual void change_etat(int etat_operateur)
Definition: mg_cg_operateur.cpp:74
MG_CG_OPERATEUR::m_mgcg_modele
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_operateur.h:81
MG_CG_MODELE::get_epsilon_triangulation
virtual double get_epsilon_triangulation(void)
Definition: mg_cg_modele.cpp:1119
OCC_CG_OP_INCLUSION_MATRICE::OCC_CG_OP_INCLUSION_MATRICE
OCC_CG_OP_INCLUSION_MATRICE(MG_CG_MODELE *mgcg_modele, int semantique, MG_CG_FORME *mgcg_forme_inclusion_entree, MG_CG_FORME *mgcg_forme_matrice_entree)
Definition: occ_cg_op_inclusion_matrice.cpp:30
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
OK
const int OK
Definition: mg_definition.h:38
occ_cg_op_inclusion_matrice.h
MG_CG_MODELE::mise_a_jout_lien_mg_element_mgcg_forme
virtual void mise_a_jout_lien_mg_element_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_modele.cpp:987
OCC_CG_OP_INCLUSION_MATRICE
Definition: occ_cg_op_inclusion_matrice.h:39
MG_CG_MODELE::get_mg_geometrie
virtual MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_cg_modele.cpp:98
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
OCC_CG_OP_INCLUSION_MATRICE::construire
virtual int construire(void)
Definition: occ_cg_op_inclusion_matrice.cpp:67
MG_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_OP_INCLUSION_MATRICE::change_mgcg_forme_inclusion_sortie
virtual int change_mgcg_forme_inclusion_sortie(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_op_inclusion_matrice.cpp:95
MG_CG_MODELE::get_precision
virtual double get_precision(void)
Definition: mg_cg_modele.cpp:1099
OCC_CG_OP_INCLUSION_MATRICE::~OCC_CG_OP_INCLUSION_MATRICE
virtual ~OCC_CG_OP_INCLUSION_MATRICE(void)
Definition: occ_cg_op_inclusion_matrice.cpp:62
MG_CG_MODELE
Definition: mg_cg_modele.h:41
occ_fonction_v2017.h
MG_CG_OP_INCLUSION_MATRICE
Definition: mg_cg_op_inclusion_matrice.h:34
MG_CG_OP_INCLUSION_MATRICE::get_mgcg_forme_inclusion_entree
virtual MG_CG_FORME * get_mgcg_forme_inclusion_entree(void)
Definition: mg_cg_op_inclusion_matrice.cpp:78
mg_cg_modele.h
OCC_CG_OP_INCLUSION_MATRICE::est_compris_dans
bool est_compris_dans(TopoDS_Shape shape_objet, Bnd_Box box_comparateur, double precision)
Definition: occ_cg_op_inclusion_matrice.cpp:224
MG_CG_MODELE::ajouter_mgcg_forme
virtual int ajouter_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_modele.cpp:195
MG_CG_MODELE::get_fusionner_entite_similaire
virtual bool get_fusionner_entite_similaire(void)
Definition: mg_cg_modele.cpp:1089
MG_CG_MODELE::get_importer_triangulation
virtual bool get_importer_triangulation(void)
Definition: mg_cg_modele.cpp:1109
mg_definition.h
MG_CG_OP_INCLUSION_MATRICE::get_mgcg_forme_inclusion_sortie
virtual MG_CG_FORME * get_mgcg_forme_inclusion_sortie(void)
Definition: mg_cg_op_inclusion_matrice.cpp:102
MG_CG_FORME::change_mgcg_operateur_parent
virtual void change_mgcg_operateur_parent(MG_CG_OPERATEUR *mgcg_operateur)
Definition: mg_cg_forme.cpp:91
OCC_FONCTION_V2017
Definition: occ_fonction_v2017.h:104
MG_CG_OP_INCLUSION_MATRICE::get_mgcg_forme_matrice_entree
virtual MG_CG_FORME * get_mgcg_forme_matrice_entree(void)
Definition: mg_cg_op_inclusion_matrice.cpp:90
MG_CG_OP_INCLUSION_MATRICE::get_mgcg_forme_matrice_sortie
virtual MG_CG_FORME * get_mgcg_forme_matrice_sortie(void)
Definition: mg_cg_op_inclusion_matrice.cpp:114
MG_GEOMETRIE::get_occ_fonction
class OCC_FONCTION & get_occ_fonction(void)
Definition: mg_geometrie.cpp:2701