MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
CAD4FE_PolyCurve.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 //####// CAD4FE_PolyCurve.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #ifndef CAD4FE_PolyCurveH
24 #define CAD4FE_PolyCurveH
25 #include "gestionversion.h"
26 #include "mg_geometrie.h"
27 #include "mg_arete.h"
28 
29 #include <map>
30 #include <ostream>
31 #include <string>
32 #include <vector>
33 
34 
35 
36 namespace CAD4FE {
37 
38 class PolyCurve : public MG_COURBE
39 {
40 public:
41 
42  PolyCurve();
45  void InsertCurve(MG_ARETE *);
46  void Merge( PolyCurve &);
48 
49  MG_ARETE * GetRefEdge(unsigned int);
50  unsigned int RefEdge_GetIndex(MG_ARETE * __refEdge);
51  unsigned GetRefEdgeCount() ;
52  MG_SOMMET * GetRefVertex(unsigned int);
53  unsigned int RefVertex_GetIndex(MG_SOMMET * __refVertex);
54  unsigned GetRefVertexCount() ;
55  bool ContainsRefEdge(MG_ARETE * __refEdge);
56  bool ContainsRefVertex(MG_SOMMET * __v);
57  bool Contains(MG_ELEMENT_TOPOLOGIQUE * __topo);
58 
59  void RefEdge_GetT ( unsigned __index, double length, double * __t, double * __dt, bool __curvilinearLength);
60  void RefEdge_GetS(unsigned __iEdge, double __t,double *__s, bool __curvilinearLength);
61  double RefVertex_GetS(MG_SOMMET * __refVertex);
62 
63  void Parameter_SToRefEdgeT (double __s, unsigned * __iEdge, double *__t, double * __dt, bool __curvilinearLength);
64  void Parameter_SToRefEdgeT (double __s, MG_ARETE **, double *__t, double * __dt, bool __curvilinearLength);
65  void Parameter_RefEdgeTToS (double __t, MG_ARETE * __edge, double *__s, bool __curvilinearLength);
66 
67  void evaluer (double __s, double __X[3]);
68  void evaluer (double __s, double __X[3], bool __curvilinearLength);
69  void deriver (double __s, double __X[3]);
70  void deriver (double __s, double __X[3], bool __curvilinearLength);
71  void deriver_seconde (double __s, double __ddxyz[3], double *__dxyz = NULL, double * __xyz = NULL);
72  void deriver_seconde (double __s, double __ddxyz[3], double *__dxyz = NULL, double * __xyz = NULL, bool __curvilinearLength=false);
73  void inverser(double & __t, double __point[3], double precision);
74  void inverser(double & __t, double __point[3], double precision, bool __curvilinearLength);
75  bool est_sur_courbe(double *xyz,double precision=1e-6);
76 
77  int est_periodique(void);
78  double get_periode(void);
79  void enregistrer(std::ostream& o,double version);
81 
82 
85 
86  double get_sommet1_s() ;
87  double get_sommet2_s() ;
88 
89  double get_tmin() ;
90  double get_tmax() ;
91 
92  double get_longueur (double __s_min=-1, double __s_max=-1, double precision=1E-6);
93 
94  std::vector<MG_ARETE*> & GetRefEdges() ;
95  static void VerifyRefEdgeT(MG_ARETE * __edge, double & __t);
96 
97  double GetLength(MG_ARETE * __edge);
98  double GetLength(unsigned __index);
99  void VerifyS(double & __s);
100 
101  bool IsPoint() const;
102 
103  virtual void get_param_NURBS(int& indx_premier_ptctr,TPL_LISTE_ENTITE<double> &param) ;
104 private:
105  std::vector<MG_ARETE*> lst_ref_edges;
106  std::vector<MG_SOMMET*> lst_vertices;
107  std::vector<double> lst_length;
108 };
109 
110 
111 void SplitPolyCurve(PolyCurve * __polyCurve, double __xyz[3], MG_VOLUME * __refBody, MG_GEOMETRIE * __geom, PolyCurve * __result[2], MG_ARETE **__origRefEdge, MG_SOMMET ** __splitRefVertex, MG_ARETE * __splitRefEdges[2]);
112 void SplitRefEdge(MG_ARETE * __refEdge, MG_SOMMET * __refVertex1, MG_SOMMET * __refVertex2, double __xyz[3], MG_VOLUME * __refBody, MG_GEOMETRIE * __geom, MG_ARETE * edges[2], MG_SOMMET ** __splitVertex);
113 
114 }
115 
116 #endif
117 
bool est_sur_courbe(double *xyz, double precision=1e-6)
unsigned int RefEdge_GetIndex(MG_ARETE *__refEdge)
void Parameter_SToRefEdgeT(double __s, unsigned *__iEdge, double *__t, double *__dt, bool __curvilinearLength)
void InsertCurve(MG_ARETE *)
MG_SOMMET * get_sommet2()
bool ContainsRefVertex(MG_SOMMET *__v)
void VerifyS(double &__s)
int get_type_geometrique(TPL_LISTE_ENTITE< double > &param)
double get_periode(void)
void inverser(double &__t, double __point[3], double precision)
void deriver(double __s, double __X[3])
MG_SOMMET * get_sommet1()
MG_SOMMET * GetRefVertex(unsigned int)
void deriver_seconde(double __s, double __ddxyz[3], double *__dxyz=NULL, double *__xyz=NULL)
std::vector< double > lst_length
void RefEdge_GetT(unsigned __index, double length, double *__t, double *__dt, bool __curvilinearLength)
void enregistrer(std::ostream &o, double version)
std::vector< MG_ARETE * > & GetRefEdges()
unsigned GetRefVertexCount()
double GetLength(MG_ARETE *__edge)
void Parameter_RefEdgeTToS(double __t, MG_ARETE *__edge, double *__s, bool __curvilinearLength)
void SetPeriodicPoleRefVertex(MG_SOMMET *__v)
virtual void get_param_NURBS(int &indx_premier_ptctr, TPL_LISTE_ENTITE< double > &param)
bool Contains(MG_ELEMENT_TOPOLOGIQUE *__topo)
void evaluer(double __s, double __X[3])
std::vector< MG_SOMMET * > lst_vertices
double get_longueur(double __s_min=-1, double __s_max=-1, double precision=1E-6)
bool ContainsRefEdge(MG_ARETE *__refEdge)
unsigned int RefVertex_GetIndex(MG_SOMMET *__refVertex)
void RefEdge_GetS(unsigned __iEdge, double __t, double *__s, bool __curvilinearLength)
static void VerifyRefEdgeT(MG_ARETE *__edge, double &__t)
std::vector< MG_ARETE * > lst_ref_edges
double RefVertex_GetS(MG_SOMMET *__refVertex)
void Merge(PolyCurve &)
MG_ARETE * GetRefEdge(unsigned int)
void SplitRefEdge(MG_ARETE *__refEdge, MG_SOMMET *__refVertex1, MG_SOMMET *__refVertex2, double __xyz[3], MG_VOLUME *__refBody, MG_GEOMETRIE *__geom, MG_ARETE *edges[2], MG_SOMMET **__splitVertex)
void SplitPolyCurve(PolyCurve *__polyCurve, double __xyz[3], MG_VOLUME *__refBody, MG_GEOMETRIE *__geom, PolyCurve *__result[2], MG_ARETE **__origRefEdge, MG_SOMMET **__splitRefVertex, MG_ARETE *__splitRefEdges[2])