MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_squelette_opt.h
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
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 //####// rec_squelette_opt.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef _REC_SQUELETTE_OPT_
23 #define _REC_SQUELETTE_OPT_
24 
25 #include "mg_file.h"
27 #include "sq_raccord.h"
28 #include <tpl_grille.h>
29 #include <math.h>
30 #include "mg_export.h"
31 
33 {
34 public:
37 
38  void import_squelette_cg(FILE *fichier_cg,MG_MAILLAGE* mai_sq);
39  void supp_squelette_nondesign(MG_MAILLAGE* mai_sq,MG_MAILLAGE* mai_nd);
42  void creation_LstBranches(MG_MAILLAGE* mai_sq);
43  void calcul_branches(MG_MAILLAGE* mai_peau,double param_dist=1.3,double angle_seuil=178.,double lambda=0.8);
44  void calcul_sections2(MG_MAILLAGE* mai_peau,int NbSecs,int NbPtsInterp);
45  void affichage_sections(MG_MAILLAGE* mai_sq);
46  void affichage_sections2(MG_MAILLAGE* mai_sq);
47  void calcul_guides(MG_MAILLAGE* mai_peau,MG_MAILLAGE* mai_nd);
48  void affichage_guides(MG_MAILLAGE* mai_sq);
49  void creation_LstJonctions(MG_MAILLAGE* mai_sq);
50  void calcul_sections_jonc(MG_MAILLAGE* mai_peau,MG_MAILLAGE* mai_sq,int NbPtsInterp=7,int theta=60);
52 
53  std::vector<SQ_BRANCHE*> getLstBranches();
54  std::vector<SQ_JONCTION*> getLstJonctions();
55 
56 protected:
58  int point_appartient_volume(double *xyz,TPL_LISTE_ENTITE<MG_TRIANGLE*>* lsttrifront,int numvol);
59  int inter_droite_triangle(double *xyz,double *dir,MG_TRIANGLE* tri,double *t);
60  void calcul_normales(SQ_BRANCHE* Bran);
61  void lissage_branche(SQ_BRANCHE* Bran,double angle_seuil,double lambda);
62  void recherche_contour(std::vector<MG_NOEUD*>* Contour,TPL_LISTE_ENTITE<MG_NOEUD*>* LstNoInter);
63  void centre_contour(std::vector<MG_NOEUD*>* Contour,double C[3]);
64  void calcul_section(TPL_MAP_ENTITE<MG_SEGMENT*>* MapSeg,double O[3],double V[3],double eps,std::vector<MG_NOEUD*>* section);
65  std::vector<SQ_NOEUD*> calcul_positions_sections(SQ_BRANCHE* Bran,int NbSecs);
66  SQ_NOEUD* milieu_branche(std::vector<SQ_NOEUD*>* branche);
67  double rayon_moyen(std::vector<MG_NOEUD*>* section, SQ_NOEUD* no_sq);
68  double rayon_max(std::vector<MG_NOEUD*>* section, SQ_NOEUD* no_sq);
69  void determine_dir_sec(SQ_NOEUD* no_sq,std::vector<MG_NOEUD*>* section);
71  void determine_dir_guide(int i);
72  int inter_segment_triangle(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5);
74  void prolongation_guide(std::vector<MG_NOEUD*>* guide,int num_bran,double eps);
75  void determine_dirs_interf(SQ_INTERFACE* interf,double DistMax);
76 
79 
82  std::vector<SQ_BRANCHE*> LstBranches;
83  std::vector<SQ_JONCTION*> LstJonctions;
84 };
85 #endif
86 
void V(MCAA *mcaa)
double rayon_max(std::vector< MG_NOEUD * > *section, SQ_NOEUD *no_sq)
void calcul_sections_jonc(MG_MAILLAGE *mai_peau, MG_MAILLAGE *mai_sq, int NbPtsInterp=7, int theta=60)
void creation_espaces_voisinage(MG_MAILLAGE *mai_peau)
void cree_liste_frontiere(MG_MAILLAGE *mai, TPL_LISTE_ENTITE< MG_TRIANGLE * > *lsttrifront)
void liaison_squelette_interface_nondesign(MG_MAILLAGE *mai_sq, MG_MAILLAGE *mai_peau)
void calcul_normales(SQ_BRANCHE *Bran)
void lissage_branche(SQ_BRANCHE *Bran, double angle_seuil, double lambda)
void affichage_sections2(MG_MAILLAGE *mai_sq)
void affichage_sections_jonc(MG_MAILLAGE *mai_sq)
double rayon_moyen(std::vector< MG_NOEUD * > *section, SQ_NOEUD *no_sq)
void affichage_voisinage_seg(TPL_MAP_ENTITE< MG_SEGMENT * > *MapSeg)
std::vector< SQ_NOEUD * > calcul_positions_sections(SQ_BRANCHE *Bran, int NbSecs)
void calcul_guides(MG_MAILLAGE *mai_peau, MG_MAILLAGE *mai_nd)
void prolongation_guide(std::vector< MG_NOEUD * > *guide, int num_bran, double eps)
void affichage_sections(MG_MAILLAGE *mai_sq)
void creation_LstBranches(MG_MAILLAGE *mai_sq)
void affichage_voisinage_tri(TPL_MAP_ENTITE< MG_TRIANGLE * > *MapTri)
std::vector< SQ_BRANCHE * > LstBranches
void determine_dirs_interf(SQ_INTERFACE *interf, double DistMax)
void calcul_branches(MG_MAILLAGE *mai_peau, double param_dist=1.3, double angle_seuil=178., double lambda=0.8)
std::vector< SQ_JONCTION * > getLstJonctions()
std::vector< SQ_JONCTION * > LstJonctions
void calcul_section(TPL_MAP_ENTITE< MG_SEGMENT * > *MapSeg, double O[3], double V[3], double eps, std::vector< MG_NOEUD * > *section)
void import_squelette_cg(FILE *fichier_cg, MG_MAILLAGE *mai_sq)
void creation_LstJonctions(MG_MAILLAGE *mai_sq)
TPL_GRILLE< MG_SEGMENT * > GrilleSeg
void determine_dir_guide(int i)
void affichage_guides(MG_MAILLAGE *mai_sq)
std::vector< SQ_BRANCHE * > getLstBranches()
void recherche_contour(std::vector< MG_NOEUD * > *Contour, TPL_LISTE_ENTITE< MG_NOEUD * > *LstNoInter)
int point_appartient_volume(double *xyz, TPL_LISTE_ENTITE< MG_TRIANGLE * > *lsttrifront, int numvol)
void centre_contour(std::vector< MG_NOEUD * > *Contour, double C[3])
MG_NOEUD * proj_noeud_triangulation(SQ_NOEUD *no_sq, TPL_MAP_ENTITE< MG_TRIANGLE * > *MapTri)
SQ_NOEUD * milieu_branche(std::vector< SQ_NOEUD * > *branche)
TPL_GRILLE< MG_TRIANGLE * > GrilleTri
int inter_segment_triangle(MG_NOEUD *noeud1, MG_NOEUD *noeud2, MG_NOEUD *noeud3, MG_NOEUD *noeud4, MG_NOEUD *noeud5)
int inter_droite_triangle(double *xyz, double *dir, MG_TRIANGLE *tri, double *t)
void supp_squelette_nondesign(MG_MAILLAGE *mai_sq, MG_MAILLAGE *mai_nd)
int inter_segment_segment1(MG_NOEUD *A, MG_NOEUD *B, MG_NOEUD *C, MG_NOEUD *D)
void determine_dir_sec(SQ_NOEUD *no_sq, std::vector< MG_NOEUD * > *section)
void calcul_sections2(MG_MAILLAGE *mai_peau, int NbSecs, int NbPtsInterp)