MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_face_spherique.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_spherique.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_spherique.h"
28 #include "tpl_map_entite.h"
29 #include "rec_contour.h"
30 #include "fem_noeud.h"
31 #include "fem_maillage.h"
32 #include "ot_mathematique.h"
33 
34 
35 #pragma package(smart_init)
36 
37 
38 
39 
40 
41 REC_FACE_SPHERIQUE::REC_FACE_SPHERIQUE(FEM_MAILLAGE* fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION& fonc, int test, int* faces):REC_FACE(fem_mai,Idealise, fonc, test, faces)
42 {
43 
44 }
45 
46 
48 {
49 
50 }
51 
52 void REC_FACE_SPHERIQUE::Reconstruire(MG_FACE* face, double coef)
53 {
54 
55  MG_SURFACE* surface = face->get_surface();
56  TPL_LISTE_ENTITE <double> Parametres;
57  int type_surface = surface->get_type_geometrique(Parametres);
58 
59  double Pnt_Insersion[3];
60  Pnt_Insersion[0]= Parametres.get(0);
61  Pnt_Insersion[1]= Parametres.get(1);
62  Pnt_Insersion[2]= Parametres.get(2);
63  double Vect_Directeur[3];
64  Vect_Directeur[0]= 0.0;
65  Vect_Directeur[1]= 0.0;
66  Vect_Directeur[2]= 1.0;
67  double Rayon = Parametres.get(3);
68 
69 
70  int nb_triangle = face->get_lien_fem_maillage()->get_nb();
71  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds0;
72 
73  for (int j =0; j<nb_triangle;j++)
74  {
76  if (!fem_maillage->contient(mgtri)) continue;
77  if (mgtri->get_nb_fem_noeud()==3)
78  {
79  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
80  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
81  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
82  liste_noeuds0.ajouter(noeud0);
83  liste_noeuds0.ajouter(noeud1);
84  liste_noeuds0.ajouter(noeud2);
85  }
86  if (mgtri->get_nb_fem_noeud()==6)
87  {
88  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
89  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
90  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
91  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
92  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
93  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
94  liste_noeuds0.ajouter(noeud0);
95  liste_noeuds0.ajouter(noeud1);
96  liste_noeuds0.ajouter(noeud2);
97  liste_noeuds0.ajouter(noeud3);
98  liste_noeuds0.ajouter(noeud4);
99  liste_noeuds0.ajouter(noeud5);
100  }
101  }
102 
103  for (int k =0; k < liste_noeuds0.get_nb();k++)
104  {
105  FEM_NOEUD* noeud=liste_noeuds0.get(k);
106  fonction.Ajouter_Point_Array_Ideal(noeud->get_x(),noeud->get_y(),noeud->get_z(),k+1);
107  }
108  fonction.Determiner_Param_Boite(liste_noeuds0.get_nb());
109 
110  double x0 = fonction.Get_Param_Boite(1);
111  double y0 = fonction.Get_Param_Boite(2);
112  double z0 = fonction.Get_Param_Boite(3);
113 
117 
118  Vect_Boite01.norme();
119  Vect_Boite02.norme();
120  Vect_Boite03.norme();
121 
122  //OT_VECTEUR_3D Vect_Dirct0(Vect_Directeur[0],Vect_Directeur[1],Vect_Directeur[2]);
123  //OT_VECTEUR_3D Vect_Directeur_Boite0(Vect_Dirct0*Vect_Boite01,Vect_Dirct0*Vect_Boite02,Vect_Dirct0*Vect_Boite03);
124 
125  //OT_VECTEUR_3D Vect1(Vecteur1[0],Vecteur1[1],Vecteur1[2]);
126  //OT_VECTEUR_3D Vect1_Boite0(Vect1*Vect_Boite01,Vect1*Vect_Boite02,Vect1*Vect_Boite03);
127 
128  OT_VECTEUR_3D Pnt_Inser0(Pnt_Insersion[0]-x0,Pnt_Insersion[1]-y0,Pnt_Insersion[2]-z0);
129  OT_VECTEUR_3D Pnt_Insersion_Boite0(Pnt_Inser0*Vect_Boite01,Pnt_Inser0*Vect_Boite02,Pnt_Inser0*Vect_Boite03);
130 
131  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds1;
132  for (int k =0; k < liste_noeuds0.get_nb();k++)
133  {
134  FEM_NOEUD* noeud=liste_noeuds0.get(k);
135  for (int l =0; l < fem_maillage->get_nb_fem_noeud();l++)
136  {
138  if(noeud0 == noeud)
139  {
140  FEM_NOEUD* noeud1 = fem_maillage->get_fem_noeud(l);
141  fonction.Ajouter_Point_Array_Ideal(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),k+1);
142  liste_noeuds1.ajouter(noeud1);
143  }
144  }
145 
146  }
147  fonction.Determiner_Param_Boite(liste_noeuds1.get_nb());
148 
149  double x1 = fonction.Get_Param_Boite(1);
150  double y1 = fonction.Get_Param_Boite(2);
151  double z1 = fonction.Get_Param_Boite(3);
152 
156 
157  Vect_Boite11.norme();
158  Vect_Boite12.norme();
159  Vect_Boite13.norme();
160 
161  //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());
162  //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());
163  //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());
164 
165  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();
166  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();;
167  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();;
168 
169  //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();
170  //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();
171  //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();
172 
173 
174  fonction.Ligne_Revolution(Pnt_Insersion,Vect_Directeur);
175 
176  double somme_distance = 0.0;
177 
178  for (int u =0; u<liste_noeuds1.get_nb();u++)
179  {
180  FEM_NOEUD* noeud = liste_noeuds1.get(u);
181  double distance = OT_VECTEUR_3D(noeud->get_x(coef)-Pnt_Insersion[0],noeud->get_y(coef)-Pnt_Insersion[1],noeud->get_z(coef)-Pnt_Insersion[2]).get_longueur();
182 
183  somme_distance = somme_distance + distance;
184  }
185 
186  Rayon = somme_distance/liste_noeuds1.get_nb();
187 
188 
189  fonction.Creer_Surf_Spherique(Pnt_Insersion,Vect_Directeur,Rayon);
190 
191 
193  int num_faceid = 0;
194  for (int l =0; l < mggeom->get_nb_mg_face();l++)
195  {
196  MG_FACE* F = mggeom->get_mg_face(l);
197  if(faceso[l]==1) num_faceid = num_faceid+1;
198  if(F == face )
199  {
200  //faceso[l] == 1;
202  goto Face_Trouvee;
203  }
204  }
205  Face_Trouvee:
206 
207 
208 
209  for (int v =0; v<face->get_nb_mg_boucle();v++)
210  {
211  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
213  Rec.Reconstruire(Boucle, coef);
214 
216  }
217 }
218 
220 {
221  //OCC_FONCTION fonction;
222  //fonction.Enregistrer_Face(path);
223 }
224 
225 
226 
227 
228 
229 
230 
231 
232 
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_spherique.h
REC_FACE::testo
int testo
Definition: rec_face.h:46
REC_FACE_SPHERIQUE::Reconstruire
void Reconstruire(MG_FACE *face, double coef)
Definition: rec_face_spherique.cpp:52
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
REC_FACE_SPHERIQUE::Enregistrer
void Enregistrer(char *path)
Definition: rec_face_spherique.cpp:219
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::Creer_Surf_Spherique
int Creer_Surf_Spherique(double Pnt_Insersion[], double Vect_Directeur[], double Rayon)
Definition: occ_fonction_reconstruction.cpp:153
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
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_SPHERIQUE::~REC_FACE_SPHERIQUE
virtual ~REC_FACE_SPHERIQUE()
Definition: rec_face_spherique.cpp:47
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
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
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
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
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
REC_FACE_SPHERIQUE::REC_FACE_SPHERIQUE
REC_FACE_SPHERIQUE(FEM_MAILLAGE *fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION &fonc, int test, int *faces)
Definition: rec_face_spherique.cpp:41
MG_FACE::get_surface
virtual MG_SURFACE * get_surface(void)
Definition: mg_face.cpp:109