MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
occ_cg_op_transf_rotation.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_op_transf_rotation.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_definition.h"
25 #include "occ_ot_cg.h"
26 #include "mg_cg_modele.h"
27 #include "mg_cg_forme.h"
28 #include "mg_geometrie.h"
29 #include <BRepBuilderAPI_Transform.hxx>
30 #include <gp_Trsf.hxx>
31 #include <gp_Quaternion.hxx>
32 #include <BRep_Builder.hxx>
33 #include <gp_Vec.hxx>
34 #include <gp_Ax1.hxx>
35 
36 
38  int semantique,
39  MG_CG_FORME* mgcg_forme_entree): MG_CG_OP_TRANSF_ROTATION(mgcg_modele,semantique, mgcg_forme_entree)
40 {
41 
42 }
43 
45  int semantique,
46  int etat,
47  long unsigned int num,
48  MG_CG_FORME* mgcg_forme_entree,
49  long int id_mgcg_forme_sortie): MG_CG_OP_TRANSF_ROTATION(mgcg_modele,semantique,etat,num,mgcg_forme_entree,id_mgcg_forme_sortie)
50 {
51 
52 }
53 
55 {
56 
57 }
58 
60 {
61 
62 }
63 
65 {
66  if(m_mgcg_modele==NULL)
67  {
68  std::cout << "*** ERREUR : OCC_CG_OP_TRANSF_ROTATION::construire_forme -> MG_CG_MODELE NULL ***" << std::endl;
69  return FAIL;
70  }
75 }
76 
77 int OCC_CG_OP_TRANSF_ROTATION::construire(bool fusionner_entite_similaire, double precision, bool importer_triangulation, double epsilon_triangulation)
78 {
79  if(m_mgcg_modele==NULL)
80  {
81  std::cout << "*** ERREUR : OCC_CG_OP_TRANSF_ROTATION::construire_forme -> MG_CG_MODELE NULL ***" << std::endl;
82  return FAIL;
83  }
84  TopTools_ListOfShape list_of_shape;
86  BRep_Builder brep_builder;
87  TopoDS_Compound Compound_forme_entree;
88  brep_builder.MakeCompound(Compound_forme_entree);
89  TopTools_ListOfShape::Iterator it_shape;
90  for(it_shape.Init(list_of_shape);it_shape.More();it_shape.Next())
91  {
92  brep_builder.Add(Compound_forme_entree,it_shape.Value());
93  }
94  gp_Quaternion occ_quaternion(m_quaternion.get_x(),m_quaternion.get_y(),m_quaternion.get_z(),m_quaternion.get_w());
95  gp_Vec vec_axe;
96  double angle;
97  occ_quaternion.GetVectorAndAngle(vec_axe,angle);
98  gp_Ax1 axe_rotation(gp_Pnt(m_centre_rotation[0],m_centre_rotation[1],m_centre_rotation[2]),gp_Dir(vec_axe));
99  gp_Trsf transformation;
100  transformation.SetRotation(axe_rotation,angle);
101  BRepBuilderAPI_Transform brep_transform(transformation);
102  brep_transform.Perform(Compound_forme_entree,true);
103  if(!brep_transform.IsDone())
104  {
105  std::cout << "*** ERREUR : OCC_CG_OP_TRANSF_ROTATION::construire_forme -> ECHEC de BRepBuilderAPI_Transform ***" << std::endl;
106  return FAIL;
107  }
108  TopoDS_Shape shape_resultat = brep_transform.Shape();
111  shape_resultat,
112  occ_fonction,
114  fusionner_entite_similaire,
115  precision,
116  importer_triangulation,
117  epsilon_triangulation);
118  m_mgcg_modele->ajouter_mgcg_forme(forme_resultat);
119  change_mgcg_forme_sortie(forme_resultat);
122  change_etat(MG_CG_OPERATEUR::ETAT_OPERATEUR::CONSTRUIT);
123  return OK;
124 }
125 
126 #endif
MG_CG_OP_TRANSFORMATION::change_mgcg_forme_sortie
virtual int change_mgcg_forme_sortie(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_op_transformation.cpp:73
MG_CG_OP_TRANSF_ROTATION::m_quaternion
OT_QUATERNION m_quaternion
Definition: mg_cg_op_transf_rotation.h:59
mg_cg_forme.h
mg_geometrie.h
occ_ot_cg.h
occ_cg_op_transf_rotation.h
OCC_OT_CG::creer_MG_CG_FORME
static MG_CG_FORME * creer_MG_CG_FORME(MG_CG_MODELE *mgcg_modele, TopoDS_Shape topods_shape, OCC_FONCTION *occ_fonction, MG_GEOMETRIE *mg_geometrie, bool fusionner_entite_similaire=false, double precision=1e-6, bool importer_triangulation=false, double epsilon_triangulation=1.)
Definition: occ_ot_cg.cpp:34
FAIL
const int FAIL
Definition: mg_definition.h:39
MG_CG_OPERATEUR::change_etat
virtual void change_etat(int etat_operateur)
Definition: mg_cg_operateur.cpp:74
MG_CG_OPERATEUR::m_mgcg_modele
MG_CG_MODELE * m_mgcg_modele
Definition: mg_cg_operateur.h:81
OT_QUATERNION::get_x
double get_x(void)
Definition: ot_mathematique.cpp:331
MG_CG_MODELE::get_epsilon_triangulation
virtual double get_epsilon_triangulation(void)
Definition: mg_cg_modele.cpp:1119
OT_QUATERNION::get_z
double get_z(void)
Definition: ot_mathematique.cpp:351
MG_CG_OP_TRANSFORMATION::get_mgcg_forme_entree
virtual MG_CG_FORME * get_mgcg_forme_entree(void)
Definition: mg_cg_op_transformation.cpp:68
OCC_OT_CG::get_listofTopoDS_Shape
static void get_listofTopoDS_Shape(std::map< MG_CG_FORME *, MG_CG_FORME * > *map_forme, TopTools_ListOfShape &listofshape)
Definition: occ_ot_cg.cpp:538
OK
const int OK
Definition: mg_definition.h:38
MG_CG_OP_TRANSF_ROTATION::m_centre_rotation
double m_centre_rotation[3]
Definition: mg_cg_op_transf_rotation.h:60
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
OCC_CG_OP_TRANSF_ROTATION::OCC_CG_OP_TRANSF_ROTATION
OCC_CG_OP_TRANSF_ROTATION(MG_CG_MODELE *mgcg_modele, int semantique, MG_CG_FORME *mgcg_forme_entree)
Definition: occ_cg_op_transf_rotation.cpp:37
MG_CG_MODELE::get_mg_geometrie
virtual MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_cg_modele.cpp:98
OT_QUATERNION::get_w
double get_w(void)
Definition: ot_mathematique.cpp:361
MG_CG_FORME
Definition: mg_cg_forme.h:41
MG_CG_MODELE::get_precision
virtual double get_precision(void)
Definition: mg_cg_modele.cpp:1099
OT_QUATERNION::get_y
double get_y(void)
Definition: ot_mathematique.cpp:341
MG_CG_MODELE
Definition: mg_cg_modele.h:41
mg_cg_modele.h
OCC_CG_OP_TRANSF_ROTATION::construire
virtual int construire(void)
Definition: occ_cg_op_transf_rotation.cpp:64
MG_CG_MODELE::ajouter_mgcg_forme
virtual int ajouter_mgcg_forme(MG_CG_FORME *mgcg_forme)
Definition: mg_cg_modele.cpp:195
MG_CG_MODELE::get_fusionner_entite_similaire
virtual bool get_fusionner_entite_similaire(void)
Definition: mg_cg_modele.cpp:1089
MG_CG_OP_TRANSFORMATION::get_mgcg_forme_sortie
virtual MG_CG_FORME * get_mgcg_forme_sortie(void)
Definition: mg_cg_op_transformation.cpp:80
OCC_CG_OP_TRANSF_ROTATION::~OCC_CG_OP_TRANSF_ROTATION
virtual ~OCC_CG_OP_TRANSF_ROTATION()
Definition: occ_cg_op_transf_rotation.cpp:59
MG_CG_MODELE::get_importer_triangulation
virtual bool get_importer_triangulation(void)
Definition: mg_cg_modele.cpp:1109
mg_definition.h
MG_CG_FORME::change_mgcg_operateur_parent
virtual void change_mgcg_operateur_parent(MG_CG_OPERATEUR *mgcg_operateur)
Definition: mg_cg_forme.cpp:91
MG_CG_OP_TRANSF_ROTATION
Definition: mg_cg_op_transf_rotation.h:34
OCC_FONCTION
Definition: occ_fonction.h:40
OCC_CG_OP_TRANSF_ROTATION
Definition: occ_cg_op_transf_rotation.h:37
MG_GEOMETRIE::get_occ_fonction
class OCC_FONCTION & get_occ_fonction(void)
Definition: mg_geometrie.cpp:2701