MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
CAD4FE_mailleur2d.h
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 //####// CAD4FE_mailleur2d.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef mailleur2dH
23 #define mailleur2dH
24 
25 #include "CAD4FE_Mesher_platform.h"
26 
27 #ifdef BORLANDCPP
28  #include <map.h>
29 #else
30  #include <map>
31 #endif
32 #include <string>
33 #include <sstream>
34 #include <fstream>
35 
36 #include "ot_decalage_parametre.h"
37 #include "mg_noeud.h"
38 #include "mg_segment.h"
39 #include "mg_maillage.h"
40 #include "mg_geometrie.h"
41 #include "mg_face.h"
42 #include "fct_taille_face.h"
43 #include "tpl_grille.h"
44 
45 #include "CAD4FE_mailleur.h"
46 #include "CAD4FE_mg_front_2D.h"
47 #include "CAD4FE_m3d_MCTriangle.h"
48 #include "CAD4FE_MCSegment.h"
49 #include "CAD4FE_MCNode.h"
50 #include "CAD4FE_MCFace.h"
51 
52 
53 #define CAS_FRONT_3 1
54 #define CAS_FRONT_4 2
55 #define CAS_FERME_CAVITE_P 3
56 #define CAS_FERME_CAVITE_S 4
57 #define CAS_FERME_CAVITE 5
58 #define CAS_GENERAL 6
59 #define CAS_FRONT_3X 7
60 
61 #define PASTROUVE 10
62 #define TROUVE 11
63 
64 #define TOUS_SEGMENT 20
65 #define TOUS_FRONT 21
66 #define RIEN 22
67 
68 #define NOEUD_CREE 30
69 #define FRONT_RENCONTRE 31
70 #define ERREUR 32
71 
72 namespace CAD4FE {
73 
74 class MAILLEUR2D:public MAILLEUR
75 {
76 public :
77 typedef std::multimap<double,MG_FRONT_2D*,std::less<double> > FRONT;
78 typedef std::multimap<double,M3D_MCTriangle*,std::less<double> > ORDRE_TRIANGLE;
79 
80 MAILLEUR2D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,MCFace* __mcFace, FCT_TAILLE* fct_taille=NULL);
81 ~MAILLEUR2D();
82 
83 
84 
85 void maille(void);
86 void maille(MCFace* __mcFace);
87 
88 void initialise_lst_tri_qual(MCFace* __mcFace);
89 void optimise(MCFace* __mcFace);
90 void optimise_bascule_segment(MCFace* __mcFace);
92 int debug;
93 void ClearLog();
94 
95 private :
97 
98 void initialise_frontiere(MCFace* __mcFace);
99 void cree_grille(MCFace* __mcFace);
100 void initialise_front(MCFace* __mcFace);
101 void initialise_front (MCFace * __mcFace, std::set<MCVertex*> __isolatedInteriorVertices);
102 void progresse_front(MCFace* __mcFace);
103 
104 int traite_front(int type_front,MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
116 int noeud_est_dans_triangle(MCNode* noeud,MG_TRIANGLE *triangle);
117 int noeud_est_dans_triangle(MCNode* noeud,MCNode *noeud1,MCNode *noeud2,MCNode *noeud3);
118 int triangle_est_dans_bon_sens(MCFace* face,MCNode* noeud1,MCNode *noeud2,MCNode *noeud3);
120 int triangles_sont_dans_meme_sens(MCFace* face,MCNode* noeud1,MCNode *noeud2,MCNode *noeud2bis,MCNode *noeud3);
121 int genere_noeud(MCFace* __mcFace, MCNode *__interiorIsolatedNode, MG_FRONT_2D **front_rencontre,MCNode **noeud_rencontre);
122 int genere_noeud(MCFace* __mcFace,MG_FRONT_2D* front,MG_FRONT_2D **front_rencontre,MCNode **noeud);
123 int insere_segment(MCFace *mgface,MCSegment **nv_segment,MCNode* noeud1,MCNode* noeud2,int type_verication,double __tolerance = 0.0);
124 void supprime_segment(MCSegment *__segment);
125 MCTriangle* insere_triangle(MG_ELEMENT_TOPOLOGIQUE* topo, MCNode *mgnoeud1, MCNode *mgnoeud2, MCNode *mgnoeud3);
126 int bouge_point(MCFace* __mcFace, MCNode *mg_noeud, double& crit, MCNode **__result);
127 void verifie_front();
128 
129 int examine_solution(double sol1,double sol2,int type);
130 
131 double calcule_distance_metrique(MG_FACE* mgface,double u1,double v1,double u2,double v2,double du,double dv);
132 
133 MG_FRONT_2D* ajouter_front(FRONT& front,MCNode* noeud1,MCNode* noeud2,MCSegment* segment);
134 void ajouter_front(FRONT& front,MG_FRONT_2D *ft);
135 MG_FRONT_2D* get_front(FRONT& front,unsigned int num);
136 unsigned int get_nb_front(FRONT& front);
137 void supprimer_front(MG_FRONT_2D* ft);
140 void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_2D* ft);
141 
142 void export_ivanim();
144 
145 void WriteLog(std::string __text);
146 
151 
152 
163 std::map<MG_ELEMENT_TOPOLOGIQUE*,int> _nbTriangles;
164 std::ofstream _logFile;
165 };
166 
167 }
168 
169 
170 
171 
172 #endif
double calcule_distance_metrique(MG_FACE *mgface, double u1, double v1, double u2, double v2, double du, double dv)
void initialise_front(MCFace *__mcFace)
int traite_front(int type_front, MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
int identifie_front_cas_front_4(MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
int triangles_sont_dans_meme_sens(MCFace *face, MCNode *noeud1, MCNode *noeud2, MCNode *noeud2bis, MCNode *noeud3)
int traite_front_cas_front_3(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
void cree_grille(MCFace *__mcFace)
int genere_noeud(MCFace *__mcFace, MCNode *__interiorIsolatedNode, MG_FRONT_2D **front_rencontre, MCNode **noeud_rencontre)
int traite_front_cas_front_3x(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
int traite_front_cas_ferme_cavite_s(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
void supprimer_front(MG_FRONT_2D *ft)
int examine_solution(double sol1, double sol2, int type)
int traite_front_cas_ferme_cavite(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
TPL_GRILLE< MCSegment * > * grille_de_segment
std::ofstream _logFile
void echange_de_front(FRONT &front_original, FRONT &front_destination, MG_FRONT_2D *ft)
TPL_LISTE_ENTITE< MG_SEGMENT * > segment_frontiere
int noeud_est_dans_triangle(MCNode *noeud, MG_TRIANGLE *triangle)
int identifie_front_cas_front_4x(MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
MG_FRONT_2D * ajouter_front(FRONT &front, MCNode *noeud1, MCNode *noeud2, MCSegment *segment)
std::multimap< double, M3D_MCTriangle *, std::less< double > > ORDRE_TRIANGLE
int traite_front_cas_front_4x(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
ORDRE_TRIANGLE lst_tri_qual2
MAILLEUR2D(MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo, MCFace *__mcFace, FCT_TAILLE *fct_taille=NULL)
void WriteLog(std::string __text)
void initialise_lst_tri_qual(MCFace *__mcFace)
void supprimer_front(MG_SEGMENT *seg)
void progresse_front(MCFace *__mcFace)
std::multimap< double, MG_FRONT_2D *, std::less< double > > FRONT
unsigned int get_nb_front(FRONT &front)
int triangle_est_dans_bon_sens_front(MG_FRONT_2D *front, MCNode *noeud3)
char filenameNbTriangles[5000]
MG_FRONT_2D * trouver_front(MG_NOEUD *no1, MG_NOEUD *no2)
MG_FRONT_2D * get_front(FRONT &front, unsigned int num)
void optimise_bascule_segment(MCFace *__mcFace)
int traite_front_cas_front_4(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
MCTriangle * insere_triangle(MG_ELEMENT_TOPOLOGIQUE *topo, MCNode *mgnoeud1, MCNode *mgnoeud2, MCNode *mgnoeud3)
ORDRE_TRIANGLE lst_tri_qual
MG_GEOMETRIE * mg_geometrie
int insere_segment(MCFace *mgface, MCSegment **nv_segment, MCNode *noeud1, MCNode *noeud2, int type_verication, double __tolerance=0.0)
int identifie_front_cas_front_3x(MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
int bouge_point(MCFace *__mcFace, MCNode *mg_noeud, double &crit, MCNode **__result)
int triangle_est_dans_bon_sens(MCFace *face, MCNode *noeud1, MCNode *noeud2, MCNode *noeud3)
MG_MAILLAGE * mg_maillage
int traite_front_cas_ferme_cavite_p(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
int traite_front_cas_general(MCFace *__mcFace, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
void initialise_frontiere(MCFace *__mcFace)
void supprime_segment(MCSegment *__segment)
TPL_LISTE_ENTITE< MG_NOEUD * > noeud_frontiere
std::map< MG_ELEMENT_TOPOLOGIQUE *, int > _nbTriangles
TPL_GRILLE< MCSegment * > * grille_de_frontiere
TPL_GRILLE< MG_FRONT_2D * > * grille_de_front
void optimise(MCFace *__mcFace)