ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur_auto/src/mailleur3d.h
Revision: 632
Committed: Thu Jan 15 18:40:00 2015 UTC (10 years, 3 months ago) by francois
Content type: text/plain
File size: 9932 byte(s)
Log Message:
Changement de l'espace de voisinage dans le mailleur 2D et 3D. On utilise un ntree (octree "anisotrope" qui ne se divise pas necessairement en 8). En 2D l'espace de voisinage est maintenant sur l'espace reelle au lieu d'être sur l'espace parametrique.
+Mise sous forme de parametres de certains choix stratégiques du mailleur

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�e et Vincent FRANCOIS
5     // D�artement de G�ie M�anique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�artement
8     // de g�ie m�anique de l'Universit�du Qu�ec �
9     // Trois Rivi�es
10     // Les librairies ne peuvent �re utilis�s sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mailleur3d.h
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 �11H23
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24     #ifndef mailleur3dH
25     #define mailleur3dH
26    
27    
28    
29     #ifdef WINDOWS_VERSION
30     #ifdef BUILT_DLL_MAILLEUR
31     #define DLLPORTMAIL __declspec(dllexport)
32     #else
33     #define DLLPORTMAIL __declspec(dllimport)
34     #endif
35     #else
36     #define DLLPORTMAIL
37     #endif
38    
39    
40    
41     #ifdef BORLANDCPP
42     #include <map.h>
43     #else
44     #include <map>
45     #define CLK_TCK CLOCKS_PER_SEC
46     #endif
47    
48     #include <vector>
49     #include "mailleur.h"
50     #include "mg_front_3D.h"
51     #include "mg_maillage.h"
52     #include "mg_geometrie.h"
53     #include "mg_volume.h"
54 francois 467 #include "fct_taille.h"
55 5 #include "tpl_octree.h"
56    
57    
58     const unsigned int NONFORCE=159;
59     const unsigned int ATTENTE=160;
60 francois 35 const unsigned int PRIORITAIRE=160;
61 5
62     const unsigned int GENERATION_NOEUD=505;
63     const unsigned int NOEUD_EXISTANT=506;
64     const unsigned int FACE_EXISTANTE=506;
65    
66     const unsigned int EXISTE=700;
67     const unsigned int MULTIEXISTE=701;
68     const unsigned int CREATION=702;
69    
70 francois 78 const unsigned int FRONTAL=1000;
71     const unsigned int OCTAL=1001;
72 5
73 francois 190 const unsigned int TOUTDETRUIRE=2000;
74     const unsigned int LIMITEDETRUIRE=2001;
75 5
76 francois 551 #define EPS_BASE_RELATIVE 1e-14 //en réalite 2^(1-nombre de bit de la mantisse d'un reel) 52+1(le premier bit toujours 1 n'est pas represente) en 64 bits
77 francois 78
78 francois 190
79 5 class DLLPORTMAIL MAILLEUR3D:public MAILLEUR
80     {
81     public:
82    
83    
84    
85 francois 287
86 francois 420
87 francois 494 MAILLEUR3D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,FCT_TAILLE* fct_taille,bool save,MG_VOLUME* mgvol=NULL,int destruction=TOUTDETRUIRE);
88 francois 467 MAILLEUR3D(FCT_TAILLE* met,MG_MAILLAGE* mgmai,class OT_CPU* comp=NULL,int destruction=TOUTDETRUIRE);
89 5 virtual ~MAILLEUR3D();
90    
91 francois 421 virtual void maille(MG_GROUPE_TOPOLOGIQUE* mggt=NULL);
92     virtual void maille(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TRIANGLE*> *lsttri=NULL,TPL_LISTE_ENTITE<MG_TETRA*> *lsttet=NULL);
93 5
94 francois 419
95 francois 421 virtual void active_log(char* nomfile);
96     virtual void desactive_log(void);
97 francois 424 virtual void analyse_maillage_obtenu(double &vol,int *tab,double borne1=0.1,double borne2=0.2,double borne3=0.5);
98 francois 421 virtual void change_niveau_optimisation(int num);
99     virtual int get_niveau_optimisation(void);
100     virtual void change_coef(double val);
101     virtual void verifie_conformite_octale(MG_MAILLAGE* mai,MG_MAILLAGE* maisur);
102 5
103 francois 420 protected:
104     typedef std::multimap<double,MG_FRONT_3D*,std::less<double> > FRONT;
105 francois 467 virtual void maille(FCT_TAILLE *metri);
106 5
107 francois 421 virtual void insere_contrainte_tetra(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TETRA*> *lsttet);
108     virtual void insere_contrainte_triangle(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TRIANGLE*> *lsttri);
109 francois 54
110    
111    
112 francois 632 virtual void cree_ntree(void);
113 francois 421 virtual void initialise_front(MG_VOLUME* mgvol);
114 francois 420 virtual void cree_front(MG_VOLUME* mgvol);
115 francois 421 virtual void recherche_voisin_front(void);
116     virtual void progresse_front(MG_VOLUME* mgvol);
117     virtual int genere_noeud(MG_VOLUME* mgvol,MG_FRONT_3D* ft,TPL_MAP_ENTITE<MG_NOEUD*> &liste_noeud,std::vector<class CAS_FRONT*> &liste_cas);
118     virtual void detruit_element_inactif(void);
119 5
120 francois 421 virtual int traite_front(class MG_VOLUME* mgvol,int type,MG_FRONT_3D* ft,std::vector<class CAS_FRONT*>& liste_cas,std::vector<class CAS_FRONT*>& liste_classe_cas,class CAS_FRONT **cas);
121     virtual int traite_front_adjacent3(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
122     virtual int traite_front_adjacent2(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
123     virtual int traite_front_adjacent1(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
124     virtual int traite_front_lie(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
125     virtual int traite_front_general(class MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas);
126 5
127 francois 421 virtual int traite_destruction(MG_FRONT_3D* ft,TPL_MAP_ENTITE<class MG_TRIANGLE*>& liste_intersection);
128     virtual void detruit_tetra(MG_TRIANGLE* tri);
129 5
130 francois 421 virtual class MG_FRONT_3D* mise_a_jour_front(MG_TETRA* tet,int cote,int numfront=ATTENTE);
131     virtual void mise_a_jour_voisin_front(MG_FRONT_3D* ft);
132 5
133 francois 421 virtual int test_front(void);
134     virtual void genere_log(int fincouche);
135     virtual void ini_log(void);
136     virtual void fin_log(void);
137 5
138    
139 francois 421 virtual double angle_front(MG_FRONT_3D* ft1,MG_FRONT_3D* ft2);
140     virtual double angle_front(MG_FRONT_3D* ft1,MG_SEGMENT* seg);
141     virtual double evaluer_distance_noeud_triangle(double x,double y,double z,MG_TRIANGLE* tri);
142     virtual void insere_cas_front(int type,MG_NOEUD* noeud,int numero_cote,double angle,std::vector<CAS_FRONT*>& liste_cas);
143     virtual void efface_cas_front(std::vector<CAS_FRONT*>& liste_cas,std::vector<CAS_FRONT*> liste_classe_cas[8]);
144 5
145 francois 421 virtual int inter_tetra_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6,MG_NOEUD* noeud7);
146     virtual int inter_triangle_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6);
147     virtual int inter_segment_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5);
148     virtual int inter_segment_segment(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
149 francois 551 virtual int inter_segment_segment1(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
150     virtual int inter_segment_segment2(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
151     virtual int examine_solution(double sol1,double sol2,double epssol1,double epssol2,int type);
152     //virtual int noeud_est_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,double x,double y,double z);
153 5
154    
155 francois 421 virtual double calcule_volume(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
156     virtual double calcule_longueur_caracteristique(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3=NULL,MG_NOEUD* noeud4=NULL);
157 5
158 francois 532 double calcul_distance_metrique_segment(MG_SEGMENT *seg,int pas);
159 5
160 francois 421 virtual class MG_TETRA* insere_tetra(class MG_VOLUME* mgvol,class MG_FRONT_3D* ft,MG_NOEUD* noeud4,int type,TPL_MAP_ENTITE<class MG_TRIANGLE*>& liste_intersection);
161     virtual class MG_TRIANGLE* insere_triangle(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,int origine);
162     virtual class MG_SEGMENT* insere_segment(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,int origine);
163     virtual class MG_TETRA* cree_tetra(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_TRIANGLE* triangle1,MG_TRIANGLE* triangle2,MG_TRIANGLE* triangle3,MG_TRIANGLE* triangle4,int origine);
164     virtual class MG_TRIANGLE* cree_triangle(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_SEGMENT* segment1,MG_SEGMENT* segment2,MG_SEGMENT* segment3,int origine);
165     virtual class MG_SEGMENT* cree_segment(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,int origine);
166 5
167 francois 421 virtual void insere_tetra(MG_MAILLAGE* mai,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
168 francois 78
169 francois 558 int supprimer_mg_tetra(MG_TETRA* mgtetra);
170 francois 78
171    
172 francois 421 virtual MG_FRONT_3D* ajouter_front_courant(int numero_front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
173     virtual MG_FRONT_3D* ajouter_front(FRONT& front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
174     virtual void ajouter_front(FRONT& front,MG_FRONT_3D *ft);
175 francois 551 virtual MG_FRONT_3D* get_premier_front(FRONT& front);
176     virtual MG_FRONT_3D* get_premier_front(FRONT& front,FRONT::iterator &it);
177     virtual MG_FRONT_3D* get_suivant_front(FRONT& front,FRONT::iterator &it);
178 francois 421 virtual unsigned int get_nb_front(FRONT& front);
179     virtual unsigned int get_nb_front_courant(void);
180     virtual void supprimer_front_en_avancant(MG_FRONT_3D* ft);
181     virtual void supprimer_front_en_avancant_sans_delete(MG_FRONT_3D* ft);
182     virtual void supprimer_front_en_reculant(MG_FRONT_3D* ft);
183     virtual void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_3D* ft);
184     virtual void echange_de_front(MG_FRONT_3D* ft,int num);
185     virtual void swap_front(FRONT& front_original,FRONT& front_destination);
186     virtual int premier_front_courant(void);
187 5
188    
189    
190 francois 54
191 francois 558 TPL_MAP_ENTITE<MG_TETRA*> lsttet_a_detruire;
192     TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud_a_detruire;
193    
194 5
195 francois 35
196 5 MG_MAILLAGE* mg_maillage;
197     MG_GEOMETRIE* mg_geometrie;
198     MG_VOLUME* mg_volume;
199     FCT_TAILLE *metrique;
200 francois 78 int type_mailleur;
201 francois 445 double distance_maximale;
202 5 FRONT front_courant[11];
203     FRONT front_attente;
204    
205     int activelog;
206     std::string nomlog;
207    
208 francois 632 TPL_NTREE_FCT<MG_FRONT_3D*,FCT_TAILLE > *ntree_de_front;
209 5
210 francois 61 int niveau_optimisation;
211 francois 190 int typedestruction;
212 francois 61 FILE* inlog;
213 francois 78 double coef;
214 francois 551
215    
216    
217 francois 558 int passe;
218 5 };
219    
220    
221    
222    
223    
224    
225    
226    
227    
228    
229    
230    
231    
232    
233 francois 287
234 5 //---------------------------------------------------------------------------
235     #endif