MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_cg_assemblage.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_assemblage.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "mg_cg_assemblage.h"
23 #include "mg_gestionnaire.h"
24 #include "mg_definition.h"
25 #include "mg_cg_forme.h"
26 #include "mg_cg_forme_volume.h"
27 #include "mg_cg_modele.h"
28 #include "mg_sous_geometrie.h"
29 MG_CG_ASSEMBLAGE::MG_CG_ASSEMBLAGE(MG_CG_MODELE* mgcg_modele,std::string nom_mgcg_assemblage)
30 {
31  m_mgcg_modele=mgcg_modele;
32  m_nom_mgcg_assemblage=nom_mgcg_assemblage;
33  mgcg_modele->ajouter_mgcg_assemblage(this);
35  get_id(),
36  (char*)"MGCG_ASS",
37  m_nom_mgcg_assemblage.c_str(),
41 }
42 
43 
44 MG_CG_ASSEMBLAGE::MG_CG_ASSEMBLAGE(MG_CG_MODELE* mgcg_modele, long unsigned int num,std::string nom_mgcg_assemblage, MG_SOUS_GEOMETRIE *mg_sous_geometrie): MG_CONSTRUCTION_GEOMETRIQUE(num)
45 {
46  m_mgcg_modele=mgcg_modele;
47  m_nom_mgcg_assemblage=nom_mgcg_assemblage;
48  m_mg_sous_geometrie = mg_sous_geometrie;
49 }
50 
52 {
55 }
56 
58 {
59  return m_mgcg_modele;
60 }
61 
62 void MG_CG_ASSEMBLAGE::change_nom_mgcg_assemblage(std::string nom_mgcg_assemblage)
63 {
64  m_nom_mgcg_assemblage=nom_mgcg_assemblage;
65 }
66 
68 {
69  return m_nom_mgcg_assemblage;
70 }
71 
73 {
74  m_mg_sous_geometrie=mg_sous_geometrie;
75 }
76 
78 {
79  return m_mg_sous_geometrie;
80 }
81 
83 {
84  return m_map_mgcg_forme.size();
85 }
86 
87 int MG_CG_ASSEMBLAGE::ajouter_mgcg_forme(MG_CG_FORME* mgcg_forme,bool avec_mg_element)
88 {
89  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));
90  if (!p.second)
91  return FAIL;
92  if(mgcg_forme->get_etat()==MG_CG_FORME::ETAT_FORME::CONSTRUITE && avec_mg_element) ajouter_mg_element_mgcg_forme(mgcg_forme);
93  return OK;
94 }
95 
96 MG_CG_FORME* MG_CG_ASSEMBLAGE::get_premiere_mgcg_forme(std::map< long, MG_CG_FORME* >::iterator& it)
97 {
98  it=m_map_mgcg_forme.begin();
99  if(it==m_map_mgcg_forme.end())
100  return NULL;
101  return it->second;
102 }
103 
104 MG_CG_FORME* MG_CG_ASSEMBLAGE::get_suivante_mgcg_forme(std::map< long, MG_CG_FORME* >::iterator& it)
105 {
106  it++;
107  if(it==m_map_mgcg_forme.end())
108  return NULL;
109  return it->second;
110 }
111 
113 {
114  std::map<long,MG_CG_FORME*>::iterator it=m_map_mgcg_forme.find(id);
115  if (it==m_map_mgcg_forme.end())
116  {
117  return NULL;
118  }
119  return ((*it).second);
120 }
121 
123 {
124  std::map<long,MG_CG_FORME*>::iterator it;
125  it=m_map_mgcg_forme.find(id);
126  if(it!=m_map_mgcg_forme.end())
127  {
128  m_map_mgcg_forme.erase(it);
130  return OK;
131  }
132  else return FAIL;
133 }
134 
136 {
137  m_map_mgcg_forme.clear();
139 }
140 
141 void MG_CG_ASSEMBLAGE::enregistrer(std::ostream& o,double version)
142 {
143  o << "%" << get_id() << "=MG_CG_ASSEMBLAGE($"<< m_mgcg_modele->get_id()<< ","
144  << m_nom_mgcg_assemblage << ",$"
145  << m_mg_sous_geometrie->get_id() << ","
146  << get_nb_mgcg_forme() <<",(";
147  std::map<long,MG_CG_FORME*>::iterator it_forme;
148  for(it_forme=m_map_mgcg_forme.begin();it_forme!=m_map_mgcg_forme.end();it_forme++)
149  {
150  o << "$" << it_forme->second->get_id();
151  if(it_forme!=--m_map_mgcg_forme.end()) o << ",";
152  }
153  o << "));" << std::endl;
154  enregistrer_infos(o,version);
155 }
156 
158 {
159  return TYPE_MG_CONSTRUCTION_GEOMETRIQUE::MGCG_ASSEMBLAGE;
160 }
161 
163 {
164  TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> map_mg_element_topologique;
165  TPL_MAP_ENTITE<MG_ELEMENT_COTOPOLOGIQUE*> map_mg_element_cotopologique;
166  TPL_MAP_ENTITE<MG_ELEMENT_GEOMETRIQUE*> map_mg_element_geometrique;
168  if (geo->est_virtuelle())
169  {
170  LISTE_MG_VOLUME::iterator itv;
171  LISTE_MG_FACE::iterator itf;
172  LISTE_MG_ARETE::iterator ita;
173  LISTE_MG_SOMMET::iterator its;
174  for (MG_VOLUME* vol=geo->get_premier_volume(itv);vol!=NULL;vol=geo->get_suivant_volume(itv))
175  map_mg_element_topologique.ajouter(vol);
176  for (MG_FACE* face=geo->get_premier_face(itf);face!=NULL;face=geo->get_suivant_face(itf))
177  map_mg_element_topologique.ajouter(face);
178  for (MG_ARETE* are=geo->get_premier_arete(ita);are!=NULL;are=geo->get_suivant_arete(ita))
179  map_mg_element_topologique.ajouter(are);
180  for (MG_SOMMET* som=geo->get_premier_sommet(its);som!=NULL;som=geo->get_suivant_sommet(its))
181  map_mg_element_topologique.ajouter(som);
182 
183  }
184  else
185  mgcg_forme->get_mg_element(&map_mg_element_topologique,&map_mg_element_cotopologique,&map_mg_element_geometrique);
187  for(MG_ELEMENT_TOPOLOGIQUE* ele=map_mg_element_topologique.get_premier(it_topo);ele!=NULL;ele=map_mg_element_topologique.get_suivant(it_topo))
188  {
190  }
192  for(MG_ELEMENT_COTOPOLOGIQUE* ele=map_mg_element_cotopologique.get_premier(it_cotopo);ele!=NULL;ele=map_mg_element_cotopologique.get_suivant(it_cotopo))
193  {
195  }
197  for(MG_ELEMENT_GEOMETRIQUE* ele=map_mg_element_geometrique.get_premier(it_geo);ele!=NULL;ele=map_mg_element_geometrique.get_suivant(it_geo))
198  {
200  }
201 }
202 
204 {
206  std::map<long,MG_CG_FORME*>::iterator it;
207  for(MG_CG_FORME* mgcg_forme=get_premiere_mgcg_forme(it);mgcg_forme!=NULL;mgcg_forme=get_suivante_mgcg_forme(it))
208  {
209  if(mgcg_forme->get_etat()==MG_CG_FORME::ETAT_FORME::CONSTRUITE)
210  ajouter_mg_element_mgcg_forme(mgcg_forme);
211  }
212 }
213 
214 
215 
216 
MG_CG_ASSEMBLAGE::actualiser_mg_sous_geometrie
void actualiser_mg_sous_geometrie(void)
Definition: mg_cg_assemblage.cpp:203
MG_GEOMETRIE::get_valeur_precision
double get_valeur_precision(void)
Definition: mg_geometrie.cpp:2642
TPL_MAP_ENTITE::get_premier
virtual X get_premier(ITERATEUR &it)
Definition: tpl_map_entite.h:112
mg_cg_forme.h
MG_SOUS_GEOMETRIE::retirer_tout
virtual void retirer_tout(void)
Definition: mg_sous_geometrie.cpp:81
TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * >
FAIL
const int FAIL
Definition: mg_definition.h:39
mg_cg_forme_volume.h
MG_GEOMETRIE::get_suivant_volume
MG_VOLUME * get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1702
MG_CG_ASSEMBLAGE::~MG_CG_ASSEMBLAGE
virtual ~MG_CG_ASSEMBLAGE(void)
Definition: mg_cg_assemblage.cpp:51
mg_gestionnaire.h
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_CG_ASSEMBLAGE::m_mg_sous_geometrie
MG_SOUS_GEOMETRIE * m_mg_sous_geometrie
Definition: mg_cg_assemblage.h:69
MG_CG_ASSEMBLAGE::get_suivante_mgcg_forme
virtual MG_CG_FORME * get_suivante_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
Definition: mg_cg_assemblage.cpp:104
MG_CG_ASSEMBLAGE::get_nom_mgcg_assemblage
virtual std::string get_nom_mgcg_assemblage(void)
Definition: mg_cg_assemblage.cpp:67
MG_CG_ASSEMBLAGE::MG_CG_ASSEMBLAGE
MG_CG_ASSEMBLAGE(MG_CG_MODELE *mgcg_modele, std::string nom_mgcg_assemblage)
Definition: mg_cg_assemblage.cpp:29
MG_GEOMETRIE::get_premier_face
MG_FACE * get_premier_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1338
MG_CG_ASSEMBLAGE::get_mgcg_modele
virtual MG_CG_MODELE * get_mgcg_modele(void)
Definition: mg_cg_assemblage.cpp:57
MG_CG_ASSEMBLAGE::get_mg_sous_geometrie
virtual MG_SOUS_GEOMETRIE * get_mg_sous_geometrie(void)
Definition: mg_cg_assemblage.cpp:77
MG_CG_ASSEMBLAGE::retirer_tout_mgcg_forme
virtual void retirer_tout_mgcg_forme(void)
Definition: mg_cg_assemblage.cpp:135
MG_CG_ASSEMBLAGE::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_cg_assemblage.cpp:141
OK
const int OK
Definition: mg_definition.h:38
MG_CG_MODELE::ajouter_mgcg_assemblage
virtual int ajouter_mgcg_assemblage(MG_CG_ASSEMBLAGE *mgcg_assemblage)
Definition: mg_cg_modele.cpp:329
MG_VOLUME
Definition: mg_volume.h:33
MG_SOUS_GEOMETRIE::ajouter_mg_element_topologique
virtual int ajouter_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE *mg_element_topologique)
Definition: mg_sous_geometrie.cpp:813
MG_CG_ASSEMBLAGE::m_map_mgcg_forme
std::map< long, MG_CG_FORME * > m_map_mgcg_forme
Definition: mg_cg_assemblage.h:68
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_GEOMETRIE::get_suivant_sommet
MG_SOMMET * get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:632
MG_CG_MODELE::get_mg_geometrie
virtual MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_cg_modele.cpp:98
MG_CG_ASSEMBLAGE::get_premiere_mgcg_forme
virtual MG_CG_FORME * get_premiere_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
Definition: mg_cg_assemblage.cpp:96
MG_ELEMENT_GEOMETRIQUE
Definition: mg_element_geometrique.h:30
MG_CG_ASSEMBLAGE::change_mg_sous_geometrie
virtual void change_mg_sous_geometrie(MG_SOUS_GEOMETRIE *mg_sous_geometrie)
Definition: mg_cg_assemblage.cpp:72
MG_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_ASSEMBLAGE::get_type_mg_construction_geometrique
virtual int get_type_mg_construction_geometrique(void)
Definition: mg_cg_assemblage.cpp:157
MG_GESTIONNAIRE::supprimer_mg_geometrieid
int supprimer_mg_geometrieid(unsigned long num)
Definition: mg_gestionnaire.cpp:364
MG_GESTIONNAIRE::ajouter_mg_geometrie
int ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
Definition: mg_gestionnaire.cpp:306
MG_SOUS_GEOMETRIE::ajouter_mg_element_cotopologique
virtual int ajouter_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE *mg_element_cotopologique)
Definition: mg_sous_geometrie.cpp:833
MG_CG_ASSEMBLAGE::change_nom_mgcg_assemblage
virtual void change_nom_mgcg_assemblage(std::string nom_mgcg_assemblage)
Definition: mg_cg_assemblage.cpp:62
MG_CG_MODELE
Definition: mg_cg_modele.h:41
TPL_MAP_ENTITE::ITERATEUR
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
Definition: tpl_map_entite.h:38
MG_SOUS_GEOMETRIE::ajouter_mg_element_geometrique
virtual int ajouter_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE *mg_element_geometrique)
Definition: mg_sous_geometrie.cpp:851
MG_ELEMENT_COTOPOLOGIQUE
Definition: mg_element_cotopologique.h:30
mg_sous_geometrie.h
MG_GEOMETRIE::est_virtuelle
bool est_virtuelle(void)
Definition: mg_geometrie.cpp:2588
MG_GEOMETRIE::get_premier_sommet
MG_SOMMET * get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
Definition: mg_geometrie.cpp:624
mg_cg_modele.h
MG_GEOMETRIE::get_premier_arete
MG_ARETE * get_premier_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:907
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
mg_cg_assemblage.h
MG_CG_ASSEMBLAGE::m_nom_mgcg_assemblage
std::string m_nom_mgcg_assemblage
Definition: mg_cg_assemblage.h:66
MG_CG_ASSEMBLAGE::retirer_mgcg_formeid
virtual int retirer_mgcg_formeid(long id)
Definition: mg_cg_assemblage.cpp:122
MG_CG_ASSEMBLAGE::get_nb_mgcg_forme
virtual long get_nb_mgcg_forme(void)
Definition: mg_cg_assemblage.cpp:82
MG_GEOMETRIE::get_valeur_unite
double get_valeur_unite(void)
Definition: mg_geometrie.cpp:2652
mg_definition.h
MG_SOUS_GEOMETRIE::get_mg_geometrie
virtual MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_sous_geometrie.cpp:100
MG_CG_MODELE::get_mg_gestionnaire
virtual MG_GESTIONNAIRE * get_mg_gestionnaire(void)
Definition: mg_cg_modele.cpp:83
MG_SOUS_GEOMETRIE
Definition: mg_sous_geometrie.h:50
MG_GEOMETRIE::get_premier_volume
MG_VOLUME * get_premier_volume(LISTE_MG_VOLUME::iterator &it)
Definition: mg_geometrie.cpp:1694
MG_CG_ASSEMBLAGE::get_mgcg_formeid
virtual MG_CG_FORME * get_mgcg_formeid(long id)
Definition: mg_cg_assemblage.cpp:112
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_CG_FORME::get_etat
virtual int get_etat(void)
Definition: mg_cg_forme.cpp:76
MG_CG_FORME::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)=0
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
TPL_MAP_ENTITE::get_suivant
virtual X get_suivant(ITERATEUR &it)
Definition: tpl_map_entite.h:120
MG_SOMMET
Definition: mg_sommet.h:35
MG_CG_ASSEMBLAGE::ajouter_mgcg_forme
virtual int ajouter_mgcg_forme(MG_CG_FORME *mgcg_forme, bool avec_mg_element=true)
Definition: mg_cg_assemblage.cpp:87
MG_GEOMETRIE::get_suivant_face
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1346
MG_CG_ASSEMBLAGE::ajouter_mg_element_mgcg_forme
void ajouter_mg_element_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_assemblage.cpp:162
MG_GEOMETRIE::get_suivant_arete
MG_ARETE * get_suivant_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:915
MG_CG_ASSEMBLAGE::m_mgcg_modele
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_assemblage.h:67