MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
pir_surface.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 //####// pir_surface.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 
26 #ifdef BREP_PIRATE
27 
28 #include "pir_surface.h"
29 
30 
31 
32 
33 
34 PIR_SURFACE::PIR_SURFACE(unsigned long num,PG_SURFACE *srf):MG_SURFACE(num),surface(srf)
35 {
36  pos=new PG_POSITION2D(*surface);
37  u_min=pos->get_umin();
38  u_max=pos->get_umax();
39  v_min=pos->get_vmin();
40  v_max=pos->get_vmax();
41 }
42 
43 PIR_SURFACE::PIR_SURFACE(PG_SURFACE *srf):MG_SURFACE(),surface(srf)
44 {
45  pos=new PG_POSITION2D(*surface);
46  u_min=pos->get_umin();
47  u_max=pos->get_umax();
48  v_min=pos->get_vmin();
49  v_max=pos->get_vmax();
50 }
51 
52 PIR_SURFACE::PIR_SURFACE(PIR_SURFACE& mdd):MG_SURFACE(mdd),surface(mdd.surface)
53 {
54  pos=new PG_POSITION2D(*surface);
55  u_min=pos->get_umin();
56  u_max=pos->get_umax();
57  v_min=pos->get_vmin();
58  v_max=pos->get_vmax();
59 }
60 
61 
62 
63 PIR_SURFACE::~PIR_SURFACE()
64 {
65  delete pos;
66 }
67 
68 void PIR_SURFACE::evaluer(double *uv,double *xyz)
69 {
70  surface->evaluer(uv,xyz);
71 }
72 
73 void PIR_SURFACE::deriver(double *uv,double *xyzdu, double *xyzdv)
74 {
75  double *ds[2] = {xyzdu,xyzdv};
76  surface->deriver(uv,ds);
77 }
78 
79 void PIR_SURFACE::deriver_seconde(double *uv,double* xyzduu,double* xyzduv,double* xyzdvv,double *xyz, double *xyzdu, double *xyzdv)
80 {
81  double pt[3]= { 0.0 , 0.0 , 0.0 };
82  double du[3] = { 0.0, 0.0, 0.0 };
83  double dv[3] = { 0.0, 0.0, 0.0 };
84  if (xyz==NULL) xyz=pt;
85  if (xyzdu==NULL) xyzdu=du;
86  if (xyzdv==NULL) xyzdv=dv;
87  double* d0n[]={ xyz, xyzdv, xyzdvv };
88  double* d1n[]={ xyzdu, xyzduv };
89  double* d2n[]={ xyzduu };
90  double** ds[] = { d0n, d1n, d2n };
91  pos->deriver_seconde( uv, ds );
92 
93 }
94 
95 void PIR_SURFACE::inverser(double* uv,double *xyz,double precision)
96 {
97  pos->localiser(xyz,uv,precision);
98 }
99 
100 int PIR_SURFACE::est_periodique_u(void)
101 {
102  return surface->estFermee_en_u();
103 }
104 
105 int PIR_SURFACE::est_periodique_v(void)
106 {
107  return surface->estFermee_en_v();
108 }
109 
110 double PIR_SURFACE::get_periode_u(void)
111 {
112  if (surface->estFermee_en_u()==0) return 0.;
113  return surface->get_periode_u();
114 }
115 
116 double PIR_SURFACE::get_periode_v(void)
117 {
118  if (surface->estFermee_en_v()==0) return 0.;
119  return surface->get_periode_v();
120 }
121 
122 
123 void PIR_SURFACE::enregistrer(ostream& o,double version)
124 {
125  o << "%" << get_id() << "=SURFACE_PIRATE("<< surface->get_id()<< ");" << endl;
126 }
127 #endif
128 
129