MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_face_plane.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_plane.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_plane.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 
36 #pragma package(smart_init)
37 
38 
39 
40 
41 REC_FACE_PLANE::REC_FACE_PLANE(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 
47 {
48 
49 }
50 
51 void REC_FACE_PLANE::Reconstruire(MG_FACE* face, double coef)
52 {
53  //OCC_FONCTION fonction;
54 
55 
56  MG_SURFACE* surface = face->get_surface();
57  TPL_LISTE_ENTITE <double> Parametres;
58  int type_surface = surface->get_type_geometrique(Parametres);
59 
60  double Pnt_Insersion[3];
61  Pnt_Insersion[0]= Parametres.get(0);
62  Pnt_Insersion[1]= Parametres.get(1);
63  Pnt_Insersion[2]= Parametres.get(2);
64  double Vect_Normal[3];
65  Vect_Normal[0]= Parametres.get(3);
66  Vect_Normal[1]= Parametres.get(4);
67  Vect_Normal[2]= Parametres.get(5);
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  double xmin = 1e308, ymin = 1e308, zmin = 1e308;
104  double xmax = -1e308, ymax = -1e308, zmax = -1e308;
105 
106  for (int k =0; k < liste_noeuds0.get_nb();k++)
107  {
108  FEM_NOEUD* noeud=liste_noeuds0.get(k);
109  double* xyz=noeud->get_coord();
110  if (xyz[0]>xmax) xmax=xyz[0];
111  if (xyz[0]<xmin) xmin=xyz[0];
112  if (xyz[1]>ymax) ymax=xyz[1];
113  if (xyz[1]<ymin) ymin=xyz[1];
114  if (xyz[2]>zmax) zmax=xyz[2];
115  if (xyz[2]<zmin) zmin=xyz[2];
116  }
117 
118  double Epsilon = OT_VECTEUR_3D(xmax-xmin,ymax-ymin,zmax-zmin).get_longueur()/10.0;
119 
120  for (int k =0; k < liste_noeuds0.get_nb();k++)
121  {
122  FEM_NOEUD* noeud=liste_noeuds0.get(k);
123  fonction.Ajouter_Point_Array_Ideal(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef),k+1);
124  }
125 
126  fonction.Determiner_Plan(liste_noeuds0.get_nb(),Epsilon);
127 
129  int num_faceid = 0;
130  int nb_face=mggeom->get_nb_mg_face();
131  for (int l =0; l < nb_face;l++)
132  {
133  MG_FACE* F = mggeom->get_mg_face(l);
134  if(faceso[l]==1) num_faceid = num_faceid+1;
135  if(F == face )
136  {
137  //faceso[l] == 1;
139  goto Face_Trouvee;
140  }
141  }
142  Face_Trouvee:
143 
144  //fonction.Creer_Face_Surface();
145 
146  //fonction.Creer_Surf_Plane(Pnt_Insersion,Vect_Normal);
147 
148  int nb_boucle = face->get_nb_mg_boucle();
149 
150 for (int v =0; v<nb_boucle;v++)
151  {
152  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
154  Rec.Reconstruire(Boucle, coef);
155 
157  }
158 }
159 
161 {
163  fonction.Enregistrer(path);
164 }
REC_FACE_PLANE::Enregistrer
void Enregistrer(char *path)
Definition: rec_face_plane.cpp:160
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
OCC_FONCTION_RECONSTRUCTION::Determiner_Plan
int Determiner_Plan(int nb, double Epsilon)
Definition: occ_fonction_reconstruction.cpp:499
REC_FACE::testo
int testo
Definition: rec_face.h:46
REC_FACE_PLANE::~REC_FACE_PLANE
virtual ~REC_FACE_PLANE()
Definition: rec_face_plane.cpp: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
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
REC_FACE_PLANE::REC_FACE_PLANE
REC_FACE_PLANE(FEM_MAILLAGE *mgmai, int Idealise, OCC_FONCTION_RECONSTRUCTION &fonc, int test, int *faces)
Definition: rec_face_plane.cpp:41
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
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
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
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
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
OCC_FONCTION_RECONSTRUCTION::Enregistrer
int Enregistrer(char *path)
Definition: occ_fonction_reconstruction.cpp:58
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
rec_face_plane.h
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 >
REC_BREP::Idealiser
int Idealiser
Definition: rec_brep.h:53
MG_FACE
Definition: mg_face.h:34
REC_FACE_PLANE::Reconstruire
void Reconstruire(MG_FACE *face, double coef)
Definition: rec_face_plane.cpp:51
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