MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_cg_groupe_forme.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_groupe_forme.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "mg_cg_groupe_forme.h"
23 #include "mg_definition.h"
24 #include "mg_cg_modele.h"
25 #include "mg_cg_forme.h"
26 #include "mg_cg_forme_volume.h"
28 #include "mg_volume.h"
29 MG_CG_GROUPE_FORME::MG_CG_GROUPE_FORME(MG_CG_MODELE* mgcg_modele, std::string nom): MG_CONSTRUCTION_GEOMETRIQUE(),m_mgcg_modele(mgcg_modele),m_nom(nom)
30 {
31  mgcg_modele->ajouter_mgcg_groupe_forme(this);
32 }
33 
34 MG_CG_GROUPE_FORME::MG_CG_GROUPE_FORME(MG_CG_MODELE* mgcg_modele, long int num, std::string nom): MG_CONSTRUCTION_GEOMETRIQUE(num),m_mgcg_modele(mgcg_modele),m_nom(nom)
35 {
36  mgcg_modele->ajouter_mgcg_groupe_forme(this);
37 }
38 
39 
41 {
42 
43 }
44 
45 std::string MG_CG_GROUPE_FORME::get_nom(void)
46 {
47  return m_nom;
48 }
49 
50 void MG_CG_GROUPE_FORME::change_nom(std::string nom)
51 {
52  m_nom=nom;
53 }
54 
56 {
57  return m_map_mgcg_forme.size();
58 }
59 
61 {
62  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));
63  if (!p.second)
64  return FAIL;
65  return OK;
66 }
67 
68 MG_CG_FORME* MG_CG_GROUPE_FORME::get_premiere_mgcg_forme(std::map< long, MG_CG_FORME* >::iterator& it)
69 {
70  it=m_map_mgcg_forme.begin();
71  if(it==m_map_mgcg_forme.end())
72  return NULL;
73  return it->second;
74 }
75 
76 MG_CG_FORME* MG_CG_GROUPE_FORME::get_suivante_mgcg_forme(std::map< long, MG_CG_FORME* >::iterator& it)
77 {
78  it++;
79  if(it==m_map_mgcg_forme.end())
80  return NULL;
81  return it->second;
82 }
83 
85 {
86  std::map<long,MG_CG_FORME*>::iterator it;
87  it=m_map_mgcg_forme.find(mgcg_forme->get_id());
88  if(it!=m_map_mgcg_forme.end())
89  {
90  m_map_mgcg_forme.erase(it);
91  return OK;
92  }
93  else return FAIL;
94 }
95 
97 {
98  std::map<long,MG_CG_FORME*>::iterator it=m_map_mgcg_forme.find(id);
99  if (it==m_map_mgcg_forme.end())
100  {
101  return NULL;
102  }
103  return ((*it).second);
104 }
105 
107 {
108  TPL_MAP_ENTITE<MG_VOLUME*> tpl_map_volume;
109  std::map<long,MG_CG_FORME*>::iterator it;
110  for(MG_CG_FORME* forme=get_premiere_mgcg_forme(it);forme!=NULL;forme=get_suivante_mgcg_forme(it))
111  {
112  if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::VOLUME)
113  {
114  MG_CG_FORME_VOLUME* forme_volume = (MG_CG_FORME_VOLUME*)forme;
115  tpl_map_volume.ajouter(forme_volume->get_mg_volume());
116  }
117  else if(forme->get_type_forme()==MG_CG_FORME::TYPE_FORME::MULTI_VOLUME)
118  {
119  MG_CG_FORME_MULTI_VOLUME* forme_multi_volume = (MG_CG_FORME_MULTI_VOLUME*)forme;
120  std::map<long,MG_VOLUME*>::iterator it_volume;
121  for(MG_VOLUME* volume=forme_multi_volume->get_premier_mg_volume(it_volume);volume!=NULL;volume=forme_multi_volume->get_suivant_mg_volume(it_volume))
122  {
123  tpl_map_volume.ajouter(volume);
124  }
125  }
126  }
127  return tpl_map_volume;
128 }
129 
131 {
132  return TYPE_MG_CONSTRUCTION_GEOMETRIQUE::MGCG_GROUPE_FORME;
133 }
134 
135 void MG_CG_GROUPE_FORME::enregistrer(std::ostream& o, double version)
136 {
137  if(get_nb_mgcg_forme()>0)
138  {
139  o << "%" << get_id() << "=MG_CG_GROUPE_FORME($"<< m_mgcg_modele->get_id() << "," << m_nom << "," << get_nb_mgcg_forme() << ",(";
140  std::map<long,MG_CG_FORME*>::iterator it;
141  for(it=m_map_mgcg_forme.begin();it!=--m_map_mgcg_forme.end();it++)
142  {
143  MG_CG_FORME* forme = it->second;
144  o << "$" << forme->get_id() << ",";
145  }
146  MG_CG_FORME* forme = it->second;
147  o << "$" << forme->get_id() << "));" << std::endl;
148  }
149  else
150  {
151  o << "%" << get_id() << "=MG_CG_GROUPE_FORME($"<< m_mgcg_modele->get_id() << "," << m_nom << "," << get_nb_mgcg_forme() << ",());" << std::endl;
152  }
153 }
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
mg_cg_forme.h
mg_cg_forme_multi_volume.h
MG_CG_GROUPE_FORME::get_premiere_mgcg_forme
MG_CG_FORME * get_premiere_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
Definition: mg_cg_groupe_forme.cpp:68
TPL_MAP_ENTITE< MG_VOLUME * >
FAIL
const int FAIL
Definition: mg_definition.h:39
mg_cg_forme_volume.h
MG_CG_GROUPE_FORME::get_nom
std::string get_nom(void)
Definition: mg_cg_groupe_forme.cpp:45
mg_cg_groupe_forme.h
MG_CG_FORME_MULTI_VOLUME::get_suivant_mg_volume
virtual MG_VOLUME * get_suivant_mg_volume(std::map< long, MG_VOLUME * >::iterator &it)
Definition: mg_cg_forme_multi_volume.cpp:138
MG_CG_GROUPE_FORME::get_type_mg_construction_geometrique
int get_type_mg_construction_geometrique(void)
Definition: mg_cg_groupe_forme.cpp:130
OK
const int OK
Definition: mg_definition.h:38
MG_VOLUME
Definition: mg_volume.h:33
MG_CG_FORME_MULTI_VOLUME
Definition: mg_cg_forme_multi_volume.h:35
MG_CG_FORME_MULTI_VOLUME::get_premier_mg_volume
virtual MG_VOLUME * get_premier_mg_volume(std::map< long, MG_VOLUME * >::iterator &it)
Definition: mg_cg_forme_multi_volume.cpp:131
MG_CG_GROUPE_FORME::m_mgcg_modele
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_groupe_forme.h:48
MG_CG_GROUPE_FORME::ajouter_mgcg_forme
int ajouter_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_groupe_forme.cpp:60
MG_CG_GROUPE_FORME::enregistrer
void enregistrer(std::ostream &o, double version)
Definition: mg_cg_groupe_forme.cpp:135
MG_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_GROUPE_FORME::~MG_CG_GROUPE_FORME
~MG_CG_GROUPE_FORME(void)
Definition: mg_cg_groupe_forme.cpp:40
MG_CG_MODELE
Definition: mg_cg_modele.h:41
MG_CG_MODELE::ajouter_mgcg_groupe_forme
virtual int ajouter_mgcg_groupe_forme(MG_CG_GROUPE_FORME *mgcg_groupe_forme)
Definition: mg_cg_modele.cpp:456
MG_CG_FORME_VOLUME::get_mg_volume
virtual MG_VOLUME * get_mg_volume(void)
Definition: mg_cg_forme_volume.cpp:68
MG_CG_GROUPE_FORME::get_suivante_mgcg_forme
MG_CG_FORME * get_suivante_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
Definition: mg_cg_groupe_forme.cpp:76
MG_CG_GROUPE_FORME::change_nom
void change_nom(std::string nom)
Definition: mg_cg_groupe_forme.cpp:50
mg_cg_modele.h
MG_CG_GROUPE_FORME::m_map_mgcg_forme
std::map< long, MG_CG_FORME * > m_map_mgcg_forme
Definition: mg_cg_groupe_forme.h:50
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
MG_CG_GROUPE_FORME::MG_CG_GROUPE_FORME
MG_CG_GROUPE_FORME(MG_CG_MODELE *mgcg_modele, std::string nom)
Definition: mg_cg_groupe_forme.cpp:29
MG_CG_GROUPE_FORME::get_tpl_map_volume
TPL_MAP_ENTITE< MG_VOLUME * > get_tpl_map_volume(void)
Definition: mg_cg_groupe_forme.cpp:106
MG_CG_GROUPE_FORME::retirer_mgcg_forme
int retirer_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_groupe_forme.cpp:84
mg_definition.h
MG_CG_GROUPE_FORME::m_nom
std::string m_nom
Definition: mg_cg_groupe_forme.h:49
MG_CG_FORME_VOLUME
Definition: mg_cg_forme_volume.h:36
MG_CG_GROUPE_FORME::get_nb_mgcg_forme
long get_nb_mgcg_forme(void)
Definition: mg_cg_groupe_forme.cpp:55
mg_volume.h
MG_CG_GROUPE_FORME::get_mgcg_forme
MG_CG_FORME * get_mgcg_forme(long id)
Definition: mg_cg_groupe_forme.cpp:96