1 |
francois |
259 |
#ifndef _TOIBREP_ |
2 |
|
|
#define _TOIBREP_ |
3 |
francois |
104 |
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
#ifdef WINDOWS_VERSION |
7 |
francois |
259 |
#ifdef BUILT_DLL_TOIBREP |
8 |
|
|
#define DLLPORTTOIBREP __declspec(dllexport) |
9 |
francois |
104 |
#else |
10 |
francois |
259 |
#define DLLPORTTOIBREP __declspec(dllimport) |
11 |
francois |
104 |
#endif |
12 |
|
|
#else |
13 |
francois |
259 |
#define DLLPORTTOIBREP |
14 |
francois |
104 |
#endif |
15 |
|
|
|
16 |
|
|
#include <string> |
17 |
francois |
106 |
#include "tpl_octree.h" |
18 |
francois |
222 |
#include "mg_geometrie_outils.h" |
19 |
francois |
276 |
#include "IBrep.h" |
20 |
francois |
433 |
#include "fem_maillage_outils.h" |
21 |
francois |
104 |
|
22 |
francois |
433 |
|
23 |
|
|
class XFEM_TRIANGLE3; |
24 |
|
|
|
25 |
francois |
259 |
class DLLPORTTOIBREP TOIBREP |
26 |
francois |
104 |
{ |
27 |
|
|
public: |
28 |
francois |
433 |
enum element_classe {INCONNU=1,EXTERIEUR=3,INTERIEUR=2,FRONTIERE=4,XINCONNU=11,XEXTERIEUR=13,XINTERIEUR=12,XFRONTIERE=14}; |
29 |
francois |
276 |
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm,int nbpas,class OT_CPU* compt); |
30 |
|
|
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm,int nbpas); |
31 |
|
|
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm); |
32 |
|
|
TOIBREP(class MG_GESTIONNAIRE *g,class MG_GEOMETRIE *ge,class FEM_MAILLAGE* femm,class OT_CPU* compt); |
33 |
francois |
259 |
~TOIBREP(); |
34 |
francois |
222 |
//void importer(std::string nomfichier,class MagXchange* data=NULL,std::string nomfichier2=""); |
35 |
francois |
276 |
IBrep importer(std::string nomfichier,std::string nomfichieribrep,class MG_GROUPE_TOPOLOGIQUE* mggt=NULL); |
36 |
francois |
104 |
|
37 |
francois |
276 |
void active_affichage(void (*fonc)(char*)); |
38 |
francois |
104 |
|
39 |
francois |
276 |
IBrep exporter_IBrep(string chemin,class FEM_SOLUTION* solution,class FEM_SOLUTION* solution_ele,MG_GROUPE_TOPOLOGIQUE* mggt=NULL); |
40 |
francois |
433 |
void importer_et_decouper(MG_GROUPE_TOPOLOGIQUE* mggt); |
41 |
francois |
104 |
|
42 |
|
|
private: |
43 |
francois |
309 |
typedef std::multimap<double,FEM_ELEMENT3*,less<double> > LISTE_FM_TRI; |
44 |
francois |
222 |
typedef std::map<unsigned long,LISTE_FM_TRI::iterator,less<unsigned long> > LISTE_FM_TRI_ID; |
45 |
francois |
309 |
typedef std::vector<FEM_ELEMENT3*> LISTE_FM; |
46 |
francois |
104 |
|
47 |
francois |
433 |
FEM_MAILLAGE_OUTILS outilfem; |
48 |
francois |
276 |
OT_CPU* compteur; |
49 |
francois |
281 |
void recherche_arete_tangeante(TPL_MAP_ENTITE<class MG_ARETE*> &lst,TPL_MAP_ENTITE<class MG_ELEMENT_TOPOLOGIQUE*> &lsttopo); |
50 |
|
|
void remplir_trou_tangeant(std::vector<class TOIBREP_POINT*> *lst,MG_ARETE* are,FEM_SOLUTION* solution_ele); |
51 |
francois |
433 |
void remplir_trou(std::vector<class TOIBREP_POINT*> *lst,MG_FACE* face,int orientation,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopoface); |
52 |
francois |
346 |
void decoupe_tetra_noeud(FEM_ELEMENT3* tet,double* lst,int *nbtet); |
53 |
francois |
433 |
int decoupe_tetra(FEM_ELEMENT3* tet,MG_FACE* face); |
54 |
francois |
281 |
void traite_arete_tangeante(class MG_ARETE* are,int numsol,class FEM_SOLUTION* solution,FEM_SOLUTION* solution_ele); |
55 |
francois |
309 |
void ajouter_liste(LISTE_FM_TRI& lst,LISTE_FM_TRI_ID &lstid,FEM_ELEMENT3* tet,double val); |
56 |
|
|
void supprimer_liste(LISTE_FM_TRI& lst,LISTE_FM_TRI_ID &lstid,FEM_ELEMENT3* tet); |
57 |
|
|
void ajouter_liste(LISTE_FM& lst,FEM_ELEMENT3* tet); |
58 |
|
|
void supprimer_liste(LISTE_FM& lst,FEM_ELEMENT3* tet); |
59 |
francois |
346 |
void decoupe_maillage(int num,FEM_SOLUTION* solution,FEM_SOLUTION* solution_ele,int avecsuppression); |
60 |
|
|
void cree_tag_maillage(void); |
61 |
|
|
double get_volume(FEM_ELEMENT3* tet); |
62 |
|
|
void calcul_valeur_sous_element(FEM_ELEMENT3* ele,FEM_ELEMENT3 *xele); |
63 |
francois |
281 |
double calcul_distance(class FEM_NOEUD* noeud,class MG_ARETE* are,class TOIBREP_POINT *pt,double &tii,double *xyz,double precision=1e-6); |
64 |
francois |
280 |
double calcul_distance(FEM_NOEUD* noeud,class MG_FACE* are,TOIBREP_POINT* pt,double *xyz,double *uv,double precision=1e-6); |
65 |
francois |
281 |
double calcul_distance_level_ortho(FEM_NOEUD* no,MG_ARETE* are,TOIBREP_POINT* pt,double precision=1e-6); |
66 |
|
|
double calcul_distance_level_ortho(FEM_NOEUD* no,MG_ARETE* are,TOIBREP_POINT* pt,double &t,double *xyz,double precision=1e-6); |
67 |
francois |
222 |
double calculdist(double *n,double x,double y,double z,class FEM_NOEUD* noeud); |
68 |
francois |
433 |
//void levelsetn(TPL_MAP_ENTITE<class MG_ELEMENT_TOPOLOGIQUE*> *lst,vector<MG_FACE*> *lstface,class FEM_SOLUTION* solution,FEM_SOLUTION* solution_ele,int numsol); |
69 |
|
|
void levelsetn(TPL_MAP_ENTITE<class MG_ELEMENT_TOPOLOGIQUE*> *lst,MG_FACE *face,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopo); |
70 |
francois |
281 |
void echantillonne_aretes(std::vector<TOIBREP_POINT*> &lst,MG_FACE* face); |
71 |
|
|
void echantillonne_sommets(std::vector<TOIBREP_POINT*> &lst,MG_FACE* face); |
72 |
francois |
276 |
void calcullevelsetpremierepasse(MG_FACE* face,int sens,vector<TOIBREP_POINT*> *lst,int n1,int n2); |
73 |
|
|
void calcullevelsetdeuxiemepasse(vector<TOIBREP_POINT*> *lst); |
74 |
francois |
222 |
void etendrelevelset(FEM_SOLUTION* sol,int numsol); |
75 |
francois |
309 |
double resoudgradT(FEM_ELEMENT3* tet,int *signe); |
76 |
francois |
346 |
int signe_tetra(FEM_ELEMENT3* tet); |
77 |
francois |
433 |
TPL_OCTREE<class FEM_ELEMENT3*,class FEM_NOEUD*> octree_tetra; |
78 |
|
|
TPL_OCTREE<class FEM_NOEUD*,class FEM_NOEUD*> octree_noeud; |
79 |
|
|
FEM_NOEUD* inserer_noeud(MG_ELEMENT_TOPOLOGIQUE* topo,double x,double y, double z); |
80 |
|
|
XFEM_TRIANGLE3* inserer_xtriangle(FEM_ELEMENT_MAILLAGE* tet,MG_FACE* face,FEM_NOEUD** tabnoeud); |
81 |
francois |
222 |
MG_GEOMETRIE_OUTILS ot; |
82 |
|
|
MG_GEOMETRIE* geo; |
83 |
|
|
FEM_MAILLAGE* mai; |
84 |
|
|
MG_GESTIONNAIRE* gest; |
85 |
|
|
int NPAS; |
86 |
francois |
433 |
double longueur_caracteristique; |
87 |
francois |
276 |
int affichageactif; |
88 |
|
|
void (*affiche)(char *mess); |
89 |
francois |
433 |
void recherche_interieur_face(FEM_ELEMENT3* tet,MG_FACE* face,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopo); |
90 |
|
|
void decoupe_element2_par_element1et0(FEM_ELEMENT3* ele,TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> *lstentitetopo); |
91 |
|
|
int decoupe_element2(FEM_ELEMENT3* ele,FEM_NOEUD* no); |
92 |
|
|
int decoupe_element(XFEM_ELEMENT2 *ele,FEM_NOEUD* no); |
93 |
|
|
void decoupe_element(int status,FEM_NOEUD* no,FEM_ELEMENT3* ele); |
94 |
|
|
int decoupe_element(int status,FEM_ELEMENT3 *ele,FEM_NOEUD* no,FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_NOEUD* no3,FEM_NOEUD* no4); |
95 |
|
|
void decoupe_element(XFEM_ELEMENT1* seg,class inter_ele_arete *ele_inter); |
96 |
|
|
void decoupe_xtri(FEM_ELEMENT3* tet,int nb_xtri); |
97 |
|
|
int intersection_arete_triangle(MG_ARETE* are,FEM_NOEUD* no1,FEM_NOEUD *no2,FEM_NOEUD *no3,double *uv,double *xyz); |
98 |
|
|
int decoupe_arete_tetra(MG_ARETE* are,double *xyz,double *xyzcible,double &t,class inter_ele_arete& ele_inter); |
99 |
|
|
int decoupe_segment_xtetra(FEM_ELEMENT3* ele,XFEM_ELEMENT1* seg,double *xyz,double *xyzcible,double &t,inter_ele_arete& xele_inter); |
100 |
|
|
int intersection_segment_triangle(FEM_NOEUD* nos1,FEM_NOEUD* nos2,FEM_NOEUD* no1,FEM_NOEUD *no2,FEM_NOEUD *no3,double *uv,double *xyz); |
101 |
|
|
int test_du_point_milieu(FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_ELEMENT3* tet); |
102 |
|
|
void oriente_tri(XFEM_ELEMENT2* tri,MG_FACE* face); |
103 |
|
|
int inter_segment_segment_plan(XFEM_ELEMENT2 *xfem2,FEM_NOEUD *no1,FEM_NOEUD *no2,FEM_NOEUD *nos1,FEM_NOEUD *nos2,double *xyz); |
104 |
|
|
void testtopo(void); |
105 |
francois |
104 |
}; |
106 |
|
|
|
107 |
|
|
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
|
111 |
|
|
|
112 |
|
|
#endif |