MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_cg_modele.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_modele.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "mg_cg_modele.h"
23 
24 #include "mg_gestionnaire.h"
25 #include "ot_geometrie.h"
26 #include "mg_geometrie.h"
27 #include "mg_sous_geometrie.h"
28 
29 
30 #include "mg_cg_assemblage.h"
31 
32 #include "mg_cg_forme.h"
33 #include "mg_cg_forme_volume.h"
35 #include "mg_cg_forme_multiple.h"
36 
37 #include "mg_cg_operateur.h"
38 
39 #include "mg_cg_groupe_forme.h"
40 
41 MG_CG_MODELE::MG_CG_MODELE(MG_GESTIONNAIRE* mg_gestionnaire, std::string nom_mgcg_modele, MG_GEOMETRIE* mg_geometrie): MG_CONSTRUCTION_GEOMETRIQUE(),
42  m_mg_gestionnaire(mg_gestionnaire),
43  m_nom_mgcg_modele(nom_mgcg_modele),
44  m_mg_geometrie(mg_geometrie)
45 {
50 }
51 
52 MG_CG_MODELE::MG_CG_MODELE(MG_GESTIONNAIRE* mg_gestionnaire, std::string nom_mgcg_modele, MG_GEOMETRIE* mg_geometrie, unsigned long num): MG_CONSTRUCTION_GEOMETRIQUE(num),
53  m_mg_gestionnaire(mg_gestionnaire),
54  m_nom_mgcg_modele(nom_mgcg_modele),
55  m_mg_geometrie(mg_geometrie)
56 {
58 }
59 
61 {
63  std::map<long,MG_CG_FORME*>::iterator it;
64  for(it=m_map_mgcg_forme.begin();it!=m_map_mgcg_forme.end();it++)
65  {
66  MG_CG_FORME* forme = it->second;
67  delete forme;
68  }
69  m_map_mgcg_forme.clear();
71 }
72 
73 void MG_CG_MODELE::active_affichagage(FONCTION_AFFICHAGE* fonction_affichage)
74 {
75  m_fonction_affichage=fonction_affichage;
76 }
77 
78 void MG_CG_MODELE::affiche(char* message)
79 {
80  if(m_fonction_affichage!=NULL) m_fonction_affichage(message);
81 }
82 
84 {
85  return m_mg_gestionnaire;
86 }
87 
89 {
90  m_mg_gestionnaire=mg_gestionnaire;
91 }
92 
94 {
95  m_mg_geometrie=mg_geometrie;
96 }
97 
99 {
100  return m_mg_geometrie;
101 }
102 
104 {
105  return m_map_mgcg_operateur.size();
106 }
107 
108 void MG_CG_MODELE::change_nom_mgcg_modele(std::string nom_mgcg_modele)
109 {
110  m_nom_mgcg_modele=nom_mgcg_modele;
111 }
112 
114 {
115  return m_nom_mgcg_modele;
116 }
117 
119 {
120  m_mg_gestionnaire->recherche_bonid(*mgcg_operateur);
121  std::pair<std::map<long,MG_CG_OPERATEUR*>::iterator,bool> p=m_map_mgcg_operateur.insert(std::pair<long,MG_CG_OPERATEUR*>(mgcg_operateur->get_id(),mgcg_operateur));
122  if (!p.second)
123  return FAIL;
124  mgcg_operateur->change_mgcg_modele(this);
125  ajouter_objet_sequence_construction(mgcg_operateur);
126  return OK;
127 }
128 
129 int MG_CG_MODELE::ajouter_mgcg_operateur_avant(MG_CG_OPERATEUR* mgcg_operateur, MG_CONSTRUCTION_GEOMETRIQUE* objet_avant)
130 {
131  m_mg_gestionnaire->recherche_bonid(*mgcg_operateur);
132  std::pair<std::map<long,MG_CG_OPERATEUR*>::iterator,bool> p=m_map_mgcg_operateur.insert(std::pair<long,MG_CG_OPERATEUR*>(mgcg_operateur->get_id(),mgcg_operateur));
133  if (!p.second)
134  return FAIL;
135  mgcg_operateur->change_mgcg_modele(this);
136  ajouter_objet_sequence_construction_avant(mgcg_operateur,objet_avant);
137  return OK;
138 }
139 
140 
142 {
143  std::map<long,MG_CG_OPERATEUR*>::iterator it;
144  it=m_map_mgcg_operateur.find(id);
145  if(it!=m_map_mgcg_operateur.end())
146  {
148  delete it->second;
149  m_map_mgcg_operateur.erase(it);
150  }
151  else return FAIL;
152  return OK;
153 }
154 
156 {
157  std::map<long,MG_CG_OPERATEUR*>::iterator it;
158  for(it=m_map_mgcg_operateur.begin();it!=m_map_mgcg_operateur.end();it++)
159  {
160  delete it->second;
161  }
162  m_map_mgcg_operateur.clear();
163 }
164 
165 MG_CG_OPERATEUR* MG_CG_MODELE::get_premier_mgcg_operateur(std::map< long, MG_CG_OPERATEUR* >::iterator& it)
166 {
167  it=m_map_mgcg_operateur.begin();
168  if(it==m_map_mgcg_operateur.end())
169  return NULL;
170  return it->second;
171 }
172 MG_CG_OPERATEUR* MG_CG_MODELE::get_suivant_mgcg_operateur(std::map< long, MG_CG_OPERATEUR* >::iterator& it)
173 {
174  it++;
175  if(it==m_map_mgcg_operateur.end())
176  return NULL;
177  return it->second;
178 }
179 
181 {
182  std::map<long,MG_CG_OPERATEUR*>::iterator it=m_map_mgcg_operateur.find(id);
183  if (it==m_map_mgcg_operateur.end())
184  {
185  return NULL;
186  }
187  return ((*it).second);
188 }
189 
191 {
192  return m_map_mgcg_forme.size();
193 }
194 
196 {
197  m_mg_gestionnaire->recherche_bonid(*mgcg_forme);
198  std::pair<std::map<long,MG_CG_FORME*>::iterator,bool> p=m_map_mgcg_forme.insert(std::pair<long,MG_CG_FORME*>(mgcg_forme->get_id(),mgcg_forme));
199  if (!p.second)
200  return FAIL;
201  mgcg_forme->change_mgcg_modele(this);
203  return OK;
204 }
205 
206 int MG_CG_MODELE::ajouter_mgcg_forme_avant(MG_CG_FORME* mgcg_forme, MG_CONSTRUCTION_GEOMETRIQUE* objet_avant)
207 {
208  m_mg_gestionnaire->recherche_bonid(*mgcg_forme);
209  std::pair<std::map<long,MG_CG_FORME*>::iterator,bool> p=m_map_mgcg_forme.insert(std::pair<long,MG_CG_FORME*>(mgcg_forme->get_id(),mgcg_forme));
210  if (!p.second)
211  return FAIL;
212  mgcg_forme->change_mgcg_modele(this);
213  ajouter_objet_sequence_construction_avant(mgcg_forme,objet_avant);
214  return OK;
215 }
216 
217 int MG_CG_MODELE::remplacer_mgcg_forme(MG_CG_FORME* mgcg_forme_nouvelle, MG_CG_FORME* mgcg_forme_ancienne)
218 {
219  if(ajouter_mgcg_forme_avant(mgcg_forme_nouvelle,mgcg_forme_ancienne)!=OK) return FAIL;
220  mgcg_forme_nouvelle->change_mgcg_operateur_parent(mgcg_forme_ancienne->get_mgcg_operateur_parent());
221  std::map<long,MG_CG_OPERATEUR*>::iterator it_operateur;
222  for(MG_CG_OPERATEUR* operateur=mgcg_forme_ancienne->get_premier_mgcg_operateur_dependant(it_operateur);operateur!=NULL;operateur=mgcg_forme_ancienne->get_suivant_mgcg_operateur_dependant(it_operateur))
223  {
224  mgcg_forme_nouvelle->ajouter_mgcg_operateur_dependant(operateur);
225  }
226  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it_assemblage;
227  for(MG_CG_ASSEMBLAGE* assemblage=get_premier_mgcg_assemblage(it_assemblage);assemblage!=NULL;assemblage=get_suivant_mgcg_assemblage(it_assemblage))
228  {
229  if(assemblage->get_mgcg_formeid(mgcg_forme_ancienne->get_id())!=NULL)
230  {
231  assemblage->retirer_mgcg_formeid(mgcg_forme_ancienne->get_id());
232  assemblage->ajouter_mgcg_forme(mgcg_forme_nouvelle);
233  }
234  }
235  std::map<long,MG_CG_GROUPE_FORME*>::iterator it_groupe_forme;
236  for(MG_CG_GROUPE_FORME* groupe_forme=get_premier_mgcg_groupe_forme(it_groupe_forme);groupe_forme!=NULL;groupe_forme=get_suivant_mgcg_groupe_forme(it_groupe_forme))
237  {
238  if(groupe_forme->get_mgcg_forme(mgcg_forme_ancienne->get_id())!=NULL)
239  {
240  groupe_forme->retirer_mgcg_forme(mgcg_forme_ancienne);
241  groupe_forme->ajouter_mgcg_forme(mgcg_forme_nouvelle);
242  }
243  }
244  supprimer_mgcg_formeid(mgcg_forme_ancienne->get_id());
245  return 0;
246 }
247 
248 int MG_CG_MODELE::supprimer_mgcg_formeid(long int id,bool avec_mg_element)
249 {
250  std::map<long,MG_CG_FORME*>::iterator it;
251  it=m_map_mgcg_forme.find(id);
252  if(it!=m_map_mgcg_forme.end())
253  {
254  MG_CG_FORME* forme = it->second;
255  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it_assemblage;
256  for(MG_CG_ASSEMBLAGE* assemblage=get_premier_mgcg_assemblage(it_assemblage);assemblage!=NULL;assemblage=get_suivant_mgcg_assemblage(it_assemblage))
257  {
258  if(assemblage->get_mgcg_formeid(forme->get_id())!=NULL) assemblage->retirer_mgcg_formeid(forme->get_id());
259  }
260  std::map<long,MG_CG_GROUPE_FORME*>::iterator it_groupe_forme;
261  for(MG_CG_GROUPE_FORME* groupe_forme=get_premier_mgcg_groupe_forme(it_groupe_forme);groupe_forme!=NULL;groupe_forme=get_suivant_mgcg_groupe_forme(it_groupe_forme))
262  {
263  if(groupe_forme->get_mgcg_forme(forme->get_id())!=NULL) groupe_forme->retirer_mgcg_forme(forme);
264  }
265  m_map_mgcg_forme.erase(it);
268 
269  delete forme;
270  return OK;
271  }
272  else return FAIL;
273 }
274 
275 void MG_CG_MODELE::supprimer_tout_mgcg_forme(bool avec_mg_element)
276 {
277  std::map<long,MG_CG_FORME*>::iterator it;
278  for(it=m_map_mgcg_forme.begin();it!=m_map_mgcg_forme.end();it++)
279  {
280  MG_CG_FORME* forme = it->second;
281  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it_assemblage;
282  for(MG_CG_ASSEMBLAGE* assemblage=get_premier_mgcg_assemblage(it_assemblage);assemblage!=NULL;assemblage=get_suivant_mgcg_assemblage(it_assemblage))
283  {
284  if(assemblage->get_mgcg_formeid(forme->get_id())!=NULL) assemblage->retirer_mgcg_formeid(forme->get_id());
285  }
286  std::map<long,MG_CG_GROUPE_FORME*>::iterator it_groupe_forme;
287  for(MG_CG_GROUPE_FORME* groupe_forme=get_premier_mgcg_groupe_forme(it_groupe_forme);groupe_forme!=NULL;groupe_forme=get_suivant_mgcg_groupe_forme(it_groupe_forme))
288  {
289  if(groupe_forme->get_mgcg_forme(forme->get_id())!=NULL) groupe_forme->retirer_mgcg_forme(forme);
290  }
293  delete forme;
294  }
295  m_map_mgcg_forme.clear();
296 }
297 
299 {
300  std::map<long,MG_CG_FORME*>::iterator it=m_map_mgcg_forme.find(id);
301  if (it==m_map_mgcg_forme.end())
302  {
303  return NULL;
304  }
305  return ((*it).second);
306 }
307 
308 MG_CG_FORME* MG_CG_MODELE::get_premiere_mgcg_forme(std::map< long, MG_CG_FORME* >::iterator& it)
309 {
310  it=m_map_mgcg_forme.begin();
311  if(it==m_map_mgcg_forme.end())
312  return NULL;
313  return it->second;
314 }
315 
316 MG_CG_FORME* MG_CG_MODELE::get_suivante_mgcg_forme(std::map< long, MG_CG_FORME* >::iterator& it)
317 {
318  it++;
319  if(it==m_map_mgcg_forme.end())
320  return NULL;
321  return it->second;
322 }
323 
325 {
326  return m_map_mgcg_assemblage.size();
327 }
328 
330 {
331  m_mg_gestionnaire->recherche_bonid(*mgcg_assemblage);
332  std::pair<std::map<long,MG_CG_ASSEMBLAGE*>::iterator,bool> p=m_map_mgcg_assemblage.insert(std::pair<long,MG_CG_ASSEMBLAGE*>(mgcg_assemblage->get_id(),mgcg_assemblage));
333  if (!p.second)
334  return FAIL;
335  return OK;
336 }
337 
339 {
340  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it;
341  it=m_map_mgcg_assemblage.find(id);
342  if(it!=m_map_mgcg_assemblage.end())
343  {
344  MG_CG_ASSEMBLAGE* assemblage = it->second;
345  m_map_mgcg_assemblage.erase(it);
346  delete assemblage;
347  return OK;
348  it++;
349  }
350  else return FAIL;
351 }
352 
354 {
355  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it;
356  for(it=m_map_mgcg_assemblage.begin();it!=m_map_mgcg_assemblage.end();it++)
357  {
358  MG_CG_ASSEMBLAGE* assemblage = it->second;
359  delete assemblage;
360  }
361  m_map_mgcg_assemblage.clear();
362 }
363 
364 MG_CG_ASSEMBLAGE* MG_CG_MODELE::get_premier_mgcg_assemblage(std::map< long, MG_CG_ASSEMBLAGE* >::iterator& it)
365 {
366  it=m_map_mgcg_assemblage.begin();
367  if(it==m_map_mgcg_assemblage.end())
368  return NULL;
369  return it->second;
370 }
371 
372 MG_CG_ASSEMBLAGE* MG_CG_MODELE::get_suivant_mgcg_assemblage(std::map< long, MG_CG_ASSEMBLAGE* >::iterator& it)
373 {
374  it++;
375  if(it==m_map_mgcg_assemblage.end())
376  return NULL;
377  return it->second;
378 }
379 
381 {
382  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it=m_map_mgcg_assemblage.find(id);
383  if (it==m_map_mgcg_assemblage.end())
384  {
385  return NULL;
386  }
387  return ((*it).second);
388 }
389 
391 {
393 }
394 
395 void MG_CG_MODELE::ajouter_objet_sequence_construction(MG_CONSTRUCTION_GEOMETRIQUE* objet)
396 {
397  m_vector_objet_sequence_construction.push_back(objet);
398 }
399 
400 int MG_CG_MODELE::ajouter_objet_sequence_construction_avant(MG_CONSTRUCTION_GEOMETRIQUE* objet, MG_CONSTRUCTION_GEOMETRIQUE* objet_avant)
401 {
402  std::vector<MG_CONSTRUCTION_GEOMETRIQUE*>::iterator it;
404  while(it!=m_vector_objet_sequence_construction.end())
405  {
406  if(*it==objet_avant)
407  {
408  m_vector_objet_sequence_construction.insert(it,objet);
409  return OK;
410  }
411  it++;
412  }
413  return FAIL;
414 }
415 
416 MG_CONSTRUCTION_GEOMETRIQUE* MG_CG_MODELE::get_premier_objet_sequence_construction(std::vector< MG_CONSTRUCTION_GEOMETRIQUE* >::iterator& it)
417 {
419  if(it==m_vector_objet_sequence_construction.end()) return NULL;
420  else return *it;
421 }
422 
423 MG_CONSTRUCTION_GEOMETRIQUE* MG_CG_MODELE::get_suivant_objet_sequence_construction(std::vector< MG_CONSTRUCTION_GEOMETRIQUE* >::iterator& it)
424 {
425  it++;
426  if(it==m_vector_objet_sequence_construction.end()) return NULL;
427  else return *it;
428 }
429 
430 int MG_CG_MODELE::retirer_objet_sequence_construction(MG_CONSTRUCTION_GEOMETRIQUE* objet)
431 {
432  std::vector<MG_CONSTRUCTION_GEOMETRIQUE*>::iterator it;
434  while(it!=m_vector_objet_sequence_construction.end())
435  {
436  if(*it==objet)
437  {
439  return OK;
440  }
441  it++;
442  }
443  return FAIL;
444 }
445 
447 {
449 }
450 
452 {
453  return m_map_groupe_forme.size();
454 }
455 
457 {
458  m_mg_gestionnaire->recherche_bonid(*mgcg_groupe_forme);
459  std::pair<std::map<long,MG_CG_GROUPE_FORME*>::iterator,bool> p=m_map_groupe_forme.insert(std::pair<long,MG_CG_GROUPE_FORME*>(mgcg_groupe_forme->get_id(),mgcg_groupe_forme));
460  if (!p.second)
461  return FAIL;
462  return OK;
463 }
464 
466 {
467  std::map<long,MG_CG_GROUPE_FORME*>::iterator it;
468  it=m_map_groupe_forme.find(mgcg_groupe_forme->get_id());
469  if(it!=m_map_groupe_forme.end())
470  {
471  m_map_groupe_forme.erase(it);
472  delete mgcg_groupe_forme;
473  return OK;
474  }
475  else return FAIL;
476 }
477 
478 MG_CG_GROUPE_FORME* MG_CG_MODELE::get_premier_mgcg_groupe_forme(std::map< long, MG_CG_GROUPE_FORME* >::iterator& it)
479 {
480  it=m_map_groupe_forme.begin();
481  if(it==m_map_groupe_forme.end())
482  return NULL;
483  return it->second;
484 }
485 
486 MG_CG_GROUPE_FORME* MG_CG_MODELE::get_suivant_mgcg_groupe_forme(std::map< long, MG_CG_GROUPE_FORME* >::iterator& it)
487 {
488  it++;
489  if(it==m_map_groupe_forme.end())
490  return NULL;
491  return it->second;
492 }
493 
495 {
496  std::map<long,MG_CG_GROUPE_FORME*>::iterator it=m_map_groupe_forme.find(id);
497  if (it==m_map_groupe_forme.end())
498  {
499  return NULL;
500  }
501  return ((*it).second);
502 }
503 
505 {
506  std::map<long,MG_CG_GROUPE_FORME*>::iterator it=m_map_groupe_forme.begin();
507  MG_CG_GROUPE_FORME* groupe_forme=NULL;
508  while(groupe_forme==NULL && it!=m_map_groupe_forme.end())
509  {
510  if(it->second->get_nom()==nom)
511  {
512  groupe_forme=it->second;
513  return groupe_forme;
514  }
515  it++;
516  }
517  return NULL;
518 }
519 
520 
521 void MG_CG_MODELE::enregistrer(std::ostream& o, double version)
522 {
523  o << "%" << get_id()
524  << "=MG_CG_MODELE("
526  << ",$" << m_mg_geometrie->get_id()
528  << "," << m_importer_triangulation
529  << "," << m_epsilon_triangulation
530  << ");" << std::endl;
531  enregistrer_infos(o,version);
532  std::vector<MG_CONSTRUCTION_GEOMETRIQUE*>::iterator it_objet;
533  for(MG_CONSTRUCTION_GEOMETRIQUE* objet=get_premier_objet_sequence_construction(it_objet);objet!=NULL;objet=get_suivant_objet_sequence_construction(it_objet))
534  {
535  objet->enregistrer(o,version);
536  }
537  std::map<long,MG_CG_ASSEMBLAGE*>::iterator it_assemblage;
538  for(MG_CG_ASSEMBLAGE* assemblage = get_premier_mgcg_assemblage(it_assemblage);assemblage!=NULL;assemblage=get_suivant_mgcg_assemblage(it_assemblage))
539  {
540  assemblage->enregistrer(o,version);
541  }
542  std::map<long,MG_CG_GROUPE_FORME*>::iterator it_groupe_forme;
543  for(MG_CG_GROUPE_FORME* groupe_forme=get_premier_mgcg_groupe_forme(it_groupe_forme);groupe_forme!=NULL;groupe_forme=get_suivant_mgcg_groupe_forme(it_groupe_forme))
544  {
545  groupe_forme->enregistrer(o,version);
546  }
547 
548 }
549 
550 
551 void MG_CG_MODELE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
552 {
553 
554 }
555 
557 {
558  return TYPE_MG_CONSTRUCTION_GEOMETRIQUE::MGCG_MODELE;
559 }
560 
562 {
563  TPL_MAP_ENTITE<MG_IDENTIFICATEUR*> map_id_present;
564  TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_mg_element_topologique;
565  TPL_MAP_ENTITE<MG_ELEMENT_COTOPOLOGIQUE*> map_mg_element_cotopologique;
566  TPL_MAP_ENTITE<MG_ELEMENT_GEOMETRIQUE*> map_mg_element_geometrique;
567  std::map<long,MG_CG_FORME*>::iterator it_forme;
568  for(MG_CG_FORME* mgcg_forme=get_premiere_mgcg_forme(it_forme);mgcg_forme!=NULL;mgcg_forme=get_suivante_mgcg_forme(it_forme))
569  {
570  switch(mgcg_forme->get_type_forme())
571  {
572  case MG_CG_FORME::TYPE_FORME::MULTIPLE:
573  {
574  MG_CG_FORME_MULTIPLE* mgcg_forme_multiple = (MG_CG_FORME_MULTIPLE*)mgcg_forme;
575  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
576  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))
577  {
578  map_mg_element_topologique.ajouter(ele);
580  &map_mg_element_topologique,
581  &map_mg_element_cotopologique,
582  &map_mg_element_geometrique);
583  }
584  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
585  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))
586  {
587  map_mg_element_cotopologique.ajouter(ele);
589  &map_mg_element_topologique,
590  &map_mg_element_cotopologique,
591  &map_mg_element_geometrique);
592  }
593  break;
594  }
595  case MG_CG_FORME::TYPE_FORME::MULTI_VOLUME:
596  {
597  MG_CG_FORME_MULTI_VOLUME* mgcg_forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)mgcg_forme;
598  std::map<long,MG_VOLUME*>::iterator it_volume;
599  for(MG_VOLUME* volume=mgcg_forme_multi_volume->get_premier_mg_volume(it_volume);volume!=NULL;volume=mgcg_forme_multi_volume->get_suivant_mg_volume(it_volume))
600  {
601  map_mg_element_topologique.ajouter(volume);
603  &map_mg_element_topologique,
604  &map_mg_element_cotopologique,
605  &map_mg_element_geometrique);
606  }
607  break;
608  }
609  case MG_CG_FORME::TYPE_FORME::VOLUME:
610  {
611  MG_CG_FORME_VOLUME* mgcg_forme_volume = (MG_CG_FORME_VOLUME*)mgcg_forme;
612  map_mg_element_topologique.ajouter(mgcg_forme_volume->get_mg_volume());
614  &map_mg_element_topologique,
615  &map_mg_element_cotopologique,
616  &map_mg_element_geometrique);
617  break;
618  }
619  }
620  }
621 
622  LISTE_MG_POINT::iterator it_mg_point;
623  LISTE_MG_COURBE::iterator it_mg_courbe;
624  LISTE_MG_SURFACE::iterator it_mg_surface;
625  LISTE_MG_SOMMET::iterator it_mg_sommet;
626  LISTE_MG_COSOMMET::iterator it_mg_cosommet;
627  LISTE_MG_ARETE::iterator it_mg_arete;
628  LISTE_MG_COARETE::iterator it_mg_coarete;
629  LISTE_MG_BOUCLE::iterator it_mg_boucle;
630  LISTE_MG_FACE::iterator it_mg_face;
631  LISTE_MG_COFACE::iterator it_mg_coface;
632  LISTE_MG_COQUILLE::iterator it_mg_coquille;
633  LISTE_MG_VOLUME::iterator it_mg_volume;
634  LISTE_MG_COQUE::iterator it_mg_coque;
635  LISTE_MG_POUTRE::iterator it_mg_poutre;
636 
637  for(MG_VOLUME* mg_volume=m_mg_geometrie->get_premier_volume(it_mg_volume);mg_volume!=NULL;mg_volume=m_mg_geometrie->get_suivant_volume(it_mg_volume))
638  {
639  if(map_mg_element_topologique.getid(mg_volume->get_id())==NULL) m_mg_geometrie->supprimer_mg_volumeid(mg_volume->get_id());
640  }
641  for(MG_COQUE* mg_coque=m_mg_geometrie->get_premier_coque(it_mg_coque);mg_coque!=NULL;mg_coque=m_mg_geometrie->get_suivant_coque(it_mg_coque))
642  {
643  if(map_mg_element_topologique.getid(mg_coque->get_id())==NULL) m_mg_geometrie->supprimer_mg_coqueid(mg_coque->get_id());
644  }
645  for(MG_POUTRE* mg_poutre=m_mg_geometrie->get_premier_poutre(it_mg_poutre);mg_poutre!=NULL;mg_poutre=m_mg_geometrie->get_suivant_poutre(it_mg_poutre))
646  {
647  if(map_mg_element_topologique.getid(mg_poutre->get_id())==NULL) m_mg_geometrie->supprimer_mg_poutreid(mg_poutre->get_id());
648  }
649  for(MG_COQUILLE* mg_coquille=m_mg_geometrie->get_premier_coquille(it_mg_coquille);mg_coquille!=NULL;mg_coquille=m_mg_geometrie->get_suivant_coquille(it_mg_coquille))
650  {
651  if(map_mg_element_cotopologique.getid(mg_coquille->get_id())==NULL) m_mg_geometrie->supprimer_mg_coquilleid(mg_coquille->get_id());
652  }
653  for(MG_FACE* mg_face=m_mg_geometrie->get_premier_face(it_mg_face);mg_face!=NULL;mg_face=m_mg_geometrie->get_suivant_face(it_mg_face))
654  {
655  if(map_mg_element_topologique.getid(mg_face->get_id())==NULL)
656  {
657  MG_SURFACE* surface = mg_face->get_surface();
658  std::vector<MG_BOUCLE*> vector_boucle_face;
659  for(int i=0;i<mg_face->get_nb_mg_boucle();i++) vector_boucle_face.push_back(mg_face->get_mg_boucle(i));
660  if(m_mg_geometrie->supprimer_mg_faceid(mg_face->get_id())==OK)
661  {
663  for(int i=0;i<vector_boucle_face.size();i++)
664  m_mg_geometrie->supprimer_mg_boucleid(vector_boucle_face.at(i)->get_id());
665  }
666  }
667  }
668  for(MG_ARETE* mg_arete=m_mg_geometrie->get_premier_arete(it_mg_arete);mg_arete!=NULL;mg_arete=m_mg_geometrie->get_suivant_arete(it_mg_arete))
669  {
670  if(map_mg_element_topologique.getid(mg_arete->get_id())==NULL)
671  {
672  MG_COURBE* courbe = mg_arete->get_courbe();
673  if(m_mg_geometrie->supprimer_mg_areteid(mg_arete->get_id())==OK)
675  }
676  }
677  for(MG_SOMMET* mg_sommet=m_mg_geometrie->get_premier_sommet(it_mg_sommet);mg_sommet!=NULL;mg_sommet=m_mg_geometrie->get_suivant_sommet(it_mg_sommet))
678  {
679  if(map_mg_element_topologique.getid(mg_sommet->get_id())==NULL)
680  {
681  MG_POINT* point = mg_sommet->get_point();
682  if(m_mg_geometrie->supprimer_mg_sommetid(mg_sommet->get_id())==OK)
684  }
685  }
686 }
687 
689 {
690  TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_mg_element_topologique;
691  TPL_MAP_ENTITE<MG_ELEMENT_COTOPOLOGIQUE*> map_mg_element_cotopologique;
692  TPL_MAP_ENTITE<MG_ELEMENT_GEOMETRIQUE*> map_mg_element_geometrique;
693  switch(mgcg_forme->get_type_forme())
694  {
695  case MG_CG_FORME::TYPE_FORME::MULTIPLE:
696  {
697  MG_CG_FORME_MULTIPLE* mgcg_forme_multiple = (MG_CG_FORME_MULTIPLE*)mgcg_forme;
698  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
699  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))
700  {
701  map_mg_element_topologique.ajouter(ele);
703  &map_mg_element_topologique,
704  &map_mg_element_cotopologique,
705  &map_mg_element_geometrique);
706  }
707  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
708  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))
709  {
710  map_mg_element_cotopologique.ajouter(ele);
712  &map_mg_element_topologique,
713  &map_mg_element_cotopologique,
714  &map_mg_element_geometrique);
715  }
716  break;
717  }
718  case MG_CG_FORME::TYPE_FORME::MULTI_VOLUME:
719  {
720  MG_CG_FORME_MULTI_VOLUME* mgcg_forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)mgcg_forme;
721  std::map<long,MG_VOLUME*>::iterator it_volume;
722  for(MG_VOLUME* volume=mgcg_forme_multi_volume->get_premier_mg_volume(it_volume);volume!=NULL;volume=mgcg_forme_multi_volume->get_suivant_mg_volume(it_volume))
723  {
724  map_mg_element_topologique.ajouter(volume);
726  &map_mg_element_topologique,
727  &map_mg_element_cotopologique,
728  &map_mg_element_geometrique);
729  }
730  break;
731  }
732  case MG_CG_FORME::TYPE_FORME::VOLUME:
733  {
734  MG_CG_FORME_VOLUME* mgcg_forme_volume = (MG_CG_FORME_VOLUME*)mgcg_forme;
735  map_mg_element_topologique.ajouter(mgcg_forme_volume->get_mg_volume());
737  &map_mg_element_topologique,
738  &map_mg_element_cotopologique,
739  &map_mg_element_geometrique);
740  break;
741  }
742  }
743  TPL_MAP_ENTITE<MG_VOLUME*> map_mg_volume;
744  TPL_MAP_ENTITE<MG_COQUE*> map_mg_coque;
745  TPL_MAP_ENTITE<MG_POUTRE*> map_mg_poutre;
746  TPL_MAP_ENTITE<MG_COQUILLE*> map_mg_coquille;
747  TPL_MAP_ENTITE<MG_COFACE*> map_mg_coface;
748  TPL_MAP_ENTITE<MG_FACE*> map_mg_face;
749  TPL_MAP_ENTITE<MG_SURFACE*> map_mg_surface;
750  TPL_MAP_ENTITE<MG_BOUCLE*> map_mg_boucle;
751  TPL_MAP_ENTITE<MG_COARETE*> map_mg_coarete;
752  TPL_MAP_ENTITE<MG_ARETE*> map_mg_arete;
753  TPL_MAP_ENTITE<MG_COURBE*> map_mg_courbe;
754  TPL_MAP_ENTITE<MG_COSOMMET*> map_mg_cosommet;
755  TPL_MAP_ENTITE<MG_SOMMET*> map_mg_sommet;
756  TPL_MAP_ENTITE<MG_POINT*> map_mg_point;
758  for(MG_ELEMENT_TOPOLOGIQUE* ele=map_mg_element_topologique.get_premier(it_topo);ele!=NULL;ele=map_mg_element_topologique.get_suivant(it_topo))
759  {
760  switch(ele->get_type())
761  {
762  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
763  map_mg_volume.ajouter((MG_VOLUME*)ele); break;
764  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
765  map_mg_coque.ajouter((MG_COQUE*)ele); break;
766  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
767  map_mg_poutre.ajouter((MG_POUTRE*)ele); break;
768  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
769  map_mg_face.ajouter((MG_FACE*)ele); break;
770  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
771  map_mg_arete.ajouter((MG_ARETE*)ele); break;
772  case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
773  map_mg_sommet.ajouter((MG_SOMMET*)ele); break;
774  }
775  }
777  for(MG_ELEMENT_COTOPOLOGIQUE* ele=map_mg_element_cotopologique.get_premier(it_cotopo);ele!=NULL;ele=map_mg_element_cotopologique.get_suivant(it_cotopo))
778  {
779  switch(ele->get_type())
780  {
781  case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
782  map_mg_coquille.ajouter((MG_COQUILLE*)ele);break;
783  case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
784  map_mg_coface.ajouter((MG_COFACE*)ele);break;
785  case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
786  map_mg_boucle.ajouter((MG_BOUCLE*)ele);break;
787  case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
788  map_mg_coarete.ajouter((MG_COARETE*)ele);break;
789  case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
790  map_mg_cosommet.ajouter((MG_COSOMMET*)ele);break;
791  }
792  }
794  for(MG_ELEMENT_GEOMETRIQUE* ele=map_mg_element_geometrique.get_premier(it_geo);ele!=NULL;ele=map_mg_element_geometrique.get_suivant(it_geo))
795  {
796  switch(ele->get_type())
797  {
798  case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
799  map_mg_point.ajouter((MG_POINT*)ele);break;
800  case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
801  map_mg_courbe.ajouter((MG_COURBE*)ele);break;
802  case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
803  map_mg_surface.ajouter((MG_SURFACE*)ele);break;
804  }
805  }
806 
808  for(MG_VOLUME* volume=map_mg_volume.get_premier(it_volume);volume!=NULL;volume=map_mg_volume.get_suivant(it_volume))
809  {
810  std::map<long,long>::iterator f = m_map_nb_repetition.find(volume->get_id());
811  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
812  else
813  {
814  if(f->second==0)
815  {
816  m_map_nb_repetition.erase(f);
817  m_mg_geometrie->supprimer_mg_volumeid(volume->get_id());
818  }
819  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
820  else f->second--;
821  }
822  }
824  for(MG_COQUE* coque=map_mg_coque.get_premier(it_coque);coque!=NULL;coque=map_mg_coque.get_suivant(it_coque))
825  {
826  std::map<long,long>::iterator f = m_map_nb_repetition.find(coque->get_id());
827  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
828  else
829  {
830  if(f->second==0)
831  {
832  m_map_nb_repetition.erase(f);
833  m_mg_geometrie->supprimer_mg_coqueid(coque->get_id());
834  }
835  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
836  else f->second--;
837  }
838  }
840  for(MG_POUTRE* poutre=map_mg_poutre.get_premier(it_poutre);poutre!=NULL;poutre=map_mg_poutre.get_suivant(it_poutre))
841  {
842  std::map<long,long>::iterator f = m_map_nb_repetition.find(poutre->get_id());
843  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
844  else
845  {
846  if(f->second==0)
847  {
848  m_map_nb_repetition.erase(f);
849  m_mg_geometrie->supprimer_mg_poutreid(poutre->get_id());
850  }
851  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
852  else f->second--;
853  }
854  }
856  for(MG_COQUILLE* coquille=map_mg_coquille.get_premier(it_coquille);coquille!=NULL;coquille=map_mg_coquille.get_suivant(it_coquille))
857  {
858  std::map<long,long>::iterator f = m_map_nb_repetition.find(coquille->get_id());
859  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
860  else
861  {
862  if(f->second==0)
863  {
864  m_map_nb_repetition.erase(f);
865  m_mg_geometrie->supprimer_mg_coquilleid(coquille->get_id());
866  }
867  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
868  else f->second--;
869 
870  }
871  }
873  for(MG_FACE* face=map_mg_face.get_premier(it_face);face!=NULL;face=map_mg_face.get_suivant(it_face))
874  {
875  std::map<long,long>::iterator f = m_map_nb_repetition.find(face->get_id());
876  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
877  else
878  {
879  if(f->second==0)
880  {
881  m_map_nb_repetition.erase(f);
882  m_mg_geometrie->supprimer_mg_faceid(face->get_id());
883  }
884  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
885  else f->second--;
886  }
887  }
889  for(MG_SURFACE* surface=map_mg_surface.get_premier(it_surface);surface!=NULL;surface=map_mg_surface.get_suivant(it_surface))
890  {
891  std::map<long,long>::iterator f = m_map_nb_repetition.find(surface->get_id());
892  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
893  else
894  {
895  if(f->second==0)
896  {
897 
898  m_map_nb_repetition.erase(f);
899  m_mg_geometrie->supprimer_mg_surfaceid(surface->get_id());
900  }
901  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
902  else f->second--;
903  }
904  }
906  for(MG_BOUCLE* boucle=map_mg_boucle.get_premier(it_boucle);boucle!=NULL;boucle=map_mg_boucle.get_suivant(it_boucle))
907  {
908  std::map<long,long>::iterator f = m_map_nb_repetition.find(boucle->get_id());
909  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
910  else
911  {
912  if(f->second==0)
913  {
914  m_map_nb_repetition.erase(f);
915  m_mg_geometrie->supprimer_mg_boucleid(boucle->get_id());
916  }
917  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
918  else f->second--;
919  }
920  }
922  for(MG_ARETE* arete=map_mg_arete.get_premier(it_arete);arete!=NULL;arete=map_mg_arete.get_suivant(it_arete))
923  {
924  std::map<long,long>::iterator f = m_map_nb_repetition.find(arete->get_id());
925  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
926  else
927  {
928  if(f->second==0)
929  {
930  m_map_nb_repetition.erase(f);
931  m_mg_geometrie->supprimer_mg_areteid(arete->get_id());
932  }
933  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
934  else f->second--;
935  }
936  }
938  for(MG_COURBE* courbe=map_mg_courbe.get_premier(it_courbe);courbe!=NULL;courbe=map_mg_courbe.get_suivant(it_courbe))
939  {
940  std::map<long,long>::iterator f = m_map_nb_repetition.find(courbe->get_id());
941  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
942  else
943  {
944  if(f->second==0)
945  {
946  m_map_nb_repetition.erase(f);
947  m_mg_geometrie->supprimer_mg_courbeid(courbe->get_id());
948  }
949  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
950  else f->second--;
951  }
952  }
954  for(MG_SOMMET* sommet=map_mg_sommet.get_premier(it_sommet);sommet!=NULL;sommet=map_mg_sommet.get_suivant(it_sommet))
955  {
956  std::map<long,long>::iterator f = m_map_nb_repetition.find(sommet->get_id());
957  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
958  else
959  {
960  if(f->second==0)
961  {
962  m_map_nb_repetition.erase(f);
963  m_mg_geometrie->supprimer_mg_sommetid(sommet->get_id());
964  }
965  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
966  else f->second--;
967  }
968  }
970  for(MG_POINT* point=map_mg_point.get_premier(it_point);point!=NULL;point=map_mg_point.get_suivant(it_point))
971  {
972  std::map<long,long>::iterator f = m_map_nb_repetition.find(point->get_id());
973  if(f==m_map_nb_repetition.end()) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
974  else
975  {
976  if(f->second==0)
977  {
978  m_map_nb_repetition.erase(f);
979  m_mg_geometrie->supprimer_mg_pointid(point->get_id());
980  }
981  else if(f->second<0) std::cerr << "MG_CG_MODELE::supprimer_mg_element_mgcg_forme(MG_CG_FORME* mgcg_forme) --> ERREUR" << std::endl;
982  else f->second--;
983  }
984  }
985 }
986 
988 {
989  TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_mg_element_topologique;
990  TPL_MAP_ENTITE<MG_ELEMENT_COTOPOLOGIQUE*> map_mg_element_cotopologique;
991  TPL_MAP_ENTITE<MG_ELEMENT_GEOMETRIQUE*> map_mg_element_geometrique;
992  switch(mgcg_forme->get_type_forme())
993  {
994  case MG_CG_FORME::TYPE_FORME::MULTIPLE:
995  {
996  MG_CG_FORME_MULTIPLE* mgcg_forme_multiple = (MG_CG_FORME_MULTIPLE*)mgcg_forme;
997  std::map<long,MG_ELEMENT_TOPOLOGIQUE*>::iterator it_topo;
998  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))
999  {
1000  map_mg_element_topologique.ajouter(ele);
1002  &map_mg_element_topologique,
1003  &map_mg_element_cotopologique,
1004  &map_mg_element_geometrique);
1005  }
1006  std::map<long,MG_ELEMENT_COTOPOLOGIQUE*>::iterator it_cotopo;
1007  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))
1008  {
1009  map_mg_element_cotopologique.ajouter(ele);
1011  &map_mg_element_topologique,
1012  &map_mg_element_cotopologique,
1013  &map_mg_element_geometrique);
1014  }
1015  break;
1016  }
1017  case MG_CG_FORME::TYPE_FORME::MULTI_VOLUME:
1018  {
1019  MG_CG_FORME_MULTI_VOLUME* mgcg_forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)mgcg_forme;
1020  std::map<long,MG_VOLUME*>::iterator it_volume;
1021  for(MG_VOLUME* volume=mgcg_forme_multi_volume->get_premier_mg_volume(it_volume);volume!=NULL;volume=mgcg_forme_multi_volume->get_suivant_mg_volume(it_volume))
1022  {
1023  map_mg_element_topologique.ajouter(volume);
1025  &map_mg_element_topologique,
1026  &map_mg_element_cotopologique,
1027  &map_mg_element_geometrique);
1028  }
1029  break;
1030  }
1031  case MG_CG_FORME::TYPE_FORME::VOLUME:
1032  {
1033  MG_CG_FORME_VOLUME* mgcg_forme_volume = (MG_CG_FORME_VOLUME*)mgcg_forme;
1034  map_mg_element_topologique.ajouter(mgcg_forme_volume->get_mg_volume());
1036  &map_mg_element_topologique,
1037  &map_mg_element_cotopologique,
1038  &map_mg_element_geometrique);
1039  break;
1040  }
1041  }
1043  for(MG_ELEMENT_TOPOLOGIQUE* ele=map_mg_element_topologique.get_premier(it_topo);ele!=NULL;ele=map_mg_element_topologique.get_suivant(it_topo))
1044  {
1045  std::map<long,long>::iterator f = m_map_nb_repetition.find(ele->get_id());
1046  if(f==m_map_nb_repetition.end())
1047  {
1048  m_map_nb_repetition.insert(std::pair<long,long>(ele->get_id(),0));
1049  }
1050  else
1051  {
1052  f->second+=1;
1053  }
1054  }
1056  for(MG_ELEMENT_COTOPOLOGIQUE* ele=map_mg_element_cotopologique.get_premier(it_cotopo);ele!=NULL;ele=map_mg_element_cotopologique.get_suivant(it_cotopo))
1057  {
1058  std::map<long,long>::iterator f = m_map_nb_repetition.find(ele->get_id());
1059  if(f==m_map_nb_repetition.end())
1060  {
1061  m_map_nb_repetition.insert(std::pair<long,long>(ele->get_id(),0));
1062  }
1063  else
1064  {
1065  f->second+=1;
1066  }
1067  }
1069  for(MG_ELEMENT_GEOMETRIQUE* ele=map_mg_element_geometrique.get_premier(it_geo);ele!=NULL;ele=map_mg_element_geometrique.get_suivant(it_geo))
1070  {
1071  std::map<long,long>::iterator f = m_map_nb_repetition.find(ele->get_id());
1072  if(f==m_map_nb_repetition.end())
1073  {
1074  m_map_nb_repetition.insert(std::pair<long,long>(ele->get_id(),0));
1075  }
1076  else
1077  {
1078  f->second+=1;
1079  }
1080  }
1081 }
1082 
1083 
1085 {
1087 }
1088 
1090 {
1092 }
1093 
1095 {
1097 }
1098 
1100 {
1102 }
1103 
1105 {
1107 }
1108 
1110 {
1111  return m_importer_triangulation;
1112 }
1113 
1115 {
1117 }
1118 
1120 {
1121  return m_epsilon_triangulation;
1122 }
1123 
1125 {
1126  MG_IDENTIFICATEUR* mg_id=NULL;
1127  mg_id=get_mgcg_formeid(id);
1128  if(mg_id!=NULL) return mg_id;
1129  mg_id=get_mgcg_operateurid(id);
1130  if(mg_id!=NULL) return mg_id;
1131  mg_id=get_mgcg_assemblageid(id);
1132  if(mg_id!=NULL) return mg_id;
1133  mg_id=get_mgcg_groupe_formeid(id);
1134  if(mg_id!=NULL) return mg_id;
1135  return NULL;
1136 }
1137 
virtual MG_VOLUME * get_premier_mg_volume(std::map< long, MG_VOLUME * >::iterator &it)
virtual MG_VOLUME * get_suivant_mg_volume(std::map< long, MG_VOLUME * >::iterator &it)
virtual MG_ELEMENT_COTOPOLOGIQUE * get_premier_mg_element_cotopologique(std::map< long, MG_ELEMENT_COTOPOLOGIQUE * >::iterator &it)
virtual MG_ELEMENT_TOPOLOGIQUE * get_premier_mg_element_topologique(std::map< long, MG_ELEMENT_TOPOLOGIQUE * >::iterator &it)
virtual MG_ELEMENT_COTOPOLOGIQUE * get_suivant_mg_element_cotopologique(std::map< long, MG_ELEMENT_COTOPOLOGIQUE * >::iterator &it)
virtual MG_ELEMENT_TOPOLOGIQUE * get_suivant_mg_element_topologique(std::map< long, MG_ELEMENT_TOPOLOGIQUE * >::iterator &it)
virtual MG_VOLUME * get_mg_volume(void)
virtual MG_CG_OPERATEUR * get_mgcg_operateur_parent(void)
Definition: mg_cg_forme.cpp:86
virtual int ajouter_mgcg_operateur_dependant(MG_CG_OPERATEUR *mgcg_operateur)
virtual MG_CG_OPERATEUR * get_suivant_mgcg_operateur_dependant(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
virtual void change_mgcg_operateur_parent(MG_CG_OPERATEUR *mgcg_operateur)
Definition: mg_cg_forme.cpp:91
virtual void change_mgcg_modele(MG_CG_MODELE *mgcg_modele)
Definition: mg_cg_forme.cpp:56
virtual MG_CG_OPERATEUR * get_premier_mgcg_operateur_dependant(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
virtual int get_type_forme(void)=0
virtual int ajouter_mgcg_assemblage(MG_CG_ASSEMBLAGE *mgcg_assemblage)
MG_CG_GROUPE_FORME * get_mgcg_groupe_forme(std::string nom)
virtual MG_CG_ASSEMBLAGE * get_suivant_mgcg_assemblage(std::map< long, MG_CG_ASSEMBLAGE * >::iterator &it)
virtual int remplacer_mgcg_forme(MG_CG_FORME *mgcg_forme_nouvelle, MG_CG_FORME *mgcg_forme_ancienne)
MG_GESTIONNAIRE * m_mg_gestionnaire
Definition: mg_cg_modele.h:124
virtual int ajouter_mgcg_forme_avant(MG_CG_FORME *mgcg_forme, MG_CONSTRUCTION_GEOMETRIQUE *objet_avant)
virtual MG_CG_OPERATEUR * get_mgcg_operateurid(long id)
virtual int retirer_objet_sequence_construction(MG_CONSTRUCTION_GEOMETRIQUE *objet)
virtual bool get_importer_triangulation(void)
std::map< long, MG_CG_OPERATEUR * > m_map_mgcg_operateur
Definition: mg_cg_modele.h:129
virtual void retirer_tout_objet_sequence_construction(void)
virtual void change_nom_mgcg_modele(std::string nom_mgcg_modele)
std::string m_nom_mgcg_modele
Definition: mg_cg_modele.h:127
std::map< long, long > m_map_nb_repetition
Definition: mg_cg_modele.h:132
virtual void enregistrer(std::ostream &o, double version)
virtual ~MG_CG_MODELE(void)
virtual MG_CG_FORME * get_premiere_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
virtual MG_CG_ASSEMBLAGE * get_premier_mgcg_assemblage(std::map< long, MG_CG_ASSEMBLAGE * >::iterator &it)
MG_CG_MODELE(MG_GESTIONNAIRE *mg_gestionnaire, std::string nom_mgcg_modele, MG_GEOMETRIE *mg_geometrie)
virtual void supprimer_tout_mgcg_operateur(void)
virtual int supprimer_mgcg_assemglageid(long id)
int m_fusionner_entite_similaire
Definition: mg_cg_modele.h:134
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
virtual MG_GESTIONNAIRE * get_mg_gestionnaire(void)
virtual MG_CONSTRUCTION_GEOMETRIQUE * get_premier_objet_sequence_construction(std::vector< MG_CONSTRUCTION_GEOMETRIQUE * >::iterator &it)
virtual int ajouter_mgcg_operateur(MG_CG_OPERATEUR *mgcg_operateur)
virtual MG_CG_OPERATEUR * get_suivant_mgcg_operateur(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
virtual void supprimer_tout_mgcg_forme(bool avec_mg_element=true)
double m_epsilon_triangulation
Definition: mg_cg_modele.h:136
virtual void change_mg_gestionnaire(MG_GESTIONNAIRE *mg_gestionnaire)
virtual void change_epsilon_triangulation(double val)
virtual void change_mg_geometrie(MG_GEOMETRIE *mg_geometrie)
virtual void change_precision(double val)
std::map< long, MG_CG_ASSEMBLAGE * > m_map_mgcg_assemblage
Definition: mg_cg_modele.h:130
void active_affichagage(FONCTION_AFFICHAGE *fonction_affichage)
virtual int ajouter_mgcg_forme(MG_CG_FORME *mgcg_forme)
MG_CG_GROUPE_FORME * get_mgcg_groupe_formeid(long id)
virtual double get_precision(void)
virtual void mise_a_jour_geometrie(void)
virtual MG_CG_OPERATEUR * get_premier_mgcg_operateur(std::map< long, MG_CG_OPERATEUR * >::iterator &it)
virtual long get_nb_mgcg_operateur(void)
virtual void supprimer_mg_element_mgcg_forme(MG_CG_FORME *mgcg_forme)
virtual bool get_fusionner_entite_similaire(void)
virtual void supprimer_tout_mgcg_assemblage(void)
std::map< long, MG_CG_FORME * > m_map_mgcg_forme
Definition: mg_cg_modele.h:128
MG_CG_GROUPE_FORME * get_suivant_mgcg_groupe_forme(std::map< long, MG_CG_GROUPE_FORME * >::iterator &it)
virtual long get_nb_mgcg_assemblage(void)
virtual void ajouter_objet_sequence_construction(MG_CONSTRUCTION_GEOMETRIQUE *objet)
virtual MG_GEOMETRIE * get_mg_geometrie(void)
FONCTION_AFFICHAGE * m_fonction_affichage
Definition: mg_cg_modele.h:126
virtual void change_fusionner_entite_similaire(bool val)
virtual int supprimer_mgcg_groupe_forme(MG_CG_GROUPE_FORME *mgcg_groupe_forme)
virtual MG_CG_FORME * get_suivante_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
virtual int get_type_mg_construction_geometrique(void)
std::map< long, MG_CG_GROUPE_FORME * > m_map_groupe_forme
Definition: mg_cg_modele.h:133
virtual long get_nb_mgcg_forme(void)
virtual void change_importer_triangulation(bool val)
virtual long get_nb_mgcg_groupe_forme(void)
void affiche(char *message)
MG_GEOMETRIE * m_mg_geometrie
Definition: mg_cg_modele.h:125
virtual MG_CG_FORME * get_mgcg_formeid(long id)
virtual MG_CG_ASSEMBLAGE * get_mgcg_assemblageid(long id)
virtual void mise_a_jout_lien_mg_element_mgcg_forme(MG_CG_FORME *mgcg_forme)
virtual int ajouter_objet_sequence_construction_avant(MG_CONSTRUCTION_GEOMETRIQUE *objet, MG_CONSTRUCTION_GEOMETRIQUE *objet_avant)
virtual std::string get_nom_mgcg_modele(void)
virtual long get_nb_objet_sequence_construction(void)
virtual int ajouter_mgcg_groupe_forme(MG_CG_GROUPE_FORME *mgcg_groupe_forme)
MG_CG_GROUPE_FORME * get_premier_mgcg_groupe_forme(std::map< long, MG_CG_GROUPE_FORME * >::iterator &it)
virtual double get_epsilon_triangulation(void)
virtual MG_CONSTRUCTION_GEOMETRIQUE * get_suivant_objet_sequence_construction(std::vector< MG_CONSTRUCTION_GEOMETRIQUE * >::iterator &it)
std::vector< MG_CONSTRUCTION_GEOMETRIQUE * > m_vector_objet_sequence_construction
Definition: mg_cg_modele.h:131
MG_IDENTIFICATEUR * get_mg_identificateur(long id)
virtual int supprimer_mgcg_formeid(long id, bool avec_mg_element=true)
int m_importer_triangulation
Definition: mg_cg_modele.h:135
virtual int ajouter_mgcg_operateur_avant(MG_CG_OPERATEUR *mgcg_operateur, MG_CONSTRUCTION_GEOMETRIQUE *objet_avant)
virtual int supprimer_mgcg_operateurid(long id)
virtual void change_mgcg_modele(MG_CG_MODELE *mgcg_modele)
double get_valeur_precision(void)
virtual int supprimer_mg_coqueid(unsigned long num)
virtual int supprimer_mg_coquilleid(unsigned long num)
MG_POUTRE * get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
MG_COQUILLE * get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
virtual int supprimer_mg_courbeid(unsigned long num)
MG_ARETE * get_suivant_arete(LISTE_MG_ARETE::iterator &it)
void change_valeur_precision(double val)
virtual int supprimer_mg_poutreid(unsigned long num)
virtual int supprimer_mg_faceid(unsigned long num)
MG_ARETE * get_premier_arete(LISTE_MG_ARETE::iterator &it)
virtual int supprimer_mg_volumeid(unsigned long num)
MG_FACE * get_premier_face(LISTE_MG_FACE::iterator &it)
virtual int supprimer_mg_areteid(unsigned long num)
MG_SOMMET * get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
MG_COQUE * get_suivant_coque(LISTE_MG_COQUE::iterator &it)
MG_SOMMET * get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
MG_POUTRE * get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
MG_COQUILLE * get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
virtual int supprimer_mg_sommetid(unsigned long num)
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
virtual int supprimer_mg_surfaceid(unsigned long num)
virtual int supprimer_mg_pointid(unsigned long num)
MG_COQUE * get_premier_coque(LISTE_MG_COQUE::iterator &it)
MG_VOLUME * get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
virtual int supprimer_mg_boucleid(unsigned long num)
MG_VOLUME * get_premier_volume(LISTE_MG_VOLUME::iterator &it)
void recherche_bonid(MG_IDENTIFICATEUR &ident)
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 X get_premier(ITERATEUR &it)
virtual X getid(unsigned long num)
virtual X get_suivant(ITERATEUR &it)
virtual void ajouter(X x)
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
double f(double x, long nb, double *xfonc, double *fonc, double eng, double eni, double lambda, double nor, double *fonc2)
const int OK
Definition: mg_definition.h:38
const int FAIL
Definition: mg_definition.h:39