MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
occ_cg_forme_volume_ellipsoide.cpp
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 //####// occ_cg_forme_volume_ellipsoide.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifdef ALL_OCC
24 #include "mg_cg_modele.h"
25 #include "occ_fonction.h"
26 #include "occ_fonction_v2017.h"
27 #include <TopoDS_Shape.hxx>
28 #include <TopoDS_Edge.hxx>
29 #include <TopoDS_Wire.hxx>
30 #include <gp_Elips.hxx>
31 #include <gp_Ax2.hxx>
32 #include <gp_Dir.hxx>
33 #include <gp_Pnt.hxx>
34 #include <BRepBuilderAPI_MakeEdge.hxx>
35 #include <BRepBuilderAPI_MakeWire.hxx>
36 #include <BRepBuilderAPI_MakeFace.hxx>
37 #include <BRepPrimAPI_MakeRevol.hxx>
38 #include <math.h>
40  double centre_x, double centre_y, double centre_z,
41  double direction_x, double direction_y, double direction_z,
42  double rayon_majeur, double rayon_mineur): MG_CG_FORME_VOLUME_ELLIPSOIDE(mgcg_modele,centre_x, centre_y, centre_z, direction_x, direction_y, direction_z, rayon_majeur, rayon_mineur)
43 {
44 
45 }
46 
48  int etat,
49  long unsigned int num,
50  MG_VOLUME* mg_volume,
51  double centre_x, double centre_y, double centre_z,
52  double direction_x, double direction_y, double direction_z,
53  double rayon_majeur, double rayon_mineur): MG_CG_FORME_VOLUME_ELLIPSOIDE(mgcg_modele,etat, num, mg_volume, centre_x, centre_y, centre_z, direction_x, direction_y, direction_z, rayon_majeur, rayon_mineur)
54 {
55 
56 }
57 
59 {
60 
61 }
62 
64 {
65 
66 }
67 
69 {
70  if(m_mgcg_modele==NULL)
71  {
72  std::cout << "*** ERREUR : OCC_CG_FORME_VOLUME_ELLIPSOIDE::construire_forme -> MG_CG_MODELE NULL ***" << std::endl;
73  return FAIL;
74  }
79 }
80 
81 int OCC_CG_FORME_VOLUME_ELLIPSOIDE::construire(bool fusionner_entite_similaire, double precision, bool importer_triangulation, double epsilon_triangulation)
82 {
83  if(m_mgcg_modele==NULL)
84  {
85  std::cout << "*** ERREUR : OCC_CG_FORME_VOLUME_ELLIPSOIDE::construire_forme -> MG_CG_MODELE NULL ***" << std::endl;
86  return FAIL;
87  }
88  gp_Pnt centre_ellipsoide(m_centre[0],m_centre[1],m_centre[2]);
89  gp_Dir direction_ellipsoide (m_direction[0],m_direction[1],m_direction[2]);
90  gp_Ax2 axe_ellipsoide;
91  axe_ellipsoide.SetLocation(centre_ellipsoide);
92  axe_ellipsoide.SetDirection(direction_ellipsoide);
93  axe_ellipsoide.Rotate(gp_Ax1(centre_ellipsoide,axe_ellipsoide.YDirection()),M_PI/2.);
94  gp_Elips ellipse;
96  {
97  ellipse = gp_Elips(axe_ellipsoide,m_rayon_majeur,m_rayon_mineur);
98  }
99  else
100  {
101  ellipse = gp_Elips(axe_ellipsoide,m_rayon_mineur,m_rayon_majeur);
102  }
103  TopoDS_Edge edge ;
104  edge = BRepBuilderAPI_MakeEdge(ellipse,0.0,M_PI).Edge();
105  TopoDS_Wire wire;
106  wire = BRepBuilderAPI_MakeWire(edge).Wire();
107  TopoDS_Face face;
108  face = BRepBuilderAPI_MakeFace(wire,true);
109  gp_Dir direction_axe_revolution(m_direction[0],m_direction[1],m_direction[2]);
110  gp_Ax1 axe_revolution;
111  axe_revolution.SetLocation(centre_ellipsoide);
112  axe_revolution.SetDirection(direction_axe_revolution);
113  TopoDS_Shape topods_shape = BRepPrimAPI_MakeRevol(face,axe_revolution,2.*M_PI).Shape();
114  BRepTools::Write(topods_shape,(char*)"test.brep");
116  if(occ_fonction->get_version()=="OCCV2017")
117  {
118  OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)occ_fonction;
119  m_mg_volume = occ_fonction_v2017->importer_TopoDS_Solid(TopoDS::Solid(topods_shape),
120  NULL,
121  NULL,
122  NULL,
124  fusionner_entite_similaire,
125  precision);
126  }
127  change_etat(MG_CG_FORME::ETAT_FORME::CONSTRUITE);
129  return OK;
130 }
131 
132 #endif
FAIL
const int FAIL
Definition: mg_definition.h:39
MG_CG_FORME_VOLUME_ELLIPSOIDE::m_rayon_mineur
double m_rayon_mineur
Definition: mg_cg_forme_volume_ellipsoide.h:82
OCC_CG_FORME_VOLUME_ELLIPSOIDE::~OCC_CG_FORME_VOLUME_ELLIPSOIDE
virtual ~OCC_CG_FORME_VOLUME_ELLIPSOIDE()
Definition: occ_cg_forme_volume_ellipsoide.cpp:63
MG_CG_MODELE::get_epsilon_triangulation
virtual double get_epsilon_triangulation(void)
Definition: mg_cg_modele.cpp:1119
MG_CG_FORME::change_etat
virtual void change_etat(int etat_forme)
Definition: mg_cg_forme.cpp:81
OK
const int OK
Definition: mg_definition.h:38
MG_VOLUME
Definition: mg_volume.h:33
OCC_CG_FORME_VOLUME_ELLIPSOIDE::construire
virtual int construire(void)
Definition: occ_cg_forme_volume_ellipsoide.cpp:68
MG_CG_MODELE::mise_a_jout_lien_mg_element_mgcg_forme
virtual void mise_a_jout_lien_mg_element_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_modele.cpp:987
MG_CG_MODELE::get_mg_geometrie
virtual MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_cg_modele.cpp:98
MG_CG_FORME_VOLUME_ELLIPSOIDE::m_rayon_majeur
double m_rayon_majeur
Definition: mg_cg_forme_volume_ellipsoide.h:81
MG_CG_FORME_VOLUME_ELLIPSOIDE::m_direction
double m_direction[3]
Definition: mg_cg_forme_volume_ellipsoide.h:80
OCC_CG_FORME_VOLUME_ELLIPSOIDE::OCC_CG_FORME_VOLUME_ELLIPSOIDE
OCC_CG_FORME_VOLUME_ELLIPSOIDE(MG_CG_MODELE *mgcg_modele, double centre_x, double centre_y, double centre_z, double direction_x, double direction_y, double direction_z, double rayon_majeur, double rayon_mineur)
Definition: occ_cg_forme_volume_ellipsoide.cpp:39
MG_CG_MODELE::get_precision
virtual double get_precision(void)
Definition: mg_cg_modele.cpp:1099
MG_CG_FORME::m_mgcg_modele
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_forme.h:87
MG_CG_MODELE
Definition: mg_cg_modele.h:41
occ_fonction_v2017.h
occ_cg_forme_volume_ellipsoide.h
mg_cg_modele.h
OCC_CG_FORME_VOLUME_ELLIPSOIDE
Definition: occ_cg_forme_volume_ellipsoide.h:38
MG_CG_FORME_VOLUME_ELLIPSOIDE
Definition: mg_cg_forme_volume_ellipsoide.h:36
MG_CG_MODELE::get_fusionner_entite_similaire
virtual bool get_fusionner_entite_similaire(void)
Definition: mg_cg_modele.cpp:1089
MG_CG_MODELE::get_importer_triangulation
virtual bool get_importer_triangulation(void)
Definition: mg_cg_modele.cpp:1109
MG_CG_FORME_VOLUME::m_mg_volume
MG_VOLUME * m_mg_volume
Definition: mg_cg_forme_volume.h:65
OCC_FONCTION_V2017
Definition: occ_fonction_v2017.h:104
occ_fonction.h
OCC_FONCTION
Definition: occ_fonction.h:40
MG_CG_FORME_VOLUME_ELLIPSOIDE::m_centre
double m_centre[3]
Definition: mg_cg_forme_volume_ellipsoide.h:79
MG_GEOMETRIE::get_occ_fonction
class OCC_FONCTION & get_occ_fonction(void)
Definition: mg_geometrie.cpp:2701
OCC_FONCTION::get_version
virtual std::string get_version(void)
Definition: occ_fonction.cpp:88
OCC_FONCTION_V2017::importer_TopoDS_Solid
MG_VOLUME * importer_TopoDS_Solid(TopoDS_Solid topods_solid, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
Definition: occ_fonction_v2017.cpp:546