ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/CAD4FE/src/CAD4FE_mailleur2d.h
Revision: 64
Committed: Fri Feb 1 18:27:30 2008 UTC (17 years, 3 months ago) by foucault
Content type: text/plain
Original Path: magic/lib/CAD4FE/CAD4FE/src/CAD4FE_mailleur2d.h
File size: 6687 byte(s)
Log Message:
mise a jour final these Gilles Foucault

File Contents

# User Rev Content
1 foucault 27 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuillière et Vincent FRANCOIS
5     // Département de Génie Mécanique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du département
8     // de génie mécanique de l'Université du Québec à
9     // Trois Rivières
10     // Les librairies ne peuvent être utilisées sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mailleur2d.h
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 à 11H23
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23     #ifndef mailleur2dH
24     #define mailleur2dH
25    
26     #include "CAD4FE_Mesher_platform.h"
27    
28     #ifdef BORLANDCPP
29     #include <map.h>
30     #else
31     #include <map>
32     #endif
33    
34     #include "ot_decalage_parametre.h"
35     #include "mg_noeud.h"
36     #include "mg_segment.h"
37     #include "mg_maillage.h"
38     #include "mg_geometrie.h"
39     #include "mg_face.h"
40     #include "fct_taille_face.h"
41     #include "tpl_grille.h"
42    
43     #include "CAD4FE_mailleur.h"
44     #include "CAD4FE_mg_front_2D.h"
45     #include "CAD4FE_m3d_MCTriangle.h"
46     #include "CAD4FE_MCSegment.h"
47     #include "CAD4FE_MCNode.h"
48     #include "CAD4FE_MCFace.h"
49    
50    
51     #define CAS_FRONT_3 1
52     #define CAS_FRONT_4 2
53     #define CAS_FERME_CAVITE_P 3
54     #define CAS_FERME_CAVITE_S 4
55     #define CAS_FERME_CAVITE 5
56     #define CAS_GENERAL 6
57     #define CAS_FRONT_3X 7
58    
59     #define PASTROUVE 10
60     #define TROUVE 11
61    
62     #define TOUS_SEGMENT 20
63     #define TOUS_FRONT 21
64     #define RIEN 22
65    
66     #define NOEUD_CREE 30
67     #define FRONT_RENCONTRE 31
68     #define ERREUR 32
69    
70     namespace CAD4FE {
71    
72     class CAD4FE_MESHER_ITEM MAILLEUR2D:public MAILLEUR
73     {
74     public :
75     typedef std::multimap<double,MG_FRONT_2D*,std::less<double> > FRONT;
76     typedef std::multimap<double,M3D_MCTriangle*,std::less<double> > ORDRE_TRIANGLE;
77    
78     MAILLEUR2D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,MCFace* __mcFace, FCT_TAILLE* fct_taille=NULL);
79     ~MAILLEUR2D();
80    
81    
82    
83     void maille(void);
84     void maille(MCFace* __mcFace);
85    
86     void initialise_lst_tri_qual(MCFace* __mcFace);
87     void optimise(MCFace* __mcFace);
88     void optimise_bascule_segment(MCFace* __mcFace);
89     char filenameNbTriangles[5000];
90     int debug;
91    
92     private :
93     int creation_metrique;
94    
95     void initialise_frontiere(MCFace* __mcFace);
96     void cree_grille(MCFace* __mcFace);
97     void initialise_front(MCFace* __mcFace);
98 foucault 64 void initialise_front (MCFace * __mcFace, std::set<MCVertex*> __isolatedInteriorVertices);
99 foucault 27 void progresse_front(MCFace* __mcFace);
100    
101     int traite_front(int type_front,MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
102     int traite_front_cas_front_3(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
103     int identifie_front_cas_front_3x(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
104     int traite_front_cas_front_3x(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
105     int identifie_front_cas_front_4x(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
106     int traite_front_cas_front_4x(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
107     int traite_front_cas_front_4(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
108     int identifie_front_cas_front_4(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
109     int traite_front_cas_ferme_cavite(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
110     int traite_front_cas_ferme_cavite_p(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
111     int traite_front_cas_ferme_cavite_s(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
112     int traite_front_cas_general(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
113     int noeud_est_dans_triangle(MCNode* noeud,MG_TRIANGLE *triangle);
114     int noeud_est_dans_triangle(MCNode* noeud,MCNode *noeud1,MCNode *noeud2,MCNode *noeud3);
115     int triangle_est_dans_bon_sens(MCFace* face,MCNode* noeud1,MCNode *noeud2,MCNode *noeud3);
116 foucault 64 int genere_noeud(MCFace* __mcFace, MCNode *__interiorIsolatedNode, MG_FRONT_2D **front_rencontre,MCNode **noeud_rencontre);
117 foucault 27 int genere_noeud(MCFace* __mcFace,MG_FRONT_2D* front,MG_FRONT_2D **front_rencontre,MCNode **noeud);
118     int insere_segment(MCFace *mgface,MCSegment **nv_segment,MCNode* noeud1,MCNode* noeud2,int type_verication,double __tolerance = 0.0);
119     void supprime_segment(MCSegment *__segment);
120     //MG_TRIANGLE* insere_triangle_verifie_intersection(MG_ELEMENT_TOPOLOGIQUE *topo, MG_FRONT_2D *ft, MCNode *nv_noeud);
121     MCTriangle* insere_triangle(MG_ELEMENT_TOPOLOGIQUE* topo, MCNode *mgnoeud1, MCNode *mgnoeud2, MCNode *mgnoeud3);
122     int bouge_point(MCFace* __mcFace, MCNode *mg_noeud, double& crit, MCNode **__result);
123     void verifie_front();
124    
125     //int intersection_segment_segment(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
126     int examine_solution(double sol1,double sol2,int type);
127    
128     //double calcule_longueur_segment_metrique(MG_FACE* mgface,MG_SEGMENT* mgsegment);
129     double calcule_distance_metrique(MG_FACE* mgface,double u1,double v1,double u2,double v2,double du,double dv);
130    
131     MG_FRONT_2D* ajouter_front(FRONT& front,MCNode* noeud1,MCNode* noeud2,MCSegment* segment);
132     void ajouter_front(FRONT& front,MG_FRONT_2D *ft);
133     MG_FRONT_2D* get_front(FRONT& front,unsigned int num);
134     unsigned int get_nb_front(FRONT& front);
135     void supprimer_front(MG_FRONT_2D* ft);
136     MG_FRONT_2D * trouver_front(MG_NOEUD * no1, MG_NOEUD * no2);
137     void supprimer_front(MG_SEGMENT * seg);
138     void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_2D* ft);
139    
140 foucault 64 void export_ivanim();
141     void export_ivanim_all_faces();
142    
143 foucault 27 MG_MAILLAGE* mg_maillage;
144     MG_GEOMETRIE* mg_geometrie;
145     MCFace * _mcFace;
146     FCT_TAILLE *metrique;
147     // double periode_u; // pas de période car une MC Face n'est pas paramétrée
148     // double periode_v; // pas de période car une MC Face n'est pas paramétrée
149    
150     // OT_DECALAGE_PARAMETRE *decalage; // pas de période car une MC Face n'est pas paramétrée
151    
152     TPL_LISTE_ENTITE<MG_SEGMENT*> segment_frontiere;
153     TPL_LISTE_ENTITE<MG_NOEUD*> noeud_frontiere;
154     TPL_GRILLE<MCSegment*> *grille_de_segment;
155     TPL_GRILLE<MCSegment*> *grille_de_frontiere;
156     TPL_GRILLE<MG_FRONT_2D*> *grille_de_front;
157     FRONT front_courant;
158     FRONT front_attente;
159     ORDRE_TRIANGLE lst_tri_qual;
160     ORDRE_TRIANGLE lst_tri_qual2;
161     std::map<MG_ELEMENT_TOPOLOGIQUE*,int> _nbTriangles;
162     };
163    
164     }
165    
166    
167    
168    
169     #endif