34 PIR_SURFACE::PIR_SURFACE(
unsigned long num,PG_SURFACE *srf):
MG_SURFACE(num),surface(srf)
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();
43 PIR_SURFACE::PIR_SURFACE(PG_SURFACE *srf):
MG_SURFACE(),surface(srf)
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();
52 PIR_SURFACE::PIR_SURFACE(PIR_SURFACE& mdd):
MG_SURFACE(mdd),surface(mdd.surface)
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();
63 PIR_SURFACE::~PIR_SURFACE()
68 void PIR_SURFACE::evaluer(
double *uv,
double *xyz)
70 surface->evaluer(uv,xyz);
73 void PIR_SURFACE::deriver(
double *uv,
double *xyzdu,
double *xyzdv)
75 double *ds[2] = {xyzdu,xyzdv};
76 surface->deriver(uv,ds);
79 void PIR_SURFACE::deriver_seconde(
double *uv,
double* xyzduu,
double* xyzduv,
double* xyzdvv,
double *xyz,
double *xyzdu,
double *xyzdv)
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 );
95 void PIR_SURFACE::inverser(
double* uv,
double *xyz,
double precision)
97 pos->localiser(xyz,uv,precision);
100 int PIR_SURFACE::est_periodique_u(
void)
102 return surface->estFermee_en_u();
105 int PIR_SURFACE::est_periodique_v(
void)
107 return surface->estFermee_en_v();
110 double PIR_SURFACE::get_periode_u(
void)
112 if (surface->estFermee_en_u()==0)
return 0.;
113 return surface->get_periode_u();
116 double PIR_SURFACE::get_periode_v(
void)
118 if (surface->estFermee_en_v()==0)
return 0.;
119 return surface->get_periode_v();
123 void PIR_SURFACE::enregistrer(ostream& o,
double version)
125 o <<
"%" << get_id() <<
"=SURFACE_PIRATE("<< surface->get_id()<<
");" << endl;