ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/mailleur3d_peau.cpp
Revision: 1150
Committed: Tue May 28 12:57:28 2024 UTC (11 months, 2 weeks ago) by francois
Original Path: magic/lib/mailleur_auto/src/mailleur3d_peau.cpp
File size: 6097 byte(s)
Log Message:
deplacement des contantes dans le namespace MAGIC

File Contents

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