ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/toIbrep/src/toibrep.h
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 3 weeks ago) by francois
Content type: text/plain
File size: 6764 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

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