MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_face_cylindrique.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 //####// rec_face_cylindrique.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "gestionversion.h"
23 
24 #pragma hdrstop
25 
26 #include "occ_fonction.h"
27 #include "rec_face_cylindrique.h"
28 #include "tpl_map_entite.h"
29 #include "tpl_liste_entite.h"
30 #include "rec_contour.h"
31 #include "fem_noeud.h"
32 #include "fem_maillage.h"
33 #include "ot_mathematique.h"
34 
35 #pragma package(smart_init)
36 
37 
38 
39 
40 
41 
42 
43 REC_FACE_CYLINDRIQUE::REC_FACE_CYLINDRIQUE(FEM_MAILLAGE* fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION& fonc, int test, int* faces): REC_FACE(fem_mai,Idealise, fonc, test, faces)
44 {
45 
46 }
47 
48 
50 {
51 
52 }
53 
55 {
56 
57 
58  MG_SURFACE* surface = face->get_surface();
59  TPL_LISTE_ENTITE <double> Parametres;
60  int type_surface = surface->get_type_geometrique(Parametres);
61 
62  double Pnt_Insersion[3];
63  double Vecteur1[3];
64  double Vect_Directeur[3];
65 
66  Pnt_Insersion[0]= Parametres.get(0);
67  Pnt_Insersion[1]= Parametres.get(1);
68  Pnt_Insersion[2]= Parametres.get(2);
69 
70  Vecteur1[0]= Parametres.get(3);
71  Vecteur1[1]= Parametres.get(4);
72  Vecteur1[2]= Parametres.get(5);
73 
74  Vect_Directeur[0]= Parametres.get(6);
75  Vect_Directeur[1]= Parametres.get(7);
76  Vect_Directeur[2]= Parametres.get(8);
77  double Rayon = Parametres.get(9);
78 
79 
80  int nb_triangle = face->get_lien_fem_maillage()->get_nb();
81  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds0;
82 
83  for (int j =0; j<nb_triangle;j++)
84  {
86  if (!fem_maillage->contient(mgtri)) continue;
87  if (mgtri->get_nb_fem_noeud()==3)
88  {
89  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
90  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
91  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
92  liste_noeuds0.ajouter(noeud0);
93  liste_noeuds0.ajouter(noeud1);
94  liste_noeuds0.ajouter(noeud2);
95  }
96  if (mgtri->get_nb_fem_noeud()==6)
97  {
98  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
99  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
100  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
101  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
102  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
103  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
104  liste_noeuds0.ajouter(noeud0);
105  liste_noeuds0.ajouter(noeud1);
106  liste_noeuds0.ajouter(noeud2);
107  liste_noeuds0.ajouter(noeud3);
108  liste_noeuds0.ajouter(noeud4);
109  liste_noeuds0.ajouter(noeud5);
110  }
111  }
112 
113  for (int k =0; k < liste_noeuds0.get_nb();k++)
114  {
115  FEM_NOEUD* noeud=liste_noeuds0.get(k);
116  fonction.Ajouter_Point_Array_Ideal(noeud->get_x(),noeud->get_y(),noeud->get_z(),k+1);
117  }
118  fonction.Determiner_Param_Boite(liste_noeuds0.get_nb());
119 
120  double x0 = fonction.Get_Param_Boite(1);
121  double y0 = fonction.Get_Param_Boite(2);
122  double z0 = fonction.Get_Param_Boite(3);
123 
127 
128  Vect_Boite01.norme();
129  Vect_Boite02.norme();
130  Vect_Boite03.norme();
131 
132  OT_VECTEUR_3D Vect_Dirct0(Vect_Directeur[0],Vect_Directeur[1],Vect_Directeur[2]);
133  OT_VECTEUR_3D Vect_Directeur_Boite0(Vect_Dirct0*Vect_Boite01,Vect_Dirct0*Vect_Boite02,Vect_Dirct0*Vect_Boite03);
134 
135  OT_VECTEUR_3D Vect1(Vecteur1[0],Vecteur1[1],Vecteur1[2]);
136  OT_VECTEUR_3D Vect1_Boite0(Vect1*Vect_Boite01,Vect1*Vect_Boite02,Vect1*Vect_Boite03);
137 
138  OT_VECTEUR_3D Pnt_Inser0(Pnt_Insersion[0]-x0,Pnt_Insersion[1]-y0,Pnt_Insersion[2]-z0);
139  OT_VECTEUR_3D Pnt_Insersion_Boite0(Pnt_Inser0*Vect_Boite01,Pnt_Inser0*Vect_Boite02,Pnt_Inser0*Vect_Boite03);
140 
141  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds1;
142  for (int k =0; k < liste_noeuds0.get_nb();k++)
143  {
144  FEM_NOEUD* noeud=liste_noeuds0.get(k);
145  for (int l =0; l < fem_maillage->get_nb_fem_noeud();l++)
146  {
148  if(noeud0 == noeud)
149  {
150  FEM_NOEUD* noeud1 = fem_maillage->get_fem_noeud(l);
151  fonction.Ajouter_Point_Array_Ideal(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),k+1);
152  liste_noeuds1.ajouter(noeud1);
153  }
154  }
155 
156  }
157  fonction.Determiner_Param_Boite(liste_noeuds1.get_nb());
158 
159  double x1 = fonction.Get_Param_Boite(1);
160  double y1 = fonction.Get_Param_Boite(2);
161  double z1 = fonction.Get_Param_Boite(3);
162 
166 
167  Vect_Boite11.norme();
168  Vect_Boite12.norme();
169  Vect_Boite13.norme();
170 
171  Vect_Directeur[0]= -1*(Vect_Directeur_Boite0.get_x()*Vect_Boite11.get_x()+Vect_Directeur_Boite0.get_y()*Vect_Boite12.get_x()+Vect_Directeur_Boite0.get_z()*Vect_Boite13.get_x());
172  Vect_Directeur[1]= -1*(Vect_Directeur_Boite0.get_x()*Vect_Boite11.get_y()+Vect_Directeur_Boite0.get_y()*Vect_Boite12.get_y()+Vect_Directeur_Boite0.get_z()*Vect_Boite13.get_y());
173  Vect_Directeur[2]= -1*(Vect_Directeur_Boite0.get_x()*Vect_Boite11.get_z()+Vect_Directeur_Boite0.get_y()*Vect_Boite12.get_z()+Vect_Directeur_Boite0.get_z()*Vect_Boite13.get_z());
174 
175  Pnt_Insersion[0]= x1 + Pnt_Insersion_Boite0.get_x()*Vect_Boite11.get_x()+Pnt_Insersion_Boite0.get_y()*Vect_Boite12.get_x()+Pnt_Insersion_Boite0.get_z()*Vect_Boite13.get_x();
176  Pnt_Insersion[1]= y1 + Pnt_Insersion_Boite0.get_x()*Vect_Boite11.get_y()+Pnt_Insersion_Boite0.get_y()*Vect_Boite12.get_y()+Pnt_Insersion_Boite0.get_z()*Vect_Boite13.get_y();;
177  Pnt_Insersion[2]= z1 + Pnt_Insersion_Boite0.get_x()*Vect_Boite11.get_z()+Pnt_Insersion_Boite0.get_y()*Vect_Boite12.get_z()+Pnt_Insersion_Boite0.get_z()*Vect_Boite13.get_z();;
178 
179  Vecteur1[0]= (Vect1_Boite0.get_x()*Vect_Boite11.get_x()+Vect1_Boite0.get_y()*Vect_Boite12.get_x()+Vect1_Boite0.get_z()*Vect_Boite13.get_x());
180  Vecteur1[1]= (Vect1_Boite0.get_x()*Vect_Boite11.get_y()+Vect1_Boite0.get_y()*Vect_Boite12.get_y()+Vect1_Boite0.get_z()*Vect_Boite13.get_y());
181  Vecteur1[2]= (Vect1_Boite0.get_x()*Vect_Boite11.get_z()+Vect1_Boite0.get_y()*Vect_Boite12.get_z()+Vect1_Boite0.get_z()*Vect_Boite13.get_z());
182 
183 
184  fonction.Ligne_Revolution(Pnt_Insersion,Vect_Directeur);
185 
186  double somme_distance = 0.0;
187 
188  for (int u =0; u<liste_noeuds1.get_nb();u++)
189  {
190  FEM_NOEUD* noeud = liste_noeuds1.get(u);
191 
192  double distance = fonction.Distance_Point_Curve(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
193  somme_distance = somme_distance + distance;
194  }
195 
196  Rayon = somme_distance/liste_noeuds1.get_nb();
197 
198 
199  //fonction.Creer_Surface_Cylindrique_Revolution(Pnt_Insersion,Vect_Directeur,Vecteur1,Rayon);
200  fonction.Creer_Surface_Cylindrique(Pnt_Insersion,Vect_Directeur,Rayon);
201 
202  //fonction.Creer_Face_Surface();
203 
205  int num_faceid = 0;
206  for (int l =0; l < mggeom->get_nb_mg_face();l++)
207  {
208  MG_FACE* F = mggeom->get_mg_face(l);
209  if(faceso[l]==1) num_faceid = num_faceid+1;
210  if(F == face )
211  {
212  //faceso[l] == 1;
214  goto Face_Trouvee;
215  }
216  }
217  Face_Trouvee:
218 
219  int nb_boucle = face->get_nb_mg_boucle();
220 
221  for (int v =0; v<face->get_nb_mg_boucle();v++)
222  {
223  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
225  Rec.Reconstruire(Boucle, coef);
226 
228  }
229 
230 
231 
232 }
233 
235 {
236 
237 }
238 
239 
240 
241 
242 
243 
244 
245 
246 
REC_BREP::fonction
OCC_FONCTION_RECONSTRUCTION & fonction
Definition: rec_brep.h:56
REC_FACE_CYLINDRIQUE::REC_FACE_CYLINDRIQUE
REC_FACE_CYLINDRIQUE(FEM_MAILLAGE *mgmai, int Idealise, OCC_FONCTION_RECONSTRUCTION &fonc, int test, int *faces)
Definition: rec_face_cylindrique.cpp:43
OCC_FONCTION_RECONSTRUCTION
Definition: occ_fonction_reconstruction.h:84
MG_BOUCLE
Definition: mg_boucle.h:35
gestionversion.h
MG_SURFACE
Definition: mg_surface.h:31
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
MG_SURFACE::get_type_geometrique
virtual int get_type_geometrique(TPL_LISTE_ENTITE< double > &param)=0
REC_BREP::fem_maillage
FEM_MAILLAGE * fem_maillage
Definition: rec_brep.h:52
REC_FACE::testo
int testo
Definition: rec_face.h:46
fem_maillage.h
OCC_FONCTION_RECONSTRUCTION::Ajouter_Point_Array_Ideal
int Ajouter_Point_Array_Ideal(double x, double y, double z, int i)
Definition: occ_fonction_reconstruction.cpp:452
fem_noeud.h
OCC_FONCTION_RECONSTRUCTION::Ajouter_Contour_Face
int Ajouter_Contour_Face(int ii)
Definition: occ_fonction_reconstruction.cpp:71
OCC_FONCTION_RECONSTRUCTION::Ajouter_Surface_liste_Ideal
int Ajouter_Surface_liste_Ideal(int num)
Definition: occ_fonction_reconstruction.cpp:590
FEM_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: fem_maillage.cpp:88
OCC_FONCTION_RECONSTRUCTION::Distance_Point_Curve
double Distance_Point_Curve(double x, double y, double z)
Definition: occ_fonction_reconstruction.cpp:527
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
MG_FACE::get_nb_mg_boucle
virtual int get_nb_mg_boucle(void)
Definition: mg_face.cpp:67
FEM_ELEMENT2
Definition: fem_element2.h:34
FEM_MAILLAGE::get_nb_fem_noeud
unsigned int get_nb_fem_noeud(void)
Definition: fem_maillage.cpp:190
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
REC_CONTOUR
Definition: rec_contour.h:33
FEM_ELEMENT2::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
REC_FACE
Definition: rec_face.h:34
REC_FACE_CYLINDRIQUE::Enregistrer
void Enregistrer(char *path)
Definition: rec_face_cylindrique.cpp:234
OCC_FONCTION_RECONSTRUCTION::Determiner_Param_Boite
int Determiner_Param_Boite(int i)
Definition: occ_fonction_reconstruction.cpp:460
FEM_MAILLAGE::get_fem_noeud
FEM_NOEUD * get_fem_noeud(unsigned int num)
Definition: fem_maillage.cpp:162
rec_contour.h
FEM_MAILLAGE
Definition: fem_maillage.h:66
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
REC_FACE::faceso
int * faceso
Definition: rec_face.h:47
tpl_map_entite.h
OCC_FONCTION_RECONSTRUCTION::Get_Param_Boite
double Get_Param_Boite(int i)
Definition: occ_fonction_reconstruction.cpp:492
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
MG_GEOMETRIE::get_mg_face
MG_FACE * get_mg_face(unsigned int num)
Definition: mg_geometrie.cpp:1251
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
ot_mathematique.h
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
FEM_NOEUD
Definition: fem_noeud.h:35
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
REC_CONTOUR::Reconstruire
void Reconstruire(MG_BOUCLE *Boucle, double coef)
Definition: rec_contour.cpp:45
MG_GEOMETRIE::get_nb_mg_face
unsigned int get_nb_mg_face(void)
Definition: mg_geometrie.cpp:1264
REC_FACE_CYLINDRIQUE::~REC_FACE_CYLINDRIQUE
virtual ~REC_FACE_CYLINDRIQUE()
Definition: rec_face_cylindrique.cpp:49
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
rec_face_cylindrique.h
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
REC_FACE_CYLINDRIQUE::Reconstruire
void Reconstruire(MG_FACE *face, double coef)
Definition: rec_face_cylindrique.cpp:54
FEM_MAILLAGE::contient
bool contient(MG_IDENTIFICATEUR *id)
Definition: fem_maillage.cpp:110
TPL_MAP_ENTITE::get
virtual X get(int num)
Definition: tpl_map_entite.h:89
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
MG_ELEMENT_TOPOLOGIQUE::get_lien_fem_maillage
virtual TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * > * get_lien_fem_maillage(void)
Definition: mg_element_topologique.cpp:67
MG_GEOMETRIE
Definition: mg_geometrie.h:84
OCC_FONCTION_RECONSTRUCTION::Creer_Surface_Cylindrique
int Creer_Surface_Cylindrique(double Pnt_Insersion[3], double Vect_Directeur[3], double Rayon)
Definition: occ_fonction_reconstruction.cpp:116
TPL_LISTE_ENTITE< double >
OCC_FONCTION_RECONSTRUCTION::Ligne_Revolution
int Ligne_Revolution(double Pnt_Inser[], double Vect_Direc[])
Definition: occ_fonction_reconstruction.cpp:516
REC_BREP::Idealiser
int Idealiser
Definition: rec_brep.h:53
MG_FACE
Definition: mg_face.h:34
occ_fonction.h
MG_FACE::get_mg_boucle
virtual MG_BOUCLE * get_mg_boucle(int num)
Definition: mg_face.cpp:72
tpl_liste_entite.h
MG_FACE::get_surface
virtual MG_SURFACE * get_surface(void)
Definition: mg_face.cpp:109