MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_pyramide.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_pyramide.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_pyramide.h"
26 #include "mg_maillage.h"
27 
28 MG_PYRAMIDE::MG_PYRAMIDE(unsigned long num,MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,class MG_NOEUD *mgnoeud5,class MG_TRIANGLE* mgtriangle1,MG_TRIANGLE* mgtriangle2,MG_TRIANGLE* mgtriangle3,MG_TRIANGLE* mgtriangle4,class MG_QUADRANGLE* mgquadrangle1,int origine):MG_ELEMENT_MAILLAGE(num,topo,origine),noeud1(mgnoeud1),noeud2(mgnoeud2),noeud3(mgnoeud3),noeud4(mgnoeud4),noeud5(mgnoeud5),triangle1(mgtriangle1),triangle2(mgtriangle2),triangle3(mgtriangle3),triangle4(mgtriangle4),quadrangle1(mgquadrangle1)
29 {
30  init_pyramide();
31 }
32 
33 MG_PYRAMIDE::MG_PYRAMIDE(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,class MG_NOEUD *mgnoeud5,class MG_TRIANGLE* mgtriangle1,MG_TRIANGLE* mgtriangle2,MG_TRIANGLE* mgtriangle3,MG_TRIANGLE* mgtriangle4,class MG_QUADRANGLE* mgquadrangle1,int origine):MG_ELEMENT_MAILLAGE(topo,origine),noeud1(mgnoeud1),noeud2(mgnoeud2),noeud3(mgnoeud3),noeud4(mgnoeud4),noeud5(mgnoeud5),triangle1(mgtriangle1),triangle2(mgtriangle2),triangle3(mgtriangle3),triangle4(mgtriangle4),quadrangle1(mgquadrangle1)
34 {
35  init_pyramide();
36 }
37 
38 
39 MG_PYRAMIDE::MG_PYRAMIDE(MG_PYRAMIDE& mdd):MG_ELEMENT_MAILLAGE(mdd),noeud1(mdd.noeud1),noeud2(mdd.noeud2),noeud3(mdd.noeud3),noeud4(mdd.noeud4),noeud5(mdd.noeud5),triangle1(mdd.triangle1),triangle2(mdd.triangle2),triangle3(mdd.triangle3),triangle4(mdd.triangle4),quadrangle1(mdd.quadrangle1)
40 {
41  init_pyramide();
42 }
43 
44 
46 {
47  MG_NOEUD* nd1=mgmai->get_mg_noeudid(noeud1->get_id()+decalage);
48  MG_NOEUD* nd2=mgmai->get_mg_noeudid(noeud2->get_id()+decalage);
49  MG_NOEUD* nd3=mgmai->get_mg_noeudid(noeud3->get_id()+decalage);
50  MG_NOEUD* nd4=mgmai->get_mg_noeudid(noeud4->get_id()+decalage);
51  MG_NOEUD* nd5=mgmai->get_mg_noeudid(noeud5->get_id()+decalage);
52  MG_TRIANGLE* tri1=mgmai->get_mg_triangleid(triangle1->get_id()+decalage);
53  MG_TRIANGLE* tri2=mgmai->get_mg_triangleid(triangle2->get_id()+decalage);
54  MG_TRIANGLE* tri3=mgmai->get_mg_triangleid(triangle3->get_id()+decalage);
55  MG_TRIANGLE* tri4=mgmai->get_mg_triangleid(triangle4->get_id()+decalage);
56  MG_QUADRANGLE* quad1=mgmai->get_mg_quadrangleid(quadrangle1->get_id()+decalage);
57  MG_PYRAMIDE* pyr=new MG_PYRAMIDE(this->get_id()+decalage,liaison_topologique,nd1,nd2,nd3,nd4,nd5,tri1,tri2,tri3,tri4,quad1,MAGIC::ORIGINE::DUPLIQUER);
58  mgmai->ajouter_mg_pyramide(pyr);
59  return pyr;
60 }
61 
63 {
64  if (noeud1!=NULL) noeud1->get_lien_pyramide()->supprimer(this);
65  if (noeud2!=NULL) noeud2->get_lien_pyramide()->supprimer(this);
66  if (noeud3!=NULL) noeud3->get_lien_pyramide()->supprimer(this);
67  if (noeud4!=NULL) noeud4->get_lien_pyramide()->supprimer(this);
68  if (noeud5!=NULL) noeud5->get_lien_pyramide()->supprimer(this);
69  unsigned long noeudminid=std::min(noeud1->get_id(),noeud2->get_id());
70  noeudminid=std::min(noeudminid,noeud3->get_id());
71  noeudminid=std::min(noeudminid,noeud4->get_id());
72  noeudminid=std::min(noeudminid,noeud5->get_id());
73  if (noeud1!=NULL)
74  if (noeud1->get_id()==noeudminid) noeud1->get_lien_petit_pyramide()->supprimer(this);
75  if (noeud2!=NULL)
76  if (noeud2->get_id()==noeudminid) noeud2->get_lien_petit_pyramide()->supprimer(this);
77  if (noeud3!=NULL)
78  if (noeud3->get_id()==noeudminid) noeud3->get_lien_petit_pyramide()->supprimer(this);
79  if (noeud4!=NULL)
80  if (noeud4->get_id()==noeudminid) noeud4->get_lien_petit_pyramide()->supprimer(this);
81  if (noeud5!=NULL)
82  if (noeud5->get_id()==noeudminid) noeud5->get_lien_petit_pyramide()->supprimer(this);
83  if (triangle1!=NULL) {
86  }
87  if (triangle2!=NULL) {
90  }
91  if (triangle3!=NULL) {
94  }
95  if (triangle4!=NULL) {
98  }
99  if (quadrangle1!=NULL) {
102  }
103  if (liaison_topologique!=NULL)
105 }
106 
108 {
109  if (noeud1!=NULL) noeud1->get_lien_pyramide()->ajouter(this);
110  if (noeud2!=NULL) noeud2->get_lien_pyramide()->ajouter(this);
111  if (noeud3!=NULL) noeud3->get_lien_pyramide()->ajouter(this);
112  if (noeud4!=NULL) noeud4->get_lien_pyramide()->ajouter(this);
113  if (noeud5!=NULL) noeud5->get_lien_pyramide()->ajouter(this);
114  unsigned long noeudminid=std::min(noeud1->get_id(),noeud2->get_id());
115  noeudminid=std::min(noeudminid,noeud3->get_id());
116  noeudminid=std::min(noeudminid,noeud4->get_id());
117  noeudminid=std::min(noeudminid,noeud5->get_id());
118  if (noeud1!=NULL)
119  if (noeud1->get_id()==noeudminid) noeud1->get_lien_petit_pyramide()->ajouter(this);
120  if (noeud2!=NULL)
121  if (noeud2->get_id()==noeudminid) noeud2->get_lien_petit_pyramide()->ajouter(this);
122  if (noeud3!=NULL)
123  if (noeud3->get_id()==noeudminid) noeud3->get_lien_petit_pyramide()->ajouter(this);
124  if (noeud4!=NULL)
125  if (noeud4->get_id()==noeudminid) noeud4->get_lien_petit_pyramide()->ajouter(this);
126  if (noeud5!=NULL)
127  if (noeud5->get_id()==noeudminid) noeud5->get_lien_petit_pyramide()->ajouter(this);
128  if (triangle1!=NULL) {
131  }
132  if (triangle2!=NULL) {
135  }
136  if (triangle3!=NULL) {
139  }
140  if (triangle4!=NULL) {
143  }
144  if (quadrangle1!=NULL) {
147  }
148 
149  if (liaison_topologique==NULL) return;
151 }
152 
153 
155 {
157 }
158 
159 
160 
161 
162 
164 {
165  return noeud1;
166 }
167 
169 {
170  return noeud2;
171 }
172 
174 {
175  return noeud3;
176 }
177 
179 {
180  return noeud4;
181 }
183 {
184  return noeud5;
185 }
186 
187 
189 {
190  return quadrangle1;
191 }
192 
194 {
195  return triangle1;
196 }
197 
199 {
200  return triangle2;
201 }
203 {
204  return triangle3;
205 }
206 
208 {
209  return triangle4;
210 }
211 
213 {
214 MG_NOEUD* noeud=noeud4;
215 noeud4=noeud2;
216 noeud2=noeud;
217 MG_TRIANGLE* triangle=triangle1;
219 triangle4=triangle;
220 triangle=triangle2;
222 triangle3=triangle;
223 }
224 
225 
227 {
228  return 3;
229 }
230 
231 
233 {
234  double coo1[3];
235  double coo2[3];
236  double coo3[3];
237  double coo4[3];
238  double coo5[3];
239  coo1[0]=noeud1->get_x();
240  coo1[1]=noeud1->get_y();
241  coo1[2]=noeud1->get_z();
242  coo2[0]=noeud2->get_x();
243  coo2[1]=noeud2->get_y();
244  coo2[2]=noeud2->get_z();
245  coo3[0]=noeud3->get_x();
246  coo3[1]=noeud3->get_y();
247  coo3[2]=noeud3->get_z();
248  coo4[0]=noeud4->get_x();
249  coo4[1]=noeud4->get_y();
250  coo4[2]=noeud4->get_z();
251  coo5[0]=noeud5->get_x();
252  coo5[1]=noeud5->get_y();
253  coo5[2]=noeud5->get_z();
254  double xmin,ymin,zmin,xmax,ymax,zmax;
255  xmin=std::min(coo1[0],coo2[0]);
256  xmin=std::min(xmin,coo3[0]);
257  xmin=std::min(xmin,coo4[0]);
258  xmin=std::min(xmin,coo5[0]);
259  xmax=std::max(coo1[0],coo2[0]);
260  xmax=std::max(xmax,coo3[0]);
261  xmax=std::max(xmax,coo4[0]);
262  xmax=std::max(xmax,coo5[0]);
263  ymin=std::min(coo1[1],coo2[1]);
264  ymin=std::min(ymin,coo3[1]);
265  ymin=std::min(ymin,coo4[1]);
266  ymin=std::min(ymin,coo5[1]);
267  ymax=std::max(coo1[1],coo2[1]);
268  ymax=std::max(ymax,coo3[1]);
269  ymax=std::max(ymax,coo4[1]);
270  ymax=std::max(ymax,coo5[1]);
271  zmin=std::min(coo1[2],coo2[2]);
272  zmin=std::min(zmin,coo3[2]);
273  zmin=std::min(zmin,coo4[2]);
274  zmin=std::min(zmin,coo5[2]);
275  zmax=std::max(coo1[2],coo2[2]);
276  zmax=std::max(zmax,coo3[2]);
277  zmax=std::max(zmax,coo4[2]);
278  zmax=std::max(zmax,coo5[2]);
279  BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
280  return boite;
281 }
283 {
284  for (int j=0;j<MAX_TYPE_SOLUTION;j++)
285  {
291  }
292 }
293 
294 void MG_PYRAMIDE::enregistrer(std::ostream& o,double version)
295 {
297  if (liaison_topologique==NULL) o << "%" << get_id() << "=PYRAMIDE(NULL,$" << noeud1->get_id() << ",$" << noeud2->get_id() << ",$" << noeud3->get_id() << ",$" << noeud4->get_id() << ",$" << noeud5->get_id() << "," << origine_creation << ");" << std::endl;
298  else if (liaison_topologique->get_dimension()==3) o << "%" << get_id() << "=PYRAMIDE($"<< get_lien_topologie()->get_id() << ",$" << noeud1->get_id() << ",$" << noeud2->get_id() << ",$" << noeud3->get_id() << ",$" << noeud4->get_id() << ",$" <<noeud5->get_id() << "," << origine_creation << ");" << std::endl;
299 }
300 
301 
302 
303 
304 
305 
MG_ELEMENT_MAILLAGE::change_solution
virtual void change_solution(double val, int num=0)
Definition: mg_element_maillage.cpp:107
MG_PYRAMIDE::get_dimension
virtual int get_dimension(void)
Definition: mg_pyramide.cpp:226
MG_PYRAMIDE::noeud3
class MG_NOEUD * noeud3
Definition: mg_pyramide.h:75
gestionversion.h
MG_PYRAMIDE::quadrangle1
class MG_QUADRANGLE * quadrangle1
Definition: mg_pyramide.h:83
MG_PYRAMIDE::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_pyramide.cpp:193
MG_PYRAMIDE::init_pyramide
void init_pyramide(void)
Definition: mg_pyramide.cpp:107
MG_PYRAMIDE::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_pyramide.cpp:198
MG_ELEMENT_MAILLAGE::origine_creation
int origine_creation
Definition: mg_element_maillage.h:72
MG_PYRAMIDE::noeud1
class MG_NOEUD * noeud1
Definition: mg_pyramide.h:73
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_PYRAMIDE::triangle1
class MG_TRIANGLE * triangle1
Definition: mg_pyramide.h:79
MG_QUADRANGLE::get_lien_pyramide
TPL_LISTE_ENTITE< class MG_PYRAMIDE * > * get_lien_pyramide(void)
Definition: mg_quadrangle.cpp:216
MG_PYRAMIDE::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_pyramide.cpp:294
MG_PYRAMIDE::MG_PYRAMIDE
MG_PYRAMIDE(unsigned long num, MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, class MG_NOEUD *mgnoeud4, class MG_NOEUD *mgnoeud5, class MG_TRIANGLE *mgtriangle1, MG_TRIANGLE *mgtriangle2, MG_TRIANGLE *mgtriangle3, MG_TRIANGLE *mgtriangle4, class MG_QUADRANGLE *mgquadrangle1, int origine)
Definition: mg_pyramide.cpp:28
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
MG_PYRAMIDE::dupliquer
virtual MG_PYRAMIDE * dupliquer(class MG_MAILLAGE *mgmai, long decalage)
Definition: mg_pyramide.cpp:45
TPL_SET::supprimer
void supprimer(X x)
Definition: tpl_set.h:62
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_PYRAMIDE::triangle3
class MG_TRIANGLE * triangle3
Definition: mg_pyramide.h:81
MG_QUADRANGLE
Definition: mg_quadrangle.h:39
MG_ELEMENT_TOPOLOGIQUE::get_lien_maillage
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
Definition: mg_element_topologique.cpp:62
MG_PYRAMIDE::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_pyramide.cpp:178
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_ELEMENT_MAILLAGE::solution
double solution[MAX_TYPE_SOLUTION]
Definition: mg_element_maillage.h:73
MG_PYRAMIDE::noeud5
class MG_NOEUD * noeud5
Definition: mg_pyramide.h:77
MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO
static int DIMENSIONMAILLAGESANSTOPO
Definition: mg_maillage.h:177
MG_NOEUD::get_lien_petit_pyramide
TPL_LISTE_ENTITE< class MG_PYRAMIDE * > * get_lien_petit_pyramide(void)
Definition: mg_noeud.cpp:214
MG_MAILLAGE::ajouter_mg_pyramide
MG_PYRAMIDE * ajouter_mg_pyramide(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, class MG_NOEUD *mgnoeud4, class MG_NOEUD *mgnoeud5, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:1926
TPL_SET::ajouter
void ajouter(X x)
Definition: tpl_set.h:55
MG_NOEUD::get_lien_pyramide
TPL_LISTE_ENTITE< class MG_PYRAMIDE * > * get_lien_pyramide(void)
Definition: mg_noeud.cpp:208
MG_NOEUD
Definition: mg_noeud.h:41
MAGIC::TYPE_ENTITE::IDMG_PYRAMIDE
@ IDMG_PYRAMIDE
Definition: mg_definition.h:69
MAX_TYPE_SOLUTION
const int MAX_TYPE_SOLUTION
Definition: mg_definition.h:42
MG_PYRAMIDE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_pyramide.cpp:163
MG_ELEMENT_MAILLAGE::liaison_topologique
MG_ELEMENT_TOPOLOGIQUE * liaison_topologique
Definition: mg_element_maillage.h:69
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
MG_TRIANGLE::get_lien_pyramide
TPL_LISTE_ENTITE< class MG_PYRAMIDE * > * get_lien_pyramide(void)
Definition: mg_triangle.cpp:187
MG_PYRAMIDE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_pyramide.cpp:168
MG_PYRAMIDE::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_pyramide.cpp:182
MG_PYRAMIDE::noeud2
class MG_NOEUD * noeud2
Definition: mg_pyramide.h:74
MAGIC::ORIGINE::DUPLIQUER
@ DUPLIQUER
Definition: mg_definition.h:79
MG_MAILLAGE::get_mg_noeudid
MG_NOEUD * get_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:451
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
OT_REFERENCE::decrementer
void decrementer(void)
Definition: ot_reference.cpp:45
BOITE_3D
Definition: ot_boite_3d.h:27
MG_PYRAMIDE::noeud4
class MG_NOEUD * noeud4
Definition: mg_pyramide.h:76
mg_maillage.h
MG_PYRAMIDE::extrapoler_solution_noeud
virtual void extrapoler_solution_noeud(void)
Definition: mg_pyramide.cpp:282
MG_PYRAMIDE::get_triangle3
virtual MG_TRIANGLE * get_triangle3(void)
Definition: mg_pyramide.cpp:202
MG_PYRAMIDE::triangle4
class MG_TRIANGLE * triangle4
Definition: mg_pyramide.h:82
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
MG_PYRAMIDE::triangle2
class MG_TRIANGLE * triangle2
Definition: mg_pyramide.h:80
OT_REFERENCE::incrementer
void incrementer(void)
Definition: ot_reference.cpp:40
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_PYRAMIDE::get_quadrangle1
virtual MG_QUADRANGLE * get_quadrangle1(void)
Definition: mg_pyramide.cpp:188
MG_PYRAMIDE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_pyramide.cpp:173
MG_PYRAMIDE::get_triangle4
virtual MG_TRIANGLE * get_triangle4(void)
Definition: mg_pyramide.cpp:207
mg_pyramide.h
MG_MAILLAGE::get_mg_triangleid
MG_TRIANGLE * get_mg_triangleid(unsigned long num)
Definition: mg_maillage.cpp:772
MG_MAILLAGE::get_mg_quadrangleid
MG_QUADRANGLE * get_mg_quadrangleid(unsigned long num)
Definition: mg_maillage.cpp:973
MG_PYRAMIDE::get_boite_3D
virtual class BOITE_3D get_boite_3D(void)
Definition: mg_pyramide.cpp:232
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
MG_PYRAMIDE::~MG_PYRAMIDE
virtual ~MG_PYRAMIDE()
Definition: mg_pyramide.cpp:62
MG_PYRAMIDE::inverse_sens
virtual void inverse_sens(void)
Definition: mg_pyramide.cpp:212
MG_PYRAMIDE::get_type_entite
virtual int get_type_entite(void)
Definition: mg_pyramide.cpp:154
MG_PYRAMIDE
Definition: mg_pyramide.h:37
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82