MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_volume_element.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_volume_element.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "mg_volume_element.h"
26 
27 #include "mg_penta.h"
28 #include "mg_pyramide.h"
29 
31 {
32 }
33 
35 {
36 }
37 
39 {
40 }
41 
43 {
44 }
45 
47 {
48 return true;
49 }
50 
51 
53 {
54 ele->change_lien_topologie(this);
55 }
56 
57 
58 
59 
61 {
62 return get_lien_maillage()->get(i);
63 }
64 
66 {
67 return get_lien_maillage()->get_nb();
68 }
69 
70 
72 {
73 double xmax=-1e308,ymax=-1e308,zmax=-1e308;
74 double xmin=1e308,ymin=1e308,zmin=1e308;
76 for (MG_ELEMENT_MAILLAGE* ele=get_lien_maillage()->get_premier(it);ele!=NULL;ele=get_lien_maillage()->get_suivant(it))
77  {
78  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_TETRA)
79  {
80  MG_TETRA* tet=(MG_TETRA*)ele;
81 
82  double x=tet->get_noeud1()->get_x();
83  double y=tet->get_noeud1()->get_y();
84  double z=tet->get_noeud1()->get_z();
85  xmax=std::max(xmax,x);
86  ymax=std::max(ymax,y);
87  zmax=std::max(zmax,z);
88  xmin=std::min(xmin,x);
89  ymin=std::min(ymin,y);
90  zmin=std::min(zmin,z);
91  x=tet->get_noeud2()->get_x();
92  y=tet->get_noeud2()->get_y();
93  z=tet->get_noeud2()->get_z();
94  xmax=std::max(xmax,x);
95  ymax=std::max(ymax,y);
96  zmax=std::max(zmax,z);
97  xmin=std::min(xmin,x);
98  ymin=std::min(ymin,y);
99  zmin=std::min(zmin,z);
100  x=tet->get_noeud3()->get_x();
101  y=tet->get_noeud3()->get_y();
102  z=tet->get_noeud3()->get_z();
103  xmax=std::max(xmax,x);
104  ymax=std::max(ymax,y);
105  zmax=std::max(zmax,z);
106  xmin=std::min(xmin,x);
107  ymin=std::min(ymin,y);
108  zmin=std::min(zmin,z);
109  x=tet->get_noeud4()->get_x();
110  y=tet->get_noeud4()->get_y();
111  z=tet->get_noeud4()->get_z();
112  xmax=std::max(xmax,x);
113  ymax=std::max(ymax,y);
114  zmax=std::max(zmax,z);
115  xmin=std::min(xmin,x);
116  ymin=std::min(ymin,y);
117  zmin=std::min(zmin,z);
118  }
119  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_PENTA)
120  {
121  MG_PENTA* pen=(MG_PENTA*)ele;
122 
123  double x=pen->get_noeud1()->get_x();
124  double y=pen->get_noeud1()->get_y();
125  double z=pen->get_noeud1()->get_z();
126  xmax=std::max(xmax,x);
127  ymax=std::max(ymax,y);
128  zmax=std::max(zmax,z);
129  xmin=std::min(xmin,x);
130  ymin=std::min(ymin,y);
131  zmin=std::min(zmin,z);
132  x=pen->get_noeud2()->get_x();
133  y=pen->get_noeud2()->get_y();
134  z=pen->get_noeud2()->get_z();
135  xmax=std::max(xmax,x);
136  ymax=std::max(ymax,y);
137  zmax=std::max(zmax,z);
138  xmin=std::min(xmin,x);
139  ymin=std::min(ymin,y);
140  zmin=std::min(zmin,z);
141  x=pen->get_noeud3()->get_x();
142  y=pen->get_noeud3()->get_y();
143  z=pen->get_noeud3()->get_z();
144  xmax=std::max(xmax,x);
145  ymax=std::max(ymax,y);
146  zmax=std::max(zmax,z);
147  xmin=std::min(xmin,x);
148  ymin=std::min(ymin,y);
149  zmin=std::min(zmin,z);
150  x=pen->get_noeud5()->get_x();
151  y=pen->get_noeud5()->get_y();
152  z=pen->get_noeud5()->get_z();
153  xmax=std::max(xmax,x);
154  ymax=std::max(ymax,y);
155  zmax=std::max(zmax,z);
156  xmin=std::min(xmin,x);
157  ymin=std::min(ymin,y);
158  zmin=std::min(zmin,z);
159  x=pen->get_noeud6()->get_x();
160  y=pen->get_noeud6()->get_y();
161  z=pen->get_noeud6()->get_z();
162  xmax=std::max(xmax,x);
163  ymax=std::max(ymax,y);
164  zmax=std::max(zmax,z);
165  xmin=std::min(xmin,x);
166  ymin=std::min(ymin,y);
167  zmin=std::min(zmin,z);
168  }
169  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_HEXA)
170  {
171  MG_HEXA* hex=(MG_HEXA*)ele;
172 
173  double x=hex->get_noeud1()->get_x();
174  double y=hex->get_noeud1()->get_y();
175  double z=hex->get_noeud1()->get_z();
176  xmax=std::max(xmax,x);
177  ymax=std::max(ymax,y);
178  zmax=std::max(zmax,z);
179  xmin=std::min(xmin,x);
180  ymin=std::min(ymin,y);
181  zmin=std::min(zmin,z);
182  x=hex->get_noeud2()->get_x();
183  y=hex->get_noeud2()->get_y();
184  z=hex->get_noeud2()->get_z();
185  xmax=std::max(xmax,x);
186  ymax=std::max(ymax,y);
187  zmax=std::max(zmax,z);
188  xmin=std::min(xmin,x);
189  ymin=std::min(ymin,y);
190  zmin=std::min(zmin,z);
191  x=hex->get_noeud3()->get_x();
192  y=hex->get_noeud3()->get_y();
193  z=hex->get_noeud3()->get_z();
194  xmax=std::max(xmax,x);
195  ymax=std::max(ymax,y);
196  zmax=std::max(zmax,z);
197  xmin=std::min(xmin,x);
198  ymin=std::min(ymin,y);
199  zmin=std::min(zmin,z);
200  x=hex->get_noeud5()->get_x();
201  y=hex->get_noeud5()->get_y();
202  z=hex->get_noeud5()->get_z();
203  xmax=std::max(xmax,x);
204  ymax=std::max(ymax,y);
205  zmax=std::max(zmax,z);
206  xmin=std::min(xmin,x);
207  ymin=std::min(ymin,y);
208  zmin=std::min(zmin,z);
209  x=hex->get_noeud6()->get_x();
210  y=hex->get_noeud6()->get_y();
211  z=hex->get_noeud6()->get_z();
212  xmax=std::max(xmax,x);
213  ymax=std::max(ymax,y);
214  zmax=std::max(zmax,z);
215  xmin=std::min(xmin,x);
216  ymin=std::min(ymin,y);
217  zmin=std::min(zmin,z);
218  x=hex->get_noeud7()->get_x();
219  y=hex->get_noeud7()->get_y();
220  z=hex->get_noeud7()->get_z();
221  xmax=std::max(xmax,x);
222  ymax=std::max(ymax,y);
223  zmax=std::max(zmax,z);
224  xmin=std::min(xmin,x);
225  ymin=std::min(ymin,y);
226  zmin=std::min(zmin,z);
227  x=hex->get_noeud8()->get_x();
228  y=hex->get_noeud8()->get_y();
229  z=hex->get_noeud8()->get_z();
230  xmax=std::max(xmax,x);
231  ymax=std::max(ymax,y);
232  zmax=std::max(zmax,z);
233  xmin=std::min(xmin,x);
234  ymin=std::min(ymin,y);
235  zmin=std::min(zmin,z);
236  }
237  if (ele->get_type_entite()==MAGIC::TYPE_ENTITE::IDMG_PYRAMIDE)
238  {
239  MG_PYRAMIDE* pyr=(MG_PYRAMIDE*)ele;
240 
241  double x=pyr->get_noeud1()->get_x();
242  double y=pyr->get_noeud1()->get_y();
243  double z=pyr->get_noeud1()->get_z();
244  xmax=std::max(xmax,x);
245  ymax=std::max(ymax,y);
246  zmax=std::max(zmax,z);
247  xmin=std::min(xmin,x);
248  ymin=std::min(ymin,y);
249  zmin=std::min(zmin,z);
250  x=pyr->get_noeud2()->get_x();
251  y=pyr->get_noeud2()->get_y();
252  z=pyr->get_noeud2()->get_z();
253  xmax=std::max(xmax,x);
254  ymax=std::max(ymax,y);
255  zmax=std::max(zmax,z);
256  xmin=std::min(xmin,x);
257  ymin=std::min(ymin,y);
258  zmin=std::min(zmin,z);
259  x=pyr->get_noeud3()->get_x();
260  y=pyr->get_noeud3()->get_y();
261  z=pyr->get_noeud3()->get_z();
262  xmax=std::max(xmax,x);
263  ymax=std::max(ymax,y);
264  zmax=std::max(zmax,z);
265  xmin=std::min(xmin,x);
266  ymin=std::min(ymin,y);
267  zmin=std::min(zmin,z);
268  x=pyr->get_noeud5()->get_x();
269  y=pyr->get_noeud5()->get_y();
270  z=pyr->get_noeud5()->get_z();
271  xmax=std::max(xmax,x);
272  ymax=std::max(ymax,y);
273  zmax=std::max(zmax,z);
274  xmin=std::min(xmin,x);
275  ymin=std::min(ymin,y);
276  zmin=std::min(zmin,z);
277  }
278 
279  }
280 BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
281 return boite;
282 }
283 
284 
285 
286 void MG_VOLUME_ELEMENT::enregistrer(std::ostream& o,double version)
287 {
288  int nb=get_nb_ccf();
289  int nbele=get_nb_element();
290  o <<"%" << get_id() << "=VOLUME_ELEMENT(" << nbele << ",(";
291  /*for (int i=0;i<nbele;i++)
292  if (i!=nbele-1) o << "$" << get_element(i)->get_id() << ",";
293  else o << "$" << get_element(nbele-1)->get_id() ;*/
294  o << "),";
295  if (version>2.35)
296  {
297  enregistrer_contraintes(o,version);
298  o << ",";
299  }
300  enregistrer_ccf(o,version);
301  o << ");" << std::endl;
302 
303 }
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
gestionversion.h
MG_PENTA::get_noeud6
virtual MG_NOEUD * get_noeud6(void)
Definition: mg_penta.cpp:195
MG_PENTA
Definition: mg_penta.h:37
MG_VOLUME_ELEMENT::~MG_VOLUME_ELEMENT
virtual ~MG_VOLUME_ELEMENT()
Definition: mg_volume_element.cpp:42
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
TPL_SET
Definition: tpl_set.h:34
MG_VOLUME_ELEMENT::get_element
virtual MG_ELEMENT_MAILLAGE * get_element(int i)
Definition: mg_volume_element.cpp:60
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
MAGIC::TYPE_ENTITE::IDMG_HEXA
@ IDMG_HEXA
Definition: mg_definition.h:69
MG_PENTA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_penta.cpp:172
MG_ELEMENT_MAILLAGE::change_lien_topologie
void change_lien_topologie(MG_ELEMENT_TOPOLOGIQUE *topo)
Definition: mg_element_maillage.cpp:56
MG_VOLUME
Definition: mg_volume.h:33
MG_TETRA
Definition: mg_tetra.h:37
MG_HEXA
Definition: mg_hexa.h:37
MG_HEXA::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_hexa.cpp:218
MG_ELEMENT_TOPOLOGIQUE::get_lien_maillage
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
Definition: mg_element_topologique.cpp:62
MG_HEXA::get_noeud8
virtual MG_NOEUD * get_noeud8(void)
Definition: mg_hexa.cpp:230
MG_HEXA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_hexa.cpp:209
MG_VOLUME_ELEMENT::enregistrer
void enregistrer(std::ostream &o, double version)
Definition: mg_volume_element.cpp:286
MAGIC::TYPE_ENTITE::IDMG_TETRA
@ IDMG_TETRA
Definition: mg_definition.h:69
mg_volume_element.h
MG_VOLUME_ELEMENT::MG_VOLUME_ELEMENT
MG_VOLUME_ELEMENT()
Definition: mg_volume_element.cpp:34
MG_HEXA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_hexa.cpp:204
MG_ELEMENT_TOPOLOGIQUE::get_nb_ccf
virtual int get_nb_ccf(void)
Definition: mg_element_topologique.cpp:154
TPL_SET::get_nb
int get_nb(void)
Definition: tpl_set.h:78
MG_PENTA::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_penta.cpp:191
MAGIC::TYPE_ENTITE::IDMG_PYRAMIDE
@ IDMG_PYRAMIDE
Definition: mg_definition.h:69
MAGIC::TYPE_ENTITE::IDMG_PENTA
@ IDMG_PENTA
Definition: mg_definition.h:69
MG_PYRAMIDE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_pyramide.cpp:163
MG_PYRAMIDE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_pyramide.cpp:168
MG_VOLUME_ELEMENT::est_une_topo_element
virtual bool est_une_topo_element(void)
Definition: mg_volume_element.cpp:46
MG_PENTA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_penta.cpp:177
MG_HEXA::get_noeud6
virtual MG_NOEUD * get_noeud6(void)
Definition: mg_hexa.cpp:222
MG_PYRAMIDE::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_pyramide.cpp:182
MG_VOLUME_ELEMENT
Definition: mg_volume_element.h:32
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
TPL_SET::get
X get(int num)
Definition: tpl_set.h:84
BOITE_3D
Definition: ot_boite_3d.h:27
MG_PENTA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_penta.cpp:182
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
MG_VOLUME_ELEMENT::get_boite_3D
virtual BOITE_3D get_boite_3D(void)
Definition: mg_volume_element.cpp:71
MG_ELEMENT_TOPOLOGIQUE::enregistrer_ccf
virtual void enregistrer_ccf(std::ostream &o, double version)
Definition: mg_element_topologique.cpp:364
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
MG_VOLUME_ELEMENT::get_nb_element
virtual int get_nb_element(void)
Definition: mg_volume_element.cpp:65
mg_penta.h
MG_HEXA::get_noeud7
virtual MG_NOEUD * get_noeud7(void)
Definition: mg_hexa.cpp:226
MG_HEXA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_hexa.cpp:199
MG_PYRAMIDE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_pyramide.cpp:173
mg_pyramide.h
MG_ELEMENT_TOPOLOGIQUE::enregistrer_contraintes
virtual void enregistrer_contraintes(std::ostream &o, double version)
Definition: mg_element_topologique.cpp:403
MG_VOLUME_ELEMENT::ajouter_element
virtual void ajouter_element(MG_ELEMENT_MAILLAGE *ele)
Definition: mg_volume_element.cpp:52
MG_PYRAMIDE
Definition: mg_pyramide.h:37
TPL_SET::get_suivant
X get_suivant(ITERATEUR &it)
Definition: tpl_set.h:107
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82