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;