ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/mailleur3d_recuperation.cpp
Revision: 1189
Committed: Tue Feb 4 17:26:49 2025 UTC (3 months ago) by francois
File size: 4673 byte(s)
Log Message:
Version 5.0 de MAGIC. Integration de ALGLIB pour faire de l'optimisation. ALGLIB se download automatiquement en executant un script dans le repertoire config update_magic.bash


File Contents

# Content
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 //####// mailleur3d_recuperation.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "gestionversion.h"
23 #include "mailleur3d_recuperation.h"
24 #include "fct_taille.h"
25 #include "mg_volume.h"
26 #include "m3d_triangle.h"
27
28
29
30
31
32 MAILLEUR3D_RECUPERATION::MAILLEUR3D_RECUPERATION(MG_MAILLAGE* mgmai,MG_VOLUME* mgvol,FCT_TAILLE* fct_taille,bool save):MAILLEUR3D(mgmai,mgmai->get_mg_geometrie(),fct_taille,save,mgvol)
33 {
34
35 }
36
37
38 MAILLEUR3D_RECUPERATION::~MAILLEUR3D_RECUPERATION()
39 {
40 }
41
42
43
44 void MAILLEUR3D_RECUPERATION::cree_front(MG_VOLUME* mgvol)
45 {
46 LISTE_MG_TRIANGLE::iterator it;
47 for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(it);tri!=NULL;tri=mg_maillage->get_suivant_triangle(it))
48 {
49 M3D_TRIANGLE* nvtri=(M3D_TRIANGLE*)tri;
50 nvtri->change_nouveau_numero(0);
51 nvtri->change_etat_front(MAGIC::MAILLEURFRONTALETAT::FRONT_PAS_A_INVERSE);
52 if (nvtri->get_lien_topologie()!=NULL)
53 if (nvtri->get_lien_topologie()->get_dimension()==2)
54 if (((MG_FACE*)nvtri->get_lien_topologie())->get_mg_coface(0)->get_orientation()==-1)
55 nvtri->change_etat_front(MAGIC::MAILLEURFRONTALETAT::FRONT_A_INVERSE);
56
57
58 }
59
60
61 LISTE_MG_TETRA::iterator ittet;
62 for (MG_TETRA* tet=mg_maillage->get_premier_tetra(ittet);tet!=NULL;tet=mg_maillage->get_suivant_tetra(ittet))
63 {
64 recherche_front_triangle(tet,(M3D_TRIANGLE*)tet->get_triangle1(),0);
65 recherche_front_triangle(tet,(M3D_TRIANGLE*)tet->get_triangle2(),1);
66 recherche_front_triangle(tet,(M3D_TRIANGLE*)tet->get_triangle3(),2);
67 recherche_front_triangle(tet,(M3D_TRIANGLE*)tet->get_triangle4(),3);
68 }
69
70
71 for (MG_TRIANGLE* tri=mg_maillage->get_premier_triangle(it);tri!=NULL;tri=mg_maillage->get_suivant_triangle(it))
72 {
73 M3D_TRIANGLE* mtri=(M3D_TRIANGLE*)tri;
74 //if ((mtri->get_nouveau_numero()==0) || ((mtri->get_nouveau_numero()==1) && (mtri->get_lien_topologie()->get_dimension()==3) ))
75 if ((mtri->get_nouveau_numero()==0) || ((mtri->get_nouveau_numero()==1) && (mtri->get_frontiere()!=1) ))
76 {
77 if (mtri->get_etat_front()==MAGIC::MAILLEURFRONTALETAT::FRONT_PAS_A_INVERSE)
78 ajouter_front_courant(MAGIC::MAILLEURFRONTALETAT::NONFORCE,tri->get_noeud1(),tri->get_noeud2(),tri->get_noeud3(),mtri);
79 else if (mtri->get_etat_front()==MAGIC::MAILLEURFRONTALETAT::FRONT_A_INVERSE)
80 ajouter_front_courant(MAGIC::MAILLEURFRONTALETAT::NONFORCE,tri->get_noeud2(),tri->get_noeud1(),tri->get_noeud3(),mtri);
81 }
82 else mtri->change_etat_front(MAGIC::MAILLEURFRONTALETAT::FRONT_NONACTIF);
83
84 }
85
86 }
87
88
89 void MAILLEUR3D_RECUPERATION::recherche_front_triangle(MG_TETRA* tet,M3D_TRIANGLE* tri,int num)
90 {
91 tri->change_nouveau_numero(tri->get_nouveau_numero()+1);
92 MG_NOEUD* no1;
93 MG_NOEUD* no2;
94 MG_NOEUD* no3;
95 if (num==0)
96 {
97 no1=tet->get_noeud1();
98 no2=tet->get_noeud3();
99 no3=tet->get_noeud2();
100 }
101 if (num==1)
102 {
103 no1=tet->get_noeud1();
104 no2=tet->get_noeud2();
105 no3=tet->get_noeud4();
106 }
107 if (num==2)
108 {
109 no1=tet->get_noeud2();
110 no2=tet->get_noeud3();
111 no3=tet->get_noeud4();
112 }
113 if (num==3)
114 {
115 no1=tet->get_noeud1();
116 no2=tet->get_noeud4();
117 no3=tet->get_noeud3();
118 }
119 OT_VECTEUR_3D vec1(no1->get_coord(),no2->get_coord());
120 OT_VECTEUR_3D vec2(no1->get_coord(),no3->get_coord());
121 OT_VECTEUR_3D normext=vec1&vec2;
122 OT_VECTEUR_3D vec3(tri->get_noeud1()->get_coord(),tri->get_noeud2()->get_coord());
123 OT_VECTEUR_3D vec4(tri->get_noeud1()->get_coord(),tri->get_noeud3()->get_coord());
124 OT_VECTEUR_3D normtri=vec3&vec4;
125 if (normtri*normext>0) tri->change_etat_front(MAGIC::MAILLEURFRONTALETAT::FRONT_PAS_A_INVERSE);
126 else tri->change_etat_front(MAGIC::MAILLEURFRONTALETAT::FRONT_A_INVERSE);
127 }