ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/mailleur3d_peau.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (10 months, 4 weeks ago) by francois
Original Path: magic/lib/mailleur_auto/src/mailleur3d_peau.cpp
File size: 7177 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
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     //####// mailleur3d_peau.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:55 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 420 #include "gestionversion.h"
23     #include "mailleur3d_peau.h"
24     #include "fct_taille.h"
25     #include "mg_volume.h"
26     #include "m3d_triangle.h"
27    
28    
29    
30    
31    
32 francois 1150 MAILLEUR3D_PEAU::MAILLEUR3D_PEAU(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,MG_VOLUME* mgvol,FCT_TAILLE* fct_taille,bool save):MAILLEUR3D(mgmai,mggeo,fct_taille,save,mgvol,MAGIC::MAILLEURFRONTALETAT::TOUTDETRUIRE)
33 francois 420 {
34    
35     }
36    
37    
38     MAILLEUR3D_PEAU::~MAILLEUR3D_PEAU()
39     {
40     }
41    
42    
43    
44     void MAILLEUR3D_PEAU::cree_front(MG_VOLUME* mgvol)
45     {
46 francois 1082 bool bienori=orientation_peau();
47     char chaine[255];
48     strcpy(chaine," Bonne orientation de la peau");
49     if (!bienori) strcpy(chaine," Changement d'orientation de la peau");
50     affiche(chaine);
51 francois 420 LISTE_MG_TRIANGLE::iterator it;
52     TPL_MAP_ENTITE<M3D_TRIANGLE*> lsttrim3d;
53    
54     for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(it);tri!=NULL;tri=mg_maillage->get_suivant_triangle(it))
55     {
56 francois 532 M3D_TRIANGLE* nvtri=new M3D_TRIANGLE(tri->get_id(),tri->get_lien_topologie(),tri->get_noeud1(),tri->get_noeud2(),tri->get_noeud3(),tri->get_segment1(),tri->get_segment2(),tri->get_segment3(),tri->get_origine());
57 francois 420 nvtri->change_frontiere();
58 francois 830 //if (tri->get_lien_topologie()==NULL)
59     if (tri->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO)
60 francois 532 {
61 francois 830 /*nvtri->change_origine(MAGIC::ORIGINE::IMPOSE);
62 francois 791 nvtri->get_noeud1()->change_origine(MAGIC::ORIGINE::IMPOSE);;
63     nvtri->get_noeud2()->change_origine(MAGIC::ORIGINE::IMPOSE);;
64     nvtri->get_noeud3()->change_origine(MAGIC::ORIGINE::IMPOSE);;
65     nvtri->get_segment1()->change_origine(MAGIC::ORIGINE::IMPOSE);;
66     nvtri->get_segment2()->change_origine(MAGIC::ORIGINE::IMPOSE);;
67     nvtri->get_segment3()->change_origine(MAGIC::ORIGINE::IMPOSE);;
68 francois 532 nvtri->get_segment1()->change_dimension_topo_null(2);
69     nvtri->get_segment2()->change_dimension_topo_null(2);
70 francois 830 nvtri->get_segment3()->change_dimension_topo_null(2);*/
71     nvtri->change_origine(MAGIC::ORIGINE::TRIANGULATION);
72     nvtri->get_noeud1()->change_origine(MAGIC::ORIGINE::TRIANGULATION);;
73     nvtri->get_noeud2()->change_origine(MAGIC::ORIGINE::TRIANGULATION);;
74     nvtri->get_noeud3()->change_origine(MAGIC::ORIGINE::TRIANGULATION);;
75     nvtri->get_segment1()->change_origine(MAGIC::ORIGINE::TRIANGULATION);;
76     nvtri->get_segment2()->change_origine(MAGIC::ORIGINE::TRIANGULATION);;
77     nvtri->get_segment3()->change_origine(MAGIC::ORIGINE::TRIANGULATION);;
78 francois 532 }
79 francois 830 if (tri->get_lien_topologie()==NULL)
80     {
81     nvtri->get_segment1()->change_dimension_topo_null(2);
82     nvtri->get_segment2()->change_dimension_topo_null(2);
83     nvtri->get_segment3()->change_dimension_topo_null(2);
84     }
85 francois 420 lsttrim3d.ajouter(nvtri);
86     }
87    
88     TPL_MAP_ENTITE<M3D_TRIANGLE*>::ITERATEUR it2;
89    
90     for (M3D_TRIANGLE* tri=lsttrim3d.get_premier(it2);tri!=NULL;tri=lsttrim3d.get_suivant(it2))
91     {
92     mg_maillage->supprimer_mg_triangleid(tri->get_id());
93     mg_maillage->ajouter_mg_triangle(tri);
94     }
95    
96     for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(it);tri!=NULL;tri=mg_maillage->get_suivant_triangle(it))
97 francois 1150 if (bienori) ajouter_front_courant(MAGIC::MAILLEURFRONTALETAT::NONFORCE,tri->get_noeud1(),tri->get_noeud2(),tri->get_noeud3(),tri);
98     else ajouter_front_courant(MAGIC::MAILLEURFRONTALETAT::NONFORCE,tri->get_noeud1(),tri->get_noeud3(),tri->get_noeud2(),tri);
99 francois 420
100 francois 1082 }
101    
102    
103    
104     bool MAILLEUR3D_PEAU::orientation_peau(void)
105     {
106     LISTE_MG_TRIANGLE::iterator it,itp;
107     /*TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
108     BOITE_3D boite=mg_maillage->get_premier_triangle(it)->get_noeud1()->get_boite_3D();
109     for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(it);tri!=NULL;tri=mg_maillage->get_suivant_triangle(it))
110     {
111     lstnoeud.ajouter(tri->get_noeud1());
112     lstnoeud.ajouter(tri->get_noeud2());
113     lstnoeud.ajouter(tri->get_noeud3());
114     boite=boite+tri->get_noeud1()->get_boite_3D();
115     boite=boite+tri->get_noeud2()->get_boite_3D();
116     boite=boite+tri->get_noeud3()->get_boite_3D();
117     }
118     TPL_OCTREE<MG_TRIANGLE*,MG_NOEUD*> octree;
119     octree.initialiser(&lstnoeud,1,boite.get_xmin(),boite.get_ymin(),boite.get_zmin(),boite.get_xmax(),boite.get_ymax(),boite.get_zmax());
120     for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(it);tri!=NULL;tri=mg_maillage->get_suivant_triangle(it))
121     octree.inserer(tri);
122     */
123    
124     for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(itp);tri!=NULL;tri=mg_maillage->get_suivant_triangle(itp))
125     {
126     double *xyz1=tri->get_noeud1()->get_coord();
127     double *xyz2=tri->get_noeud2()->get_coord();
128     double *xyz3=tri->get_noeud3()->get_coord();
129     OT_VECTEUR_3D n1n2(xyz1,xyz2);
130     OT_VECTEUR_3D n1n3(xyz1,xyz3);
131     OT_VECTEUR_3D n=n1n3&n1n2;
132     n.norme();
133     double xyz[3];
134     xyz[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
135     xyz[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
136     xyz[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
137     double eps=1e-6;
138     bool pbdefinition=true;
139     int tpositif=0,tnegatif=0;
140     for (MG_TRIANGLE* tri2=mg_maillage->get_premier_triangle(it);tri2!=NULL;tri2=mg_maillage->get_suivant_triangle(it))
141     {
142     if (tri2==tri) continue;
143     double *xyz1=tri2->get_noeud1()->get_coord();
144     double *xyz2=tri2->get_noeud2()->get_coord();
145     double *xyz3=tri2->get_noeud3()->get_coord();
146     OT_VECTEUR_3D n1n2(xyz1,xyz2);
147     OT_VECTEUR_3D n1n3(xyz1,xyz3);
148     OT_VECTEUR_3D n2=n1n3&n1n2;
149     n2.norme();
150     if (fabs(n2*n)<1-eps)
151     {
152     OT_VECTEUR_3D vec3=(-n);
153     OT_MATRICE_3D mat(n1n2,n1n3,vec3);
154     OT_VECTEUR_3D b(xyz1,xyz);
155     OT_MATRICE_3D mat1(b,n1n3,vec3);
156     OT_MATRICE_3D mat2(n1n2,b,vec3);
157     OT_MATRICE_3D mat3(n1n2,n1n3,b);
158     double det=mat.get_determinant();
159     double t1=mat1.get_determinant()/det;
160     double t2=mat2.get_determinant()/det;
161     double t=mat3.get_determinant()/det;
162     if (t1>-eps)
163     if (t2>-eps)
164     if (t1+t2<1+eps)
165     {
166     if (t>0) tpositif++; else tnegatif++;
167     }
168    
169    
170     }
171     else
172     {
173     OT_VECTEUR_3D n1g(xyz1,xyz);
174     if (fabs(n1g*n2)<eps)
175     {
176     pbdefinition=false;
177     break;
178     }
179     }
180     }
181     if (pbdefinition)
182     {
183     if (tnegatif%2==1) return true;
184     return false;
185     }
186     }
187    
188     return true; // ne doit jamais passer ici
189     }
190