ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mailleur/src/mailleur3d.h
Revision: 1150
Committed: Tue May 28 12:57:28 2024 UTC (11 months, 2 weeks ago) by francois
Content type: text/plain
Original Path: magic/lib/mailleur_auto/src/mailleur3d.h
File size: 9531 byte(s)
Log Message:
deplacement des contantes dans le namespace MAGIC

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    
59    
60 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
61 francois 78
62 francois 190
63 5 class DLLPORTMAIL MAILLEUR3D:public MAILLEUR
64     {
65     public:
66    
67    
68    
69 francois 287
70 francois 420
71 francois 1150 MAILLEUR3D(MG_MAILLAGE* mgmai,MG_GEOMETRIE *mggeo,FCT_TAILLE* fct_taille,bool save,MG_VOLUME* mgvol=NULL,int destruction=MAGIC::MAILLEURFRONTALETAT::TOUTDETRUIRE);
72     MAILLEUR3D(FCT_TAILLE* met,MG_MAILLAGE* mgmai,class OT_CPU* comp=NULL,int destruction=MAGIC::MAILLEURFRONTALETAT::TOUTDETRUIRE);
73 5 virtual ~MAILLEUR3D();
74    
75 couturad 966 virtual int maille(MG_GROUPE_TOPOLOGIQUE* mggt=NULL);
76     virtual int maille(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TRIANGLE*> *lsttri=NULL,TPL_LISTE_ENTITE<MG_TETRA*> *lsttet=NULL);
77 5
78 francois 419
79 francois 421 virtual void active_log(char* nomfile);
80     virtual void desactive_log(void);
81 francois 424 virtual void analyse_maillage_obtenu(double &vol,int *tab,double borne1=0.1,double borne2=0.2,double borne3=0.5);
82 francois 421 virtual void change_niveau_optimisation(int num);
83     virtual int get_niveau_optimisation(void);
84     virtual void change_coef(double val);
85     virtual void verifie_conformite_octale(MG_MAILLAGE* mai,MG_MAILLAGE* maisur);
86 5
87 francois 420 protected:
88     typedef std::multimap<double,MG_FRONT_3D*,std::less<double> > FRONT;
89 couturad 966 virtual int maille(FCT_TAILLE *metri);
90 5
91 francois 421 virtual void insere_contrainte_tetra(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TETRA*> *lsttet);
92     virtual void insere_contrainte_triangle(MG_VOLUME* mgvol,TPL_LISTE_ENTITE<MG_TRIANGLE*> *lsttri);
93 francois 54
94    
95    
96 francois 632 virtual void cree_ntree(void);
97 francois 421 virtual void initialise_front(MG_VOLUME* mgvol);
98 francois 420 virtual void cree_front(MG_VOLUME* mgvol);
99 francois 421 virtual void recherche_voisin_front(void);
100 couturad 919 virtual int progresse_front(MG_VOLUME* mgvol);
101 francois 421 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);
102     virtual void detruit_element_inactif(void);
103 5
104 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);
105     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);
106     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);
107     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);
108     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);
109     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);
110 5
111 francois 421 virtual int traite_destruction(MG_FRONT_3D* ft,TPL_MAP_ENTITE<class MG_TRIANGLE*>& liste_intersection);
112     virtual void detruit_tetra(MG_TRIANGLE* tri);
113 5
114 francois 1150 virtual class MG_FRONT_3D* mise_a_jour_front(MG_TETRA* tet,int cote,int numfront=MAGIC::MAILLEURFRONTALETAT::ATTENTE);
115 francois 421 virtual void mise_a_jour_voisin_front(MG_FRONT_3D* ft);
116 5
117 francois 421 virtual int test_front(void);
118     virtual void genere_log(int fincouche);
119     virtual void ini_log(void);
120     virtual void fin_log(void);
121 5
122    
123 francois 421 virtual double angle_front(MG_FRONT_3D* ft1,MG_FRONT_3D* ft2);
124     virtual double angle_front(MG_FRONT_3D* ft1,MG_SEGMENT* seg);
125     virtual double evaluer_distance_noeud_triangle(double x,double y,double z,MG_TRIANGLE* tri);
126     virtual void insere_cas_front(int type,MG_NOEUD* noeud,int numero_cote,double angle,std::vector<CAS_FRONT*>& liste_cas);
127     virtual void efface_cas_front(std::vector<CAS_FRONT*>& liste_cas,std::vector<CAS_FRONT*> liste_classe_cas[8]);
128 5
129 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);
130     virtual int inter_triangle_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6);
131     virtual int inter_segment_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5);
132     virtual int inter_segment_segment(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
133 francois 551 virtual int inter_segment_segment1(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
134     virtual int inter_segment_segment2(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
135     virtual int examine_solution(double sol1,double sol2,double epssol1,double epssol2,int type);
136     //virtual int noeud_est_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,double x,double y,double z);
137 5
138    
139 francois 421 virtual double calcule_volume(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
140     virtual double calcule_longueur_caracteristique(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3=NULL,MG_NOEUD* noeud4=NULL);
141 5
142 francois 532 double calcul_distance_metrique_segment(MG_SEGMENT *seg,int pas);
143 5
144 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);
145     virtual class MG_TRIANGLE* insere_triangle(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,int origine);
146     virtual class MG_SEGMENT* insere_segment(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,int origine);
147     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);
148     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);
149     virtual class MG_SEGMENT* cree_segment(class MG_VOLUME* mgvol,MG_NOEUD* noeud1,MG_NOEUD* noeud2,int origine);
150 5
151 francois 421 virtual void insere_tetra(MG_MAILLAGE* mai,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4);
152 francois 78
153 francois 558 int supprimer_mg_tetra(MG_TETRA* mgtetra);
154 francois 78
155    
156 francois 421 virtual MG_FRONT_3D* ajouter_front_courant(int numero_front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
157     virtual MG_FRONT_3D* ajouter_front(FRONT& front,MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_TRIANGLE* triangle);
158     virtual void ajouter_front(FRONT& front,MG_FRONT_3D *ft);
159 francois 551 virtual MG_FRONT_3D* get_premier_front(FRONT& front);
160     virtual MG_FRONT_3D* get_premier_front(FRONT& front,FRONT::iterator &it);
161     virtual MG_FRONT_3D* get_suivant_front(FRONT& front,FRONT::iterator &it);
162 francois 421 virtual unsigned int get_nb_front(FRONT& front);
163     virtual unsigned int get_nb_front_courant(void);
164     virtual void supprimer_front_en_avancant(MG_FRONT_3D* ft);
165     virtual void supprimer_front_en_avancant_sans_delete(MG_FRONT_3D* ft);
166     virtual void supprimer_front_en_reculant(MG_FRONT_3D* ft);
167     virtual void echange_de_front(FRONT& front_original,FRONT& front_destination,MG_FRONT_3D* ft);
168     virtual void echange_de_front(MG_FRONT_3D* ft,int num);
169     virtual void swap_front(FRONT& front_original,FRONT& front_destination);
170     virtual int premier_front_courant(void);
171 5
172    
173    
174 francois 54
175 francois 558 TPL_MAP_ENTITE<MG_TETRA*> lsttet_a_detruire;
176     TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud_a_detruire;
177    
178 5
179 francois 35
180 5 MG_MAILLAGE* mg_maillage;
181     MG_GEOMETRIE* mg_geometrie;
182     MG_VOLUME* mg_volume;
183     FCT_TAILLE *metrique;
184 francois 78 int type_mailleur;
185 francois 445 double distance_maximale;
186 couturad 944 FRONT front_courant[12];
187 5 FRONT front_attente;
188    
189     int activelog;
190     std::string nomlog;
191    
192 francois 632 TPL_NTREE_FCT<MG_FRONT_3D*,FCT_TAILLE > *ntree_de_front;
193 5
194 francois 61 int niveau_optimisation;
195 francois 190 int typedestruction;
196 francois 61 FILE* inlog;
197 francois 78 double coef;
198 francois 551
199    
200    
201 francois 558 int passe;
202 5 };
203    
204    
205    
206    
207    
208    
209    
210    
211    
212    
213    
214    
215    
216    
217 francois 287
218 5 //---------------------------------------------------------------------------
219     #endif