ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/CAD4FE/src/CAD4FE_mailleur2d.h
Revision: 569
Committed: Thu Oct 16 14:36:31 2014 UTC (10 years, 6 months ago) by foucault
Content type: text/plain
File size: 7060 byte(s)
Log Message:
Mise à jour pour CAD4FE (Gilles) : operation 1 (tentative)

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 foucault 569 #endif
33     #include <string>
34     #include <sstream>
35     #include <fstream>
36 foucault 27
37     #include "ot_decalage_parametre.h"
38     #include "mg_noeud.h"
39     #include "mg_segment.h"
40     #include "mg_maillage.h"
41     #include "mg_geometrie.h"
42     #include "mg_face.h"
43     #include "fct_taille_face.h"
44     #include "tpl_grille.h"
45    
46     #include "CAD4FE_mailleur.h"
47     #include "CAD4FE_mg_front_2D.h"
48     #include "CAD4FE_m3d_MCTriangle.h"
49     #include "CAD4FE_MCSegment.h"
50     #include "CAD4FE_MCNode.h"
51     #include "CAD4FE_MCFace.h"
52    
53    
54     #define CAS_FRONT_3 1
55     #define CAS_FRONT_4 2
56     #define CAS_FERME_CAVITE_P 3
57     #define CAS_FERME_CAVITE_S 4
58     #define CAS_FERME_CAVITE 5
59     #define CAS_GENERAL 6
60     #define CAS_FRONT_3X 7
61    
62     #define PASTROUVE 10
63     #define TROUVE 11
64    
65     #define TOUS_SEGMENT 20
66     #define TOUS_FRONT 21
67     #define RIEN 22
68    
69     #define NOEUD_CREE 30
70     #define FRONT_RENCONTRE 31
71     #define ERREUR 32
72    
73     namespace CAD4FE {
74    
75     class CAD4FE_MESHER_ITEM MAILLEUR2D:public MAILLEUR
76     {
77     public :
78     typedef std::multimap<double,MG_FRONT_2D*,std::less<double> > FRONT;
79     typedef std::multimap<double,M3D_MCTriangle*,std::less<double> > ORDRE_TRIANGLE;
80    
81     MAILLEUR2D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,MCFace* __mcFace, FCT_TAILLE* fct_taille=NULL);
82     ~MAILLEUR2D();
83    
84    
85    
86     void maille(void);
87     void maille(MCFace* __mcFace);
88    
89     void initialise_lst_tri_qual(MCFace* __mcFace);
90     void optimise(MCFace* __mcFace);
91     void optimise_bascule_segment(MCFace* __mcFace);
92     char filenameNbTriangles[5000];
93 foucault 569 int debug;
94     void ClearLog();
95 foucault 27
96     private :
97     int creation_metrique;
98    
99     void initialise_frontiere(MCFace* __mcFace);
100     void cree_grille(MCFace* __mcFace);
101     void initialise_front(MCFace* __mcFace);
102 foucault 64 void initialise_front (MCFace * __mcFace, std::set<MCVertex*> __isolatedInteriorVertices);
103 foucault 27 void progresse_front(MCFace* __mcFace);
104    
105     int traite_front(int type_front,MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
106     int traite_front_cas_front_3(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
107     int identifie_front_cas_front_3x(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
108     int traite_front_cas_front_3x(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
109     int identifie_front_cas_front_4x(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
110     int traite_front_cas_front_4x(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
111     int traite_front_cas_front_4(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
112     int identifie_front_cas_front_4(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
113     int traite_front_cas_ferme_cavite(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
114     int traite_front_cas_ferme_cavite_p(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
115     int traite_front_cas_ferme_cavite_s(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
116     int traite_front_cas_general(MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts);
117     int noeud_est_dans_triangle(MCNode* noeud,MG_TRIANGLE *triangle);
118     int noeud_est_dans_triangle(MCNode* noeud,MCNode *noeud1,MCNode *noeud2,MCNode *noeud3);
119     int triangle_est_dans_bon_sens(MCFace* face,MCNode* noeud1,MCNode *noeud2,MCNode *noeud3);
120 foucault 569 int triangle_est_dans_bon_sens_front(MG_FRONT_2D * front,MCNode *noeud3);
121     int triangles_sont_dans_meme_sens(MCFace* face,MCNode* noeud1,MCNode *noeud2,MCNode *noeud2bis,MCNode *noeud3);
122 foucault 64 int genere_noeud(MCFace* __mcFace, MCNode *__interiorIsolatedNode, MG_FRONT_2D **front_rencontre,MCNode **noeud_rencontre);
123 foucault 27 int genere_noeud(MCFace* __mcFace,MG_FRONT_2D* front,MG_FRONT_2D **front_rencontre,MCNode **noeud);
124     int insere_segment(MCFace *mgface,MCSegment **nv_segment,MCNode* noeud1,MCNode* noeud2,int type_verication,double __tolerance = 0.0);
125     void supprime_segment(MCSegment *__segment);
126     //MG_TRIANGLE* insere_triangle_verifie_intersection(MG_ELEMENT_TOPOLOGIQUE *topo, MG_FRONT_2D *ft, MCNode *nv_noeud);
127     MCTriangle* insere_triangle(MG_ELEMENT_TOPOLOGIQUE* topo, MCNode *mgnoeud1, MCNode *mgnoeud2, MCNode *mgnoeud3);
128     int bouge_point(MCFace* __mcFace, MCNode *mg_noeud, double& crit, MCNode **__result);
129     void verifie_front();
130    
131     //int intersection_segment_segment(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
132     int examine_solution(double sol1,double sol2,int type);
133    
134     //double calcule_longueur_segment_metrique(MG_FACE* mgface,MG_SEGMENT* mgsegment);
135     double calcule_distance_metrique(MG_FACE* mgface,double u1,double v1,double u2,double v2,double du,double dv);
136    
137     MG_FRONT_2D* ajouter_front(FRONT& front,MCNode* noeud1,MCNode* noeud2,MCSegment* segment);
138     void ajouter_front(FRONT& front,MG_FRONT_2D *ft);
139     MG_FRONT_2D* get_front(FRONT& front,unsigned int num);
140     unsigned int get_nb_front(FRONT& front);
141     void supprimer_front(MG_FRONT_2D* ft);
142     MG_FRONT_2D * trouver_front(MG_NOEUD * no1, MG_NOEUD * no2);
143     void supprimer_front(MG_SEGMENT * seg);
144     void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_2D* ft);
145    
146 foucault 64 void export_ivanim();
147     void export_ivanim_all_faces();
148    
149 foucault 569 void WriteLog(std::string __text);
150    
151 foucault 27 MG_MAILLAGE* mg_maillage;
152     MG_GEOMETRIE* mg_geometrie;
153     MCFace * _mcFace;
154     FCT_TAILLE *metrique;
155     // double periode_u; // pas de période car une MC Face n'est pas paramétrée
156     // double periode_v; // pas de période car une MC Face n'est pas paramétrée
157    
158     // OT_DECALAGE_PARAMETRE *decalage; // pas de période car une MC Face n'est pas paramétrée
159    
160     TPL_LISTE_ENTITE<MG_SEGMENT*> segment_frontiere;
161     TPL_LISTE_ENTITE<MG_NOEUD*> noeud_frontiere;
162     TPL_GRILLE<MCSegment*> *grille_de_segment;
163     TPL_GRILLE<MCSegment*> *grille_de_frontiere;
164     TPL_GRILLE<MG_FRONT_2D*> *grille_de_front;
165     FRONT front_courant;
166     FRONT front_attente;
167 foucault 569 FRONT lst_front_superpose;
168 foucault 27 ORDRE_TRIANGLE lst_tri_qual;
169     ORDRE_TRIANGLE lst_tri_qual2;
170     std::map<MG_ELEMENT_TOPOLOGIQUE*,int> _nbTriangles;
171 foucault 569 std::ofstream _logFile;
172 foucault 27 };
173    
174     }
175    
176    
177    
178    
179     #endif