MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mstruct_generateur.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 //####// mstruct_generateur.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:57 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef _MSTRUCT_GENERATEUR_
23 #define _MSTRUCT_GENERATEUR_
24 class MG_GESTIONNAIRE;
25 class MG_CG_MODELE;
26 #include "mstruct_ves.h"
27 #include "tpl_grille.h"
28 #include "mg_cg_groupe_forme.h"
29 #include "mg_cg_forme_volume.h"
31 
32 
33 typedef void fonction_affiche(char *);
35 {
36 public:
37 
38  MSTRUCT_GENERATEUR(MG_GESTIONNAIRE* mg_gestionnaire,char* nom_mgcg_modele);
40  ~MSTRUCT_GENERATEUR(void);
41  virtual MG_GESTIONNAIRE* get_mg_gestionnaire(void);
42  virtual MG_CG_MODELE* get_mgcg_modele(void);
43  virtual void change_mgcg_modele(MG_CG_MODELE* mgcg_modele);
44  virtual int construire(MSTRUCT_VES* ves)=0;
45  virtual int get_type(void)=0;
46  void change_boite3d_ves(BOITE_3D boite3d_ves);
47  void change_boite3d_distribution(BOITE_3D boite3d_distribution);
48  void change_intersection_bords_ves(bool intersection_bords_ves);
49  void change_angle_min(double angle_min);
50  void change_longueur_min(double longueur_min);
51  void change_aire_min(double aire_min);
52  void change_volume_min(double volume_min);
53  void change_distance_inter_volume_min(double distance_min);
54  void change_nb_pas_grille(int nb_pas_grille);
55  void change_nb_pas_echantillonage(int nb_pas_echantillonnage);
56  void change_precision(double precision);
57  double get_fraction_volumique_groupe_forme(std::string nom);
59  void affiche(char *message);
60 protected:
61 
62  int position_relative_inclusion_ves(MG_VOLUME* inclusion,bool &plan_x0yz,bool &plan_x1yz,bool &plan_xy0z,bool &plan_xy1z,bool &plan_xyz0,bool &plan_xyz1);
64  bool longueur_acceptable(MG_ARETE* mgarete);
65  bool aire_acceptable(MG_FACE* mgface);
66  bool volume_acceptable(MG_VOLUME* mgvolume);
69  bool configuration_acceptable(MG_CG_FORME_VOLUME* forme_volume_inclusion,MG_CG_FORME* forme_matrice=NULL);
70  bool positionnement_acceptable(MG_VOLUME* inclusion);
71  bool insertion_inclusion(MG_CG_FORME* forme_inclusion,
72  double fraction_volumique_cible,
73  double eps_fra_vol,
74  double &fraction_volumique_actuelle,
75  std::vector<MG_CG_FORME*> &vector_inclusion_genere,
76  int &position_relative,
77  std::vector<double> *vector_epaisseur_couche=NULL,
78  bool porosite=false);
79 
80  bool insertion_inclusion(MG_CG_FORME* forme_inclusion,
81  double &fraction_volumique_actuelle,
82  std::vector<MG_CG_FORME*> &vector_inclusion_genere,
83  int &position_relative);
84 
85 
86 
87  void echec_insertion_inclusion(std::vector<MG_CG_FORME*> &vector_forme,std::vector<MG_CG_OPERATEUR*> &vector_operateur);
88  int faces_correspondantes(MG_VOLUME* volume1, MG_VOLUME* volume2,double decallage,int nb_pas=32,double precision=1.0e-06);
89  bool lien_topologique_entre(MG_ELEMENT_TOPOLOGIQUE* mg_ele_topo1,MG_ELEMENT_TOPOLOGIQUE* mg_ele_topo2);
90  int configurer_volume_mince(MG_CG_FORME* forme,double epaisseur);
91  int configurer_volume_mince(MG_VOLUME* volume,double epaisseur);
92  void cree_vector_groupe_forme(std::string nom,std::vector<MG_CG_GROUPE_FORME*> &vector_groupe_forme,std::vector<double> *vector_epaisseur_couches=NULL);
93 
99  double m_angle_min;
101  double m_aire_min;
102  double m_volume_min;
106  double m_precision;
108  void initialiser_grille(void);
110  std::vector<MG_CG_GROUPE_FORME*> m_vector_mgcg_groupe_forme_inclusion;
113  double m_nb_pas_x;
114  double m_nb_pas_y;
115  double m_nb_pas_z;
116 
119 };
120 
121 
122 #endif
void active_affichage(fonction_affiche *fonc)
virtual int construire(MSTRUCT_VES *ves)=0
void change_precision(double precision)
MSTRUCT_GENERATEUR(MG_GESTIONNAIRE *mg_gestionnaire, char *nom_mgcg_modele)
bool longueur_acceptable(MG_ARETE *mgarete)
double get_fraction_volumique_groupe_forme(std::string nom)
void change_longueur_min(double longueur_min)
void affiche(char *message)
TPL_GRILLE< MG_VOLUME * > m_grille_volume_inclusion
std::vector< MG_CG_GROUPE_FORME * > m_vector_mgcg_groupe_forme_inclusion
virtual MG_CG_MODELE * get_mgcg_modele(void)
bool configuration_acceptable(MG_CG_FORME_VOLUME *forme_volume_inclusion, MG_CG_FORME *forme_matrice=NULL)
MG_CG_FORME * m_cube_initial
virtual int get_type(void)=0
bool distance_acceptable_bord_ves(MG_VOLUME *mgvolume)
fonction_affiche * fonc_affiche
void change_intersection_bords_ves(bool intersection_bords_ves)
bool angle_entre_face_acceptable(MG_ARETE *mgarete)
MG_GESTIONNAIRE * m_mg_gestionnaire
virtual MG_GESTIONNAIRE * get_mg_gestionnaire(void)
void change_volume_min(double volume_min)
MG_CG_MODELE * m_mgcg_modele
bool insertion_inclusion(MG_CG_FORME *forme_inclusion, double fraction_volumique_cible, double eps_fra_vol, double &fraction_volumique_actuelle, std::vector< MG_CG_FORME * > &vector_inclusion_genere, int &position_relative, std::vector< double > *vector_epaisseur_couche=NULL, bool porosite=false)
void change_angle_min(double angle_min)
void cree_vector_groupe_forme(std::string nom, std::vector< MG_CG_GROUPE_FORME * > &vector_groupe_forme, std::vector< double > *vector_epaisseur_couches=NULL)
void echec_insertion_inclusion(std::vector< MG_CG_FORME * > &vector_forme, std::vector< MG_CG_OPERATEUR * > &vector_operateur)
void change_aire_min(double aire_min)
bool positionnement_acceptable(MG_VOLUME *inclusion)
bool lien_topologique_entre(MG_ELEMENT_TOPOLOGIQUE *mg_ele_topo1, MG_ELEMENT_TOPOLOGIQUE *mg_ele_topo2)
int position_relative_inclusion_ves(MG_VOLUME *inclusion, bool &plan_x0yz, bool &plan_x1yz, bool &plan_xy0z, bool &plan_xy1z, bool &plan_xyz0, bool &plan_xyz1)
bool volume_acceptable(MG_VOLUME *mgvolume)
int faces_correspondantes(MG_VOLUME *volume1, MG_VOLUME *volume2, double decallage, int nb_pas=32, double precision=1.0e-06)
bool aire_acceptable(MG_FACE *mgface)
void change_boite3d_distribution(BOITE_3D boite3d_distribution)
void change_nb_pas_grille(int nb_pas_grille)
virtual void change_mgcg_modele(MG_CG_MODELE *mgcg_modele)
bool volume_intersection_ves_acceptable(MG_VOLUME *mgvolume)
int configurer_volume_mince(MG_CG_FORME *forme, double epaisseur)
void change_nb_pas_echantillonage(int nb_pas_echantillonnage)
void change_boite3d_ves(BOITE_3D boite3d_ves)
void change_distance_inter_volume_min(double distance_min)
void fonction_affiche(char *)