55 std::vector<MG_BOUCLE*>::iterator i;
91 std::vector<MG_COFACE*>::iterator i;
117 for (
int i=0;i<nb;i++)
121 for (
int j=0;j<nb2;j++)
137 return TYPE_ELEMENT_TOPOLOGIQUE::FACE;
155 double param_min,param_max;
176 double param_min,param_max;
194 double param[2]={uv[0],uv[1]};
201 double param[2]={uv[0],uv[1]};
214 double param[2]={uv[0],uv[1]};
222 xyzduv[0]=-xyzduv[0];
223 xyzduv[1]=-xyzduv[1];
224 xyzduv[2]=-xyzduv[2];
243 normale[0]=n.
get_x();
244 normale[1]=n.
get_y();
245 normale[2]=n.
get_z();
258 normale[0]=n.
get_x();
259 normale[1]=n.
get_y();
260 normale[2]=n.
get_z();
269 E=xyzdu[0]*xyzdu[0]+xyzdu[1]*xyzdu[1]+xyzdu[2]*xyzdu[2];
270 F=xyzdu[0]*xyzdv[0]+xyzdu[1]*xyzdv[1]+xyzdu[2]*xyzdv[2];
271 G=xyzdv[0]*xyzdv[0]+xyzdv[1]*xyzdv[1]+xyzdv[2]*xyzdv[2];
277 double xyz[3],xyzdu[3],xyzdv[3],xyzduu[3],xyzduv[3],xyzdvv[3];
280 E=xyzdu[0]*xyzdu[0]+xyzdu[1]*xyzdu[1]+xyzdu[2]*xyzdu[2];
281 G=xyzdv[0]*xyzdv[0]+xyzdv[1]*xyzdv[1]+xyzdv[2]*xyzdv[2];
282 double Edu=2.*(xyzdu[0]*xyzduu[0]+xyzdu[1]*xyzduu[1]+xyzdu[2]*xyzduu[2]);
283 double Gdv=2.*(xyzdv[0]*xyzdvv[0]+xyzdv[1]*xyzdvv[1]+xyzdv[2]*xyzdvv[2]);
284 double Edv=2.*(xyzdu[0]*xyzduv[0]+xyzdu[1]*xyzduv[1]+xyzdu[2]*xyzduv[2]);
285 double Gdu=2.*(xyzdv[0]*xyzduv[0]+xyzdv[1]*xyzduv[1]+xyzdv[2]*xyzduv[2]);
286 double m1[3],m2[3],m3[3];
287 m1[0]=xyzduu[0]/E-0.5*Edu*xyzdu[0]/E/E;
288 m1[1]=xyzduu[1]/E-0.5*Edu*xyzdu[1]/E/E;
289 m1[2]=xyzduu[2]/E-0.5*Edu*xyzdu[2]/E/E;
290 m2[0]=xyzduv[0]/
sqrt(E*G)-0.5*xyzdu[0]*Edv/E/
sqrt(E*G)-0.5*xyzdv[0]*Gdu/G/
sqrt(E*G);
291 m2[1]=xyzduv[1]/
sqrt(E*G)-0.5*xyzdu[1]*Edv/E/
sqrt(E*G)-0.5*xyzdv[1]*Gdu/G/
sqrt(E*G);
292 m2[2]=xyzduv[2]/
sqrt(E*G)-0.5*xyzdu[2]*Edv/E/
sqrt(E*G)-0.5*xyzdv[2]*Gdu/G/
sqrt(E*G);
293 m3[0]=xyzdvv[0]/G-0.5*Gdv*xyzdv[0]/G/G;
294 m3[1]=xyzdvv[1]/G-0.5*Gdv*xyzdv[1]/G/G;
295 m3[2]=xyzdvv[2]/G-0.5*Gdv*xyzdv[2]/G/G;
296 M1=
sqrt(m1[0]*m1[0]+m1[1]*m1[1]+m1[2]*m1[2]);
297 M2=
sqrt(m2[0]*m2[0]+m2[1]*m2[1]+m2[2]*m2[2]);
298 M3=
sqrt(m3[0]*m3[0]+m3[1]*m3[1]+m3[2]*m3[2]);
304 double xyz[3],xyzdu[3],xyzdv[3],xyzduu[3],xyzduv[3],xyzdvv[3],normal[3];
307 L=xyzduu[0]*normal[0]+xyzduu[1]*normal[1]+xyzduu[2]*normal[2];
308 M=xyzduv[0]*normal[0]+xyzduv[1]*normal[1]+xyzduv[2]*normal[2];
309 N=xyzdvv[0]*normal[0]+xyzdvv[1]*normal[1]+xyzdvv[2]*normal[2];
319 double b=-E*N-G*L+2*F*M;
321 double delta=b*b-4*
a*c;
322 if (delta<0.00000001) delta=0.;
323 double x1=(-b+
sqrt(delta))/2./
a;
324 double x2=(-b-
sqrt(delta))/2./
a;
325 if (fabs(x1)>fabs(x2)) {
338 double xmin=1e308,ymin=1e308,zmin=1e308;
339 double xmax=-1e308,ymax=-1e308,zmax=-1e308;
340 double umin=1e308,vmin=1e308;
341 double umax=-1e308,vmax=-1e308;
353 for (
int i=0;i<nb_boucle;i++)
357 for (
int j=0;j<nb_arete;j++)
362 double tdemi=0.5*(tmax+tmin);
363 double xyz1[3],xyz2[3];
369 if (xyz[0]<xmin) xmin=xyz[0];
370 if (xyz[0]>xmax) xmax=xyz[0];
371 if (xyz[1]<ymin) ymin=xyz[1];
372 if (xyz[1]>ymax) ymax=xyz[1];
373 if (xyz[2]<zmin) zmin=xyz[2];
374 if (xyz[2]>zmax) zmax=xyz[2];
377 if (uv[0]>umax) umax=uv[0];
378 if (uv[0]<umin) umin=uv[0];
379 if (uv[1]>vmax) vmax=uv[1];
380 if (uv[1]<vmin) vmin=uv[1];
383 std::vector<double> lstpoint;
385 if (lstpoint.size()<1)
395 if (xyz[0]<xmin) xmin=xyz[0];
396 if (xyz[1]<ymin) ymin=xyz[1];
397 if (xyz[2]<zmin) zmin=xyz[2];
398 if (xyz[0]>xmax) xmax=xyz[0];
399 if (xyz[1]>ymax) ymax=xyz[1];
400 if (xyz[2]>zmax) zmax=xyz[2];
404 for (
int k=0;k<lstpoint.size()/5;k++)
406 double xyz[3]={lstpoint[5*k],lstpoint[5*k+1],lstpoint[5*k+2]};
407 if (xyz[0]<xmin) xmin=xyz[0];
408 if (xyz[1]<ymin) ymin=xyz[1];
409 if (xyz[2]<zmin) zmin=xyz[2];
410 if (xyz[0]>xmax) xmax=xyz[0];
411 if (xyz[1]>ymax) ymax=xyz[1];
412 if (xyz[2]>zmax) zmax=xyz[2];
415 BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
430 nb_pole = liste_pole_uv->size()/2;
505 for (
unsigned int i=0;i<
lst_boucle.size();i++)
519 for (
int i=0;i<nb;i++)
524 if (i!=nb-1) o <<
"," ;
532 o <<
");" << std::endl;
virtual double get_tmax(void)
virtual double get_tmin(void)
virtual void evaluer(double t, double *xyz)
virtual void get_topologie_sousjacente(TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lst)
virtual MG_COARETE * get_mg_coarete(int num)
virtual int get_nb_mg_coarete(void)
virtual MG_ARETE * get_arete(void)
static int pas_echantillon
virtual int get_nb_ccf(void)
virtual void enregistrer_ccf(std::ostream &o, double version)
virtual std::string get_idoriginal(void)
virtual bool get_valeur_ccf(char *nom, double &val)
static double angle_dev_echantillon
virtual void get_type_ccf(int num, char *nom)
static double epsilon_echantillon
virtual int valide_parametre_u(double &u)
virtual void get_courbure(double *uv, double &cmax, double &cmin)
virtual int get_nb_pole(void)
std::vector< MG_BOUCLE * > lst_boucle
virtual int valide_parametre_v(double &v)
virtual void calcul_normale(double *uv, double *normale)
virtual void get_echantillonnage(int numechantillon, std::vector< double > &tab)
virtual void change_nb_pole(int val)
virtual void inverser(double *uv, double *xyz, double precision=1e-6)
virtual int get_nb_mg_coface(void)
virtual void evaluer(double *uv, double *xyz)
virtual void ajouter_mg_boucle(class MG_BOUCLE *mgbou)
virtual int get_orientation(void)
virtual void get_xyz_min_max(double *xyzmin, double *xyzmax)
MG_FACE(std::string idori, unsigned long num, MG_SURFACE *srf, int sens)
virtual VCT & get_vectorisation(void)
virtual void get_EFG(double *uv, double &E, double &F, double &G)
virtual void supprimer_mg_coface(class MG_COFACE *coface)
virtual void get_LMN(double *uv, double &L, double &M, double &N)
virtual int get_dimension(void)
virtual void get_topologie_sousjacente(TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lst)
virtual MG_SURFACE * get_surface(void)
virtual void ajouter_mg_coface(class MG_COFACE *coface)
virtual void enregistrer(std::ostream &o, double version)
virtual void deriver(double *uv, double *xyzdu, double *xyzdv)
virtual MG_BOUCLE * get_mg_boucle(int num)
virtual void calcul_normale_unitaire(double *uv, double *normale)
virtual void get_M(double *uv, double &M1, double &M2, double &M3)
virtual void deriver_seconde(double *uv, double *xyzduu, double *xyzduv, double *xyzdvv, double *xyz=NULL, double *xyzdu=NULL, double *xyzdv=NULL)
virtual void supprimer_mg_boucle(class MG_BOUCLE *mgbou)
std::vector< MG_COFACE * > lst_coface
virtual BOITE_3D get_boite_3D(void)
virtual int get_type(void)
virtual int get_nb_mg_boucle(void)
virtual bool est_une_topo_element(void)
virtual MG_COFACE * get_mg_coface(int num)
virtual void get_liste_pole_uv(std::vector< double > *liste_pole_uv, double eps)
virtual void get_echantillonnage(int numechantillon, std::vector< double > &tab, double eps, double angle_dev)=0
virtual void get_liste_pole(std::vector< double > *liste_pole_uv, double eps)=0
virtual double get_vmax()
virtual void inverser(double *uv, double *xyz, double precision=1e-6)=0
virtual void evaluer(double *uv, double *xyz)=0
virtual int est_periodique_u(void)=0
virtual double get_periode_u(void)=0
virtual void deriver(double *uv, double *xyzdu, double *xyzdv)=0
virtual double get_vmin()
virtual int est_periodique_v(void)=0
virtual void deriver_seconde(double *uv, double *xyzduu, double *xyzduv, double *xyzdvv, double *xyz=NULL, double *xyzdu=NULL, double *xyzdv=NULL)=0
virtual double get_umax()
virtual double get_periode_v(void)=0
virtual double get_umin()
virtual double get_z(void) const
virtual double get_y(void) const
virtual double get_x(void) const
virtual void ajouter(X x)
double2 sqrt(double2 &val)