MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_cg_forme_multi_volume.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_multi_volume.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
23 #include "mg_definition.h"
24 #include "mg_cg_modele.h"
25 #include "mg_cg_operateur.h"
26 #include "mg_volume.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_VOLUME*> &vector_mg_volume): MG_CG_FORME(mgcg_modele,provenance)
46 {
47  std::vector<MG_VOLUME*>::iterator it_volume;
48  for(it_volume=vector_mg_volume.begin();it_volume!=vector_mg_volume.end();it_volume++) m_map_mg_volume.insert(std::pair<long,MG_VOLUME*>((*it_volume)->get_id(),*it_volume));
49 }
50 
52  int provenance,
53  int etat,
54  long unsigned int num,
55  std::vector< MG_VOLUME* > &vector_mg_volume): MG_CG_FORME(mgcg_modele,provenance,etat,num)
56 {
57  std::vector<MG_VOLUME*>::iterator it_volume;
58  for(it_volume=vector_mg_volume.begin();it_volume!=vector_mg_volume.end();it_volume++) m_map_mg_volume.insert(std::pair<long,MG_VOLUME*>((*it_volume)->get_id(),*it_volume));
59 }
60 
62 {
63  std::map<long,MG_VOLUME*>::iterator it;
64  for(MG_VOLUME* mg_volume=mdd.get_premier_mg_volume(it);mg_volume!=NULL;mg_volume=mdd.get_suivant_mg_volume(it))
65  {
66  ajouter_mg_volume(mg_volume);
67  }
68 }
69 
71 {
72 
73 }
74 
76 {
77  return m_map_mg_volume.size();
78 }
79 
81 {
82  std::pair<std::map<long,MG_VOLUME*>::iterator,bool> p = m_map_mg_volume.insert(std::pair<long,MG_VOLUME*>(mg_volume->get_id(),mg_volume));
83  if(!p.second) return FAIL;
84  return OK;
85 }
86 
88 {
89  std::map<long,MG_VOLUME*>::iterator it;
90  it=m_map_mg_volume.find(mg_volume->get_id());
91  if(it!=m_map_mg_volume.end())
92  {
93  m_map_mg_volume.erase(it);
94  return OK;
95  }
96  return FAIL;
97 }
98 
100 {
101  m_map_mg_volume.clear();
102 }
103 
105  TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE* >* map_mg_element_cotopologique,
106  TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE* >* map_mg_element_geometrique)
107 {
108  if(m_etat==MG_CG_FORME::ETAT_FORME::CONSTRUITE)
109  {
110  std::map<long,MG_VOLUME*>::iterator it_volume;
111  for(MG_VOLUME* volume=get_premier_mg_volume(it_volume);volume!=NULL;volume=get_suivant_mg_volume(it_volume))
112  {
113  map_mg_element_topologique->ajouter(volume);
114  OT_GEOMETRIE::get_map_mg_element_sous_jacent(volume,map_mg_element_topologique,map_mg_element_cotopologique,map_mg_element_geometrique);
115  }
116  }
117 }
118 
120 {
121  std::map<long,MG_VOLUME*>::iterator it_volume;
122  MG_VOLUME* volume=get_premier_mg_volume(it_volume);
123  BOITE_3D boite3d = volume->get_boite_3D();
124  for(;volume!=NULL;volume=get_suivant_mg_volume(it_volume))
125  {
126  boite3d=boite3d+volume->get_boite_3D();
127  }
128  return boite3d;
129 }
130 
131 MG_VOLUME* MG_CG_FORME_MULTI_VOLUME::get_premier_mg_volume(std::map<long,MG_VOLUME*>::iterator& it)
132 {
133  it=m_map_mg_volume.begin();
134  if(it!=m_map_mg_volume.end()) return it->second;
135  else return NULL;
136 }
137 
138 MG_VOLUME* MG_CG_FORME_MULTI_VOLUME::get_suivant_mg_volume(std::map<long,MG_VOLUME*>::iterator& it)
139 {
140  it++;
141  if(it!=m_map_mg_volume.end()) return it->second;
142  else return NULL;
143 }
144 
146 {
147  return TYPE_FORME::MULTI_VOLUME;
148 }
149 
151 {
156 }
157 
158 int MG_CG_FORME_MULTI_VOLUME::construire(bool fusionner_entite_similaire,
159  double precision,
160  bool importer_triangulation,
161  double epsilon_triangulation)
162 {
163  std::cout << "*** ATTENTION ! MG_CG_FORME_MULTI_VOLUME::construire : MG_CG_FORME construite par MG_CG_OPERATEUR m_mgcg_operateur_parent ***" << std::endl;
164  return FAIL;
165 }
166 
167 void MG_CG_FORME_MULTI_VOLUME::enregistrer(std::ostream& o, double version)
168 {
169  o << "%" << get_id()
170  << "=MG_CG_FORME_MULTI_VOLUME("
171  << "$"<< m_mgcg_modele->get_id()
172  << "," << m_provenance
173  << "," << m_etat;
174  o << "," << get_nb_mg_volume()
175  << ",(";
176  std::map<long,MG_VOLUME*>::iterator it_volume;
177  for(MG_VOLUME* volume=get_premier_mg_volume(it_volume);volume!=NULL;volume=get_suivant_mg_volume(it_volume))
178  {
179  o << "$" << volume->get_id();
180  if(it_volume!=--m_map_mg_volume.end()) o << ",";
181  }
182  o << ")";
183  o << ",$" << get_mgcg_operateur_parent()->get_id();
184  o << "," << get_nb_mgcg_operateur_dependant()
185  << ",(";
186  std::map<long,MG_CG_OPERATEUR*>::iterator it_op;
187  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))
188  {
189  o << "$" << mgcg_op->get_id();
190  if(it_op!=--m_map_mgcg_operateur_dependant.end()) o << ",";
191  }
192  o << "));" << std::endl;
193  enregistrer_infos(o,version);
194 }
mg_cg_forme_multi_volume.h
ot_geometrie.h
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_MULTI_VOLUME::ajouter_mg_volume
virtual int ajouter_mg_volume(MG_VOLUME *mg_volume)
Definition: mg_cg_forme_multi_volume.cpp:80
MG_CG_MODELE::get_epsilon_triangulation
virtual double get_epsilon_triangulation(void)
Definition: mg_cg_modele.cpp:1119
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_FORME_MULTI_VOLUME::get_nb_mg_volume
virtual long get_nb_mg_volume(void)
Definition: mg_cg_forme_multi_volume.cpp:75
MG_CG_FORME_MULTI_VOLUME::MG_CG_FORME_MULTI_VOLUME
MG_CG_FORME_MULTI_VOLUME(MG_CG_MODELE *mgcg_modele, int provenance)
Definition: mg_cg_forme_multi_volume.cpp:29
MG_CG_FORME_MULTI_VOLUME::retirer_tout_mg_volume
virtual void retirer_tout_mg_volume(void)
Definition: mg_cg_forme_multi_volume.cpp:99
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_VOLUME
Definition: mg_volume.h:33
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_MULTI_VOLUME
Definition: mg_cg_forme_multi_volume.h:35
MG_CG_FORME_MULTI_VOLUME::retirer_mg_volume
virtual int retirer_mg_volume(MG_VOLUME *mg_volume)
Definition: mg_cg_forme_multi_volume.cpp:87
mg_cg_operateur.h
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_FORME_MULTI_VOLUME::get_boite_3D
virtual BOITE_3D get_boite_3D(void)
Definition: mg_cg_forme_multi_volume.cpp:119
MG_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_OPERATEUR
Definition: mg_cg_operateur.h:34
MG_CG_FORME_MULTI_VOLUME::m_map_mg_volume
std::map< long, MG_VOLUME * > m_map_mg_volume
Definition: mg_cg_forme_multi_volume.h:68
MG_CG_MODELE::get_precision
virtual double get_precision(void)
Definition: mg_cg_modele.cpp:1099
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_VOLUME::get_boite_3D
virtual BOITE_3D get_boite_3D(void)
Definition: mg_volume.cpp:109
MG_CG_FORME_MULTI_VOLUME::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_multi_volume.cpp:104
mg_cg_modele.h
MG_CG_FORME::get_mgcg_operateur_parent
virtual MG_CG_OPERATEUR * get_mgcg_operateur_parent(void)
Definition: mg_cg_forme.cpp:86
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_MULTI_VOLUME::construire
virtual int construire(void)
Definition: mg_cg_forme_multi_volume.cpp:150
MG_CG_MODELE::get_importer_triangulation
virtual bool get_importer_triangulation(void)
Definition: mg_cg_modele.cpp:1109
MG_CG_FORME_MULTI_VOLUME::~MG_CG_FORME_MULTI_VOLUME
virtual ~MG_CG_FORME_MULTI_VOLUME()
Definition: mg_cg_forme_multi_volume.cpp:70
MG_CG_FORME::get_nb_mgcg_operateur_dependant
virtual long get_nb_mgcg_operateur_dependant(void)
Definition: mg_cg_forme.cpp:96
mg_definition.h
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
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
mg_volume.h
MG_CG_FORME_MULTI_VOLUME::get_type_forme
virtual int get_type_forme(void)
Definition: mg_cg_forme_multi_volume.cpp:145
MG_CG_FORME_MULTI_VOLUME::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_cg_forme_multi_volume.cpp:167