MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_cg_forme_multiple.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 //####// mg_cg_forme_multiple.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "mg_cg_forme_multiple.h"
23 #include "mg_element_topologique.h"
25 #include "mg_cg_modele.h"
26 #include "mg_cg_operateur.h"
27 #include "ot_geometrie.h"
28 #include "mg_cg_info.h"
30  int provenance): MG_CG_FORME(mgcg_modele,provenance)
31 {
32 
33 }
34 
36  int provenance,
37  int etat,
38  long unsigned int num): MG_CG_FORME(mgcg_modele,provenance,etat,num)
39 {
40 
41 }
42 
44  int provenance,
45  std::vector< MG_ELEMENT_TOPOLOGIQUE* >& vector_mg_element_topologique,
46  std::vector< MG_ELEMENT_COTOPOLOGIQUE* >& vector_mg_element_cotopologique): MG_CG_FORME(mgcg_modele,provenance)
47 {
48  std::vector< MG_ELEMENT_TOPOLOGIQUE* >::iterator it_topo;
49  for(it_topo=vector_mg_element_topologique.begin();it_topo!=vector_mg_element_topologique.end();it_topo++)
50  {
51  m_map_mg_element_topologique.insert(std::pair<long,MG_ELEMENT_TOPOLOGIQUE*>((*it_topo)->get_id(),*it_topo));
52  }
53  std::vector< MG_ELEMENT_COTOPOLOGIQUE* >::iterator it_cotopo;
54  for(it_cotopo=vector_mg_element_cotopologique.begin();it_cotopo!=vector_mg_element_cotopologique.end();it_cotopo++)
55  {
56  m_map_mg_element_cotopologique.insert(std::pair<long,MG_ELEMENT_COTOPOLOGIQUE*>((*it_cotopo)->get_id(),*it_cotopo));
57  }
58 }
59 
61  int provenance,
62  int etat,
63  long unsigned int num,
64  std::vector< MG_ELEMENT_TOPOLOGIQUE* >& vector_mg_element_topologique,
65  std::vector< MG_ELEMENT_COTOPOLOGIQUE* >& vector_mg_element_cotopologique): MG_CG_FORME(mgcg_modele,provenance,etat,num)
66 {
67  std::vector< MG_ELEMENT_TOPOLOGIQUE* >::iterator it_topo;
68  for(it_topo=vector_mg_element_topologique.begin();it_topo!=vector_mg_element_topologique.end();it_topo++)
69  {
70  m_map_mg_element_topologique.insert(std::pair<long,MG_ELEMENT_TOPOLOGIQUE*>((*it_topo)->get_id(),*it_topo));
71  }
72  std::vector< MG_ELEMENT_COTOPOLOGIQUE* >::iterator it_cotopo;
73  for(it_cotopo=vector_mg_element_cotopologique.begin();it_cotopo!=vector_mg_element_cotopologique.end();it_cotopo++)
74  {
75  m_map_mg_element_cotopologique.insert(std::pair<long,MG_ELEMENT_COTOPOLOGIQUE*>((*it_cotopo)->get_id(),*it_cotopo));
76  }
77 }
78 
80 {
81  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
83  {
85  }
86  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
88  {
90  }
91 }
92 
94 {
95 
96 }
97 
99 {
100  return MG_CG_FORME::TYPE_FORME::MULTIPLE;
101 }
102 
104 {
105  return m_map_mg_element_topologique.size();
106 }
107 
109 {
110  std::pair<std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator,bool> p = m_map_mg_element_topologique.insert(std::pair<long,MG_ELEMENT_TOPOLOGIQUE*>(mg_element_topologique->get_id(),mg_element_topologique));
111  if(!p.second) return FAIL;
112  return OK;
113 }
114 
116 {
117  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it;
118  it=m_map_mg_element_topologique.find(mg_element_topologique->get_id());
119  if(it!=m_map_mg_element_topologique.end())
120  {
122  return OK;
123  }
124  return FAIL;
125 }
126 
128 {
130 }
131 
132 MG_ELEMENT_TOPOLOGIQUE* MG_CG_FORME_MULTIPLE::get_premier_mg_element_topologique(std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator& it)
133 {
134  it=m_map_mg_element_topologique.begin();
135  if(it!=m_map_mg_element_topologique.end()) return it->second;
136  else return NULL;
137 }
138 
139 MG_ELEMENT_TOPOLOGIQUE* MG_CG_FORME_MULTIPLE::get_suivant_mg_element_topologique(std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator& it)
140 {
141  it++;
142  if(it!=m_map_mg_element_topologique.end()) return it->second;
143  else return NULL;
144 }
145 
147 {
148  return m_map_mg_element_cotopologique.size();
149 }
151 {
152  std::pair<std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator,bool> p = m_map_mg_element_cotopologique.insert(std::pair<long,MG_ELEMENT_COTOPOLOGIQUE*>(mg_element_cotopologique->get_id(),mg_element_cotopologique));
153  if(!p.second) return FAIL;
154  return OK;
155 }
156 
158 {
159  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it;
160  it=m_map_mg_element_cotopologique.find(mg_element_cotopologique->get_id());
161  if(it!=m_map_mg_element_cotopologique.end())
162  {
164  return OK;
165  }
166  return FAIL;
167 }
168 
170 {
172 }
173 
174 MG_ELEMENT_COTOPOLOGIQUE* MG_CG_FORME_MULTIPLE::get_premier_mg_element_cotopologique(std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator& it)
175 {
177  if(it!=m_map_mg_element_cotopologique.end()) return it->second;
178  else return NULL;
179 }
180 
181 MG_ELEMENT_COTOPOLOGIQUE* MG_CG_FORME_MULTIPLE::get_suivant_mg_element_cotopologique(std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator& it)
182 {
183  it++;
184  if(it!=m_map_mg_element_cotopologique.end()) return it->second;
185  else return NULL;
186 }
187 
189  TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
190  TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
191 {
192  if(m_etat==MG_CG_FORME::ETAT_FORME::CONSTRUITE)
193  {
194  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
196  {
197  map_mg_element_topologique->ajouter(ele);
198  OT_GEOMETRIE::get_map_mg_element_sous_jacent(ele,map_mg_element_topologique,map_mg_element_cotopologique,map_mg_element_geometrique);
199  }
200  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
202  {
203  map_mg_element_cotopologique->ajouter(ele);
204  OT_GEOMETRIE::get_map_mg_element_sous_jacent(ele,map_mg_element_topologique,map_mg_element_cotopologique,map_mg_element_geometrique);
205  }
206  }
207 }
208 
210 {
211  BOITE_3D boite;
212  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
214 
215  for(;ele!=NULL;ele=get_suivant_mg_element_topologique(it_topo))
216  {
217 
218  }
219 return boite;
220 
221 }
222 
224 {
229 }
230 
231 int MG_CG_FORME_MULTIPLE::construire(bool fusionner_entite_similaire,
232  double precision,
233  bool importer_triangulation,
234  double epsilon_triangulation)
235 {
236  std::cout << "*** ATTENTION ! MG_CG_FORME_MULTIPLE::construire : MG_CG_FORME construite par MG_CG_OPERATEUR m_mgcg_operateur_parent ***" << std::endl;
237  return FAIL;
238 }
239 
240 void MG_CG_FORME_MULTIPLE::enregistrer(std::ostream& o, double version)
241 {
242  o << "%" << get_id()
243  << "=MG_CG_FORME_MULTIPLE("
244  << "$"<< m_mgcg_modele->get_id()
245  << "," << m_provenance
246  << "," << m_etat;
247  o << "," << get_nb_mg_element_topologique()
248  << ",(";
249  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
251  {
252  o << "$" << ele->get_id();
253  if(it_topo!=--m_map_mg_element_topologique.end()) o << ",";
254  }
255  o << ")";
256  o << "," << get_nb_mg_element_cotopologique()
257  << ",(";
258  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
260  {
261  o << "$" << ele->get_id();
262  if(it_cotopo!=--m_map_mg_element_cotopologique.end()) o << ",";
263  }
264  o << ")";
265  o << ",$" << get_mgcg_operateur_parent()->get_id();
266  o << "," << get_nb_mgcg_operateur_dependant()
267  << ",(";
268  std::map<long,MG_CG_OPERATEUR*>::iterator it_op;
269  for(MG_CG_OPERATEUR* mgcg_op = get_premier_mgcg_operateur_dependant(it_op);mgcg_op!=NULL;mgcg_op=get_suivant_mgcg_operateur_dependant(it_op))
270  {
271  o << "$" << mgcg_op->get_id();
272  if(it_op!=--m_map_mgcg_operateur_dependant.end()) o << ",";
273  }
274  o << "));" << std::endl;
275  enregistrer_infos(o,version);
276 }
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
ot_geometrie.h
MG_CG_FORME_MULTIPLE::construire
virtual int construire(void)
Definition: mg_cg_forme_multiple.cpp:223
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
TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * >
FAIL
const int FAIL
Definition: mg_definition.h:39
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_CG_FORME_MULTIPLE::get_boite_3D
virtual BOITE_3D get_boite_3D(void)
Definition: mg_cg_forme_multiple.cpp:209
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_MULTIPLE::retirer_mg_element_cotopologique
virtual int retirer_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE *mg_element_cotopologique)
Definition: mg_cg_forme_multiple.cpp:157
MG_CG_MODELE::get_epsilon_triangulation
virtual double get_epsilon_triangulation(void)
Definition: mg_cg_modele.cpp:1119
MG_CG_FORME_MULTIPLE::m_map_mg_element_topologique
std::map< long, MG_ELEMENT_TOPOLOGIQUE * > m_map_mg_element_topologique
Definition: mg_cg_forme_multiple.h:83
MG_CG_FORME_MULTIPLE::retirer_tout_mg_element_cotopologique
virtual void retirer_tout_mg_element_cotopologique(void)
Definition: mg_cg_forme_multiple.cpp:169
MG_CG_FORME::get_premier_mgcg_operateur_dependant
virtual MG_CG_OPERATEUR * get_premier_mgcg_operateur_dependant(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
Definition: mg_cg_forme.cpp:125
OK
const int OK
Definition: mg_definition.h:38
MG_CG_FORME::m_provenance
int m_provenance
Definition: mg_cg_forme.h:90
MG_CG_FORME::m_map_mgcg_operateur_dependant
std::map< long, MG_CG_OPERATEUR * > m_map_mgcg_operateur_dependant
Definition: mg_cg_forme.h:89
MG_CG_FORME_MULTIPLE::get_mg_element
virtual void get_mg_element(TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *map_mg_element_topologique, TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE * > *map_mg_element_cotopologique, TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE * > *map_mg_element_geometrique)
Definition: mg_cg_forme_multiple.cpp:188
mg_cg_operateur.h
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_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
MG_CG_FORME_MULTIPLE::m_map_mg_element_cotopologique
std::map< long, MG_ELEMENT_COTOPOLOGIQUE * > m_map_mg_element_cotopologique
Definition: mg_cg_forme_multiple.h:84
MG_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_OPERATEUR
Definition: mg_cg_operateur.h:34
MG_CG_MODELE::get_precision
virtual double get_precision(void)
Definition: mg_cg_modele.cpp:1099
MG_CG_FORME_MULTIPLE::get_nb_mg_element_topologique
virtual long get_nb_mg_element_topologique(void)
Definition: mg_cg_forme_multiple.cpp:103
MG_CG_FORME::m_mgcg_modele
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_forme.h:87
MG_CG_MODELE
Definition: mg_cg_modele.h:41
MG_CG_FORME_MULTIPLE::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_cg_forme_multiple.cpp:240
MG_CG_FORME_MULTIPLE::~MG_CG_FORME_MULTIPLE
virtual ~MG_CG_FORME_MULTIPLE()
Definition: mg_cg_forme_multiple.cpp:93
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
mg_cg_modele.h
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::get_mgcg_operateur_parent
virtual MG_CG_OPERATEUR * get_mgcg_operateur_parent(void)
Definition: mg_cg_forme.cpp:86
mg_cg_forme_multiple.h
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
BOITE_3D
Definition: ot_boite_3d.h:27
MG_CG_MODELE::get_fusionner_entite_similaire
virtual bool get_fusionner_entite_similaire(void)
Definition: mg_cg_modele.cpp:1089
mg_cg_info.h
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
MG_CG_FORME_MULTIPLE::get_type_forme
virtual int get_type_forme(void)
Definition: mg_cg_forme_multiple.cpp:98
MG_CG_FORME_MULTIPLE::get_nb_mg_element_cotopologique
virtual long get_nb_mg_element_cotopologique(void)
Definition: mg_cg_forme_multiple.cpp:146
MG_CG_FORME_MULTIPLE::retirer_mg_element_topologique
virtual int retirer_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE *mg_element_topologique)
Definition: mg_cg_forme_multiple.cpp:115
MG_CG_MODELE::get_importer_triangulation
virtual bool get_importer_triangulation(void)
Definition: mg_cg_modele.cpp:1109
mg_element_topologique.h
MG_CG_FORME::get_nb_mgcg_operateur_dependant
virtual long get_nb_mgcg_operateur_dependant(void)
Definition: mg_cg_forme.cpp:96
MG_CG_FORME::get_suivant_mgcg_operateur_dependant
virtual MG_CG_OPERATEUR * get_suivant_mgcg_operateur_dependant(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
Definition: mg_cg_forme.cpp:133
MG_CG_FORME_MULTIPLE::MG_CG_FORME_MULTIPLE
MG_CG_FORME_MULTIPLE(MG_CG_MODELE *mgcg_modele, int provenance)
Definition: mg_cg_forme_multiple.cpp:29
mg_element_cotopologique.h
OT_GEOMETRIE::get_map_mg_element_sous_jacent
static void get_map_mg_element_sous_jacent(MG_SOMMET *sommet, TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *map_mg_element_topologique, TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE * > *map_mg_element_cotopologique, TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE * > *map_mg_element_geometrique)
Definition: ot_geometrie.cpp:641
MG_CG_FORME::m_etat
int m_etat
Definition: mg_cg_forme.h:91