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 
virtual int retirer_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE *mg_element_topologique)
virtual BOITE_3D get_boite_3D(void)
virtual MG_ELEMENT_COTOPOLOGIQUE * get_premier_mg_element_cotopologique(std::map< long, MG_ELEMENT_COTOPOLOGIQUE * >::iterator &it)
virtual void enregistrer(std::ostream &o, double version)
virtual long get_nb_mg_element_cotopologique(void)
std::map< long, MG_ELEMENT_TOPOLOGIQUE * > m_map_mg_element_topologique
virtual int get_type_forme(void)
MG_CG_FORME_MULTIPLE(MG_CG_MODELE *mgcg_modele, int provenance)
virtual int ajouter_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE *mg_element_cotopologique)
virtual MG_ELEMENT_TOPOLOGIQUE * get_premier_mg_element_topologique(std::map< long, MG_ELEMENT_TOPOLOGIQUE * >::iterator &it)
virtual void retirer_tout_mg_element_cotopologique(void)
virtual int retirer_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE *mg_element_cotopologique)
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)
virtual void retirer_tout_mg_element_topologique(void)
virtual int ajouter_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE *mg_element_topologique)
virtual long get_nb_mg_element_topologique(void)
virtual int construire(void)
virtual MG_ELEMENT_COTOPOLOGIQUE * get_suivant_mg_element_cotopologique(std::map< long, MG_ELEMENT_COTOPOLOGIQUE * >::iterator &it)
std::map< long, MG_ELEMENT_COTOPOLOGIQUE * > m_map_mg_element_cotopologique
virtual MG_ELEMENT_TOPOLOGIQUE * get_suivant_mg_element_topologique(std::map< long, MG_ELEMENT_TOPOLOGIQUE * >::iterator &it)
virtual MG_CG_OPERATEUR * get_mgcg_operateur_parent(void)
Definition: mg_cg_forme.cpp:86
virtual MG_CG_OPERATEUR * get_suivant_mgcg_operateur_dependant(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
int m_provenance
Definition: mg_cg_forme.h:90
virtual MG_CG_OPERATEUR * get_premier_mgcg_operateur_dependant(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
std::map< long, MG_CG_OPERATEUR * > m_map_mgcg_operateur_dependant
Definition: mg_cg_forme.h:89
virtual long get_nb_mgcg_operateur_dependant(void)
Definition: mg_cg_forme.cpp:96
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_forme.h:87
virtual bool get_importer_triangulation(void)
virtual double get_precision(void)
virtual bool get_fusionner_entite_similaire(void)
virtual double get_epsilon_triangulation(void)
unsigned long get_id()
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)
virtual void ajouter(X x)
const int OK
Definition: mg_definition.h:38
const int FAIL
Definition: mg_definition.h:39