MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_face_torique.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_torique.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_torique.h"
28 #include "tpl_map_entite.h"
29 #include "fem_noeud.h"
30 #include "fem_maillage.h"
31 #include "ot_mathematique.h"
32 
33 
34 #pragma package(smart_init)
35 
36 
37 
38 
39 REC_FACE_TORIQUE::REC_FACE_TORIQUE(FEM_MAILLAGE* fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION& fonc, int test, int* faces):REC_FACE(fem_mai,Idealise, fonc, test, faces)
40 {
41 
42 }
43 
44 
46 {
47 
48 }
49 
50 void REC_FACE_TORIQUE::Reconstruire(MG_FACE* face, double coef)
51 {
52 
53 
54  MG_SURFACE* surface = face->get_surface();
55  TPL_LISTE_ENTITE <double> Parametres;
56  int type_surface = surface->get_type_geometrique(Parametres);
57 
58  double Pnt_Insersion[3];
59  Pnt_Insersion[0]= Parametres.get(0);
60  Pnt_Insersion[1]= Parametres.get(1);
61  Pnt_Insersion[2]= Parametres.get(2);
62  double Vecteur1[3];
63  Vecteur1[0]= Parametres.get(3);
64  Vecteur1[1]= Parametres.get(4);
65  Vecteur1[2]= Parametres.get(5);
66  double Vect_Directeur[3];
67  Vect_Directeur[0]= Parametres.get(6);
68  Vect_Directeur[1]= Parametres.get(7);
69  Vect_Directeur[2]= Parametres.get(8);
70  double GRayon = Parametres.get(9);
71  double PRayon = Parametres.get(10);
72 
73  //OCC_FONCTION fonction;
74 
75 
76 
77  int nb_triangle = face->get_lien_fem_maillage()->get_nb();
78  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds0;
79 
80  for (int j =0; j<nb_triangle;j++)
81  {
83  if (!fem_maillage->contient(mgtri)) continue;
84  if (mgtri->get_nb_fem_noeud()==3)
85  {
86  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
87  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
88  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
89  liste_noeuds0.ajouter(noeud0);
90  liste_noeuds0.ajouter(noeud1);
91  liste_noeuds0.ajouter(noeud2);
92  }
93  if (mgtri->get_nb_fem_noeud()==6)
94  {
95  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
96  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
97  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
98  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
99  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
100  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
101  liste_noeuds0.ajouter(noeud0);
102  liste_noeuds0.ajouter(noeud1);
103  liste_noeuds0.ajouter(noeud2);
104  liste_noeuds0.ajouter(noeud3);
105  liste_noeuds0.ajouter(noeud4);
106  liste_noeuds0.ajouter(noeud5);
107  }
108  }
109 
110  for (int k =0; k < liste_noeuds0.get_nb();k++)
111  {
112  FEM_NOEUD* noeud=liste_noeuds0.get(k);
113  fonction.Ajouter_Point_Array_Ideal(noeud->get_x(),noeud->get_y(),noeud->get_z(),k+1);
114  }
115  fonction.Determiner_Param_Boite(liste_noeuds0.get_nb());
116 
117  double x0 = fonction.Get_Param_Boite(1);
118  double y0 = fonction.Get_Param_Boite(2);
119  double z0 = fonction.Get_Param_Boite(3);
120 
124 
125  Vect_Boite01.norme();
126  Vect_Boite02.norme();
127  Vect_Boite03.norme();
128 
129  OT_VECTEUR_3D Vect_Dirct0(Vect_Directeur[0],Vect_Directeur[1],Vect_Directeur[2]);
130  OT_VECTEUR_3D Vect_Directeur_Boite0(Vect_Dirct0*Vect_Boite01,Vect_Dirct0*Vect_Boite02,Vect_Dirct0*Vect_Boite03);
131 
132  OT_VECTEUR_3D Vect1(Vecteur1[0],Vecteur1[1],Vecteur1[2]);
133  OT_VECTEUR_3D Vect1_Boite0(Vect1*Vect_Boite01,Vect1*Vect_Boite02,Vect1*Vect_Boite03);
134 
135  OT_VECTEUR_3D Pnt_Inser0(Pnt_Insersion[0]-x0,Pnt_Insersion[1]-y0,Pnt_Insersion[2]-z0);
136  OT_VECTEUR_3D Pnt_Insersion_Boite0(Pnt_Inser0*Vect_Boite01,Pnt_Inser0*Vect_Boite02,Pnt_Inser0*Vect_Boite03);
137 
138 
139  OT_VECTEUR_3D Vect_GRayon(0,0,0);
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  OT_VECTEUR_3D V(noeud0->get_coord(), noeud1->get_coord());
155  Vect_GRayon = Vect_GRayon + V;
156  }
157  }
158  }
159  Vect_GRayon = Vect_GRayon/liste_noeuds0.get_nb();
160  Vect_GRayon = Vect_GRayon + OT_VECTEUR_3D(Pnt_Insersion[0],Pnt_Insersion[1],Pnt_Insersion[2]);
161  fonction.Determiner_Param_Boite(liste_noeuds1.get_nb());
162 
163  double x1 = fonction.Get_Param_Boite(1);
164  double y1 = fonction.Get_Param_Boite(2);
165  double z1 = fonction.Get_Param_Boite(3);
166 
170 
171  Vect_Boite11.norme();
172  Vect_Boite12.norme();
173  Vect_Boite13.norme();
174 
175  Vect_Directeur[0]= (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());
176  Vect_Directeur[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());
177  Vect_Directeur[2]= (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());
178 
179  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();
180  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();;
181  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();;
182 
183  Vect_GRayon = Vect_GRayon - OT_VECTEUR_3D(Pnt_Insersion[0],Pnt_Insersion[1],Pnt_Insersion[2]);
184 
185  //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();
186  //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();
187  //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();
188 
189 
190  GRayon = ((GRayon * OT_VECTEUR_3D(Vecteur1[0],Vecteur1[1],Vecteur1[2]))+ Vect_GRayon).get_longueur();
191 
192  fonction.GCercle_Tore(Pnt_Insersion,Vect_Directeur,GRayon);
193 
194  double somme_distance = 0.0;
195 
196  for (int u =0; u<liste_noeuds1.get_nb();u++)
197  {
198  FEM_NOEUD* noeud = liste_noeuds1.get(u);
199 
200  double distance = fonction.Distance_Point_Curve(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
201  somme_distance = somme_distance + distance;
202  }
203 
204  PRayon = somme_distance/liste_noeuds1.get_nb();
205 
206 
207  fonction.Creer_Surface_Torique(Pnt_Insersion,Vect_Directeur,GRayon,PRayon);
208 
209 
211  int num_faceid = 0;
212  for (int l =0; l < mggeom->get_nb_mg_face();l++)
213  {
214  MG_FACE* F = mggeom->get_mg_face(l);
215  if(faceso[l]==1) num_faceid = num_faceid+1;
216  if(F == face )
217  {
218  //faceso[l] == 1;
220  goto Face_Trouvee;
221  }
222  }
223  Face_Trouvee:
224 
225 
226 
227  for (int v =0; v<face->get_nb_mg_boucle();v++)
228  {
229  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
231  Rec.Reconstruire(Boucle, coef);
232 
234  }
235 }
236 
238 {
239  //OCC_FONCTION fonction;
240  //fonction.Enregistrer_Face(path);
241 }
242 
243 
244 
245 
246 
247 
248 
249 
250 
REC_BREP::fonction
OCC_FONCTION_RECONSTRUCTION & fonction
Definition: rec_brep.h:56
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
REC_FACE_TORIQUE::~REC_FACE_TORIQUE
virtual ~REC_FACE_TORIQUE()
Definition: rec_face_torique.cpp:45
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::GCercle_Tore
int GCercle_Tore(double Pnt_Insersion[3], double Vect_Directeur[3], double Rayon)
Definition: occ_fonction_reconstruction.cpp:576
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
FEM_NOEUD::get_coord
virtual double * get_coord(void)
Definition: fem_noeud.cpp:254
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
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
FEM_MAILLAGE
Definition: fem_maillage.h:66
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
V
void V(MCAA *mcaa)
Definition: CAD4FE_MCAA.cpp:1794
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
REC_FACE_TORIQUE::REC_FACE_TORIQUE
REC_FACE_TORIQUE(FEM_MAILLAGE *mgmai, int Idealise, OCC_FONCTION_RECONSTRUCTION &fonc, int test, int *faces)
Definition: rec_face_torique.cpp:39
rec_face_torique.h
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
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
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
REC_FACE_TORIQUE::Enregistrer
void Enregistrer(char *path)
Definition: rec_face_torique.cpp:237
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
TPL_LISTE_ENTITE< double >
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
REC_FACE_TORIQUE::Reconstruire
void Reconstruire(MG_FACE *face, double coef)
Definition: rec_face_torique.cpp:50
OCC_FONCTION_RECONSTRUCTION::Creer_Surface_Torique
int Creer_Surface_Torique(double Pnt_Insersion[], double Vect_Directeur[], double GRayon, double PRayon)
Definition: occ_fonction_reconstruction.cpp:141
MG_FACE::get_surface
virtual MG_SURFACE * get_surface(void)
Definition: mg_face.cpp:109