ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur_auto/src/mailleur3d.h
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Content type: text/plain
Original Path: magic/lib/mailleur/mailleur/src/mailleur3d.h
File size: 7543 byte(s)
Log Message:

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     #include "fct_taille_volume.h"
55     #include "tpl_octree.h"
56    
57    
58     const unsigned int NONFORCE=159;
59     const unsigned int ATTENTE=160;
60     const unsigned int PRIORITAIRE=0;
61    
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    
71    
72     class DLLPORTMAIL MAILLEUR3D:public MAILLEUR
73     {
74     public:
75     typedef std::multimap<double,MG_FRONT_3D*,std::less<double> > FRONT;
76    
77    
78    
79     MAILLEUR3D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,MG_VOLUME* mgvol=NULL,FCT_TAILLE* fct_taille=NULL);
80     virtual ~MAILLEUR3D();
81    
82     void maille(void);
83     void maille(MG_VOLUME* mgvol);
84     double cpu[100]; //debug
85     long nbfois[100]; //debug
86    
87     void active_log(char* nomfile);
88     void desactive_log(void);
89    
90     private:
91    
92     void initialise_frontiere(MG_VOLUME* mgvol);
93     void cree_octree(void);
94     void initialise_front(MG_VOLUME* mgvol);
95     void progresse_front(MG_VOLUME* mgvol);
96     int genere_noeud(MG_VOLUME* mgvol,MG_FRONT_3D* ft,TPL_MAP_ENTITE<MG_NOEUD*> &liste_noeud);
97     void detruit_element_inactif(void);
98    
99     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);
100     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);
101     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);
102     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);
103     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);
104     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);
105    
106     int traite_destruction(MG_FRONT_3D* ft,TPL_MAP_ENTITE<class MG_TRIANGLE*>& liste_intersection);
107     void detruit_tetra(MG_TRIANGLE* tri);
108    
109     class MG_FRONT_3D* mise_a_jour_front(MG_TETRA* tet,int cote);
110     void mise_a_jour_voisin_front(MG_FRONT_3D* ft);
111    
112     int test_front(void);
113     void genere_log(std::string nom);
114    
115    
116     double angle_front(MG_FRONT_3D* ft1,MG_FRONT_3D* ft2);
117     double angle_front(MG_FRONT_3D* ft1,MG_SEGMENT* seg);
118     double evaluer_distance_noeud_triangle(double x,double y,double z,MG_TRIANGLE* tri);
119     void insere_cas_front(int type,MG_NOEUD* noeud,int numero_cote,double angle,std::vector<CAS_FRONT*>& liste_cas);
120     void efface_cas_front(std::vector<CAS_FRONT*>& liste_cas,std::vector<CAS_FRONT*> liste_classe_cas[8]);
121    
122    
123     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);
124     int inter_triangle_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6);
125     int inter_segment_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5);
126     int inter_segment_segment(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
127     int examine_solution(double sol1,double sol2,int type);
128     int noeud_est_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,double x,double y,double z);
129    
130    
131     double calcule_volume(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
132     double calcule_longueur_caracteristique(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3=NULL,MG_NOEUD* noeud4=NULL);
133    
134    
135     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);
136     class MG_TRIANGLE* insere_triangle(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3);
137     class MG_SEGMENT* insere_segment(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2);
138     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);
139     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);
140     class MG_SEGMENT* cree_segment(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2);
141    
142     MG_FRONT_3D* ajouter_front_courant(int numero_front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
143     MG_FRONT_3D* ajouter_front(FRONT& front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
144     void ajouter_front(FRONT& front,MG_FRONT_3D *ft);
145     MG_FRONT_3D* get_front(FRONT& front,unsigned int num);
146     unsigned int get_nb_front(FRONT& front);
147     unsigned int get_nb_front_courant(void);
148     void supprimer_front_en_avancant(MG_FRONT_3D* ft);
149     void supprimer_front_en_reculant(MG_FRONT_3D* ft);
150     void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_3D* ft);
151     void echange_de_front(MG_FRONT_3D* ft,int num);
152     void swap_front(FRONT& front_original,FRONT& front_destination);
153     int premier_front_courant(void);
154    
155    
156    
157    
158     MG_MAILLAGE* mg_maillage;
159     MG_GEOMETRIE* mg_geometrie;
160     MG_VOLUME* mg_volume;
161     FCT_TAILLE *metrique;
162    
163     FRONT front_courant[11];
164     FRONT front_attente;
165    
166     int activelog;
167     std::string nomlog;
168    
169     TPL_OCTREE<MG_TRIANGLE*,MG_NOEUD*> *octree_de_triangle;
170     TPL_OCTREE<MG_TRIANGLE*,MG_NOEUD*> *octree_de_frontiere;
171     TPL_OCTREE<MG_FRONT_3D*,MG_NOEUD*> *octree_de_front;
172     TPL_MAP_ENTITE<MG_TRIANGLE*> triangle_frontiere;
173     TPL_MAP_ENTITE<MG_NOEUD*> noeud_frontiere;
174     TPL_MAP_ENTITE<MG_NOEUD*> noeud_arete_frontiere;
175    
176    
177     };
178    
179    
180    
181    
182    
183    
184    
185    
186    
187    
188    
189    
190    
191    
192     //---------------------------------------------------------------------------
193     #endif