47 std::map <long,TPL_QUADTREE<MG_SEGMENT_FRONTIERE*,MG_SEGMENT_FRONTIERE*> *,std::less<long> >::iterator it=
tabquad.begin();
54 std::map <long,TPL_LISTE_ENTITE<MG_SEGMENT_FRONTIERE*>*,std::less<long> >::iterator it=
tabseg.begin();
92 if (*lstsegfront==NULL)
97 if ((*quad)->get_nb_cellule()==0)
115 double uvajoute[3]={uv[0],uv[1],0.};
118 for (
int i=0;i<nbboucle;i++)
121 for (
int j=0;j<nbcoarete;j++)
130 double d1retenu,d2retenu;
131 double distance=1e300;
137 int nbavant=lsttrouve.
get_nb();
140 quad->
rechercher(uv[0],uv[1],rayon,lsttrouve);
143 while (lsttrouve.
get_nb()==0);
144 int nb=lsttrouve.
get_nb();
145 for (
int i=nbavant;i<nb;i++)
151 for (
int j=0;j<nbco;j++)
155 double uv1[3],uv2[3];
169 coareteretenu=coarete;
178 if (rayon>distance) sortie=1;
182 if (rayon>distance) sortie=1;
185 if (distance<1e308) sortie=1;
189 if (d1retenu<d2retenu)
198 double uv1[3]={segretenu->
get_uv1()[0],segretenu->
get_uv1()[1],0.};
199 double uv2[3]={segretenu->
get_uv2()[0],segretenu->
get_uv2()[1],0.};
210 double normal[3]={0.,0.,1.};
218 double sens=(nor&base)*dir;
219 if (sens<0.) distance=-distance;
228 double uvcom[2],uv1[2],uv2[2];
286 double angle1=
acos(v1*ubase);
287 double angle2=
acos(v2*ubase);
288 if ((v1*vbase)<0.) angle1=-angle1;
289 if ((v2*vbase)<0.) angle2=-angle2;
291 if (fabs(angle1)<fabs(angle2)) rep=1;
313 if ((t<-1e-10) || (t-1.>1e-10))
318 distance=0.5*(*d1+(*d2));
342 double delta_u,delta_v;
349 double xyzduu[3],xyzdvv[3],xyzduv[3],xyzdu[3],xyzdv[3];
360 a[1]=Su*Sv+Distance*Suv;
361 a[2]=Su*Sv+Distance*Suv;
367 double deltau,deltav;
368 double denominateur_delta=(
a[0]*
a[3]-
a[2]*
a[1]);
371 else delta_u=(b[0]*
a[3]-b[1]*
a[1])/denominateur_delta;
374 else delta_v=(
a[0]*b[1]-
a[2]*b[0])/denominateur_delta;
377 uvii[0]=uvi[0]+delta_u;
378 uvii[1]=uvi[1]+delta_v;
391 delta_u=uvii[0]-uvi[0];
392 delta_v=uvii[1]-uvi[1];
393 if (compteur>500)
return 1e300;
397 surface->
evaluer(uvii,xyzproj);
399 double distance=(S-Pt).get_longueur();
412 for (
int j=0;j<nbboucle;j++)
458 double uvtni[2]={uv1[0],uv1[1]};
459 umin=std::min(umin,uv1[0]);
460 umin=std::min(umin,uv2[0]);
461 umax=std::max(umax,uv1[0]);
462 umax=std::max(umax,uv2[0]);
463 vmin=std::min(vmin,uv1[1]);
464 vmin=std::min(vmin,uv2[1]);
465 vmax=std::max(vmax,uv1[1]);
466 vmax=std::max(vmax,uv2[1]);
467 int nbavant=lstsegfront->
get_nb();
468 for (
int i=0;i<pas;i++)
470 double ti=t1+i*1.0/pas*(t2-t1);
471 double tii=t1+(i+1)*1.0/pas*(t2-t1);
472 double t=0.7886751345*ti+0.2113248654*tii;
474 double M=are->
get_M(t);
478 if (fabs(M)>0.00000001) rayon=1./M;
480 ds=ds+0.5*(tii-ti)*
sqrt(dxyz[0]*dxyz[0]+dxyz[1]*dxyz[1]+dxyz[2]*dxyz[2])/2./rayon/
sqrt(2.)/
sqrt(
epsilon);
482 t=0.7886751345*tii+0.2113248654*ti;
485 if (fabs(M)>0.00000001) rayon=1./M;
487 ds=ds+0.5*(tii-ti)*
sqrt(dxyz[0]*dxyz[0]+dxyz[1]*dxyz[1]+dxyz[2]*dxyz[2])/2./rayon/
sqrt(2.)/
sqrt(
epsilon);
488 if (ds>lstsegfront->
get_nb()+1-nbavant)
508 if (premier==NULL) premier=segfr;
517 umin=std::min(umin,uvtnii[0]);
518 umax=std::max(umax,uvtnii[0]);
519 vmin=std::min(vmin,uvtnii[1]);
520 vmax=std::max(vmax,uvtnii[1]);
527 if (premier==NULL) premier=segfr;
539 while (coare!=coarepremier);
552 double diff=umax-umin;
553 umin=umin-0.125*diff;
554 umax=umax+0.125*diff;
563 double diff=vmax-vmin;
564 vmin=vmin-0.125*diff;
565 vmax=vmax+0.125*diff;
570 int nbsegfr=lstsegfront->
get_nb();
571 for (
int j=0;j<nbsegfr;j++)
597 for (
int i=0;i<pas;i++)
600 double xyz[3],dxyz[3],xyz1du[3],xyz1dv[3],xyz2du[3],xyz2dv[3],xyz1duu[3],xyz1duv[3],xyz1dvv[3],xyz2duu[3],xyz2duv[3],xyz2dvv[3];
603 double uv1[2],uv2[2];
606 double normal1[3],normal2[3];
619 double angle=sens1*sens2;
630 double E1=
sqrt(xyz1duu[0]*xyz1duu[0]+xyz1duu[1]*xyz1duu[1]+xyz1duu[2]*xyz1duu[2]);
631 double F1=
sqrt(xyz2duu[0]*xyz2duu[0]+xyz2duu[1]*xyz2duu[1]+xyz2duu[2]*xyz2duu[2]);
633 double E2=
sqrt(xyz1duv[0]*xyz1duv[0]+xyz1duv[1]*xyz1duv[1]+xyz1duv[2]*xyz1duv[2]);
634 double F2=
sqrt(xyz2duv[0]*xyz2duv[0]+xyz2duv[1]*xyz2duv[1]+xyz2duv[2]*xyz2duv[2]);
636 double E3=
sqrt(xyz1dvv[0]*xyz1dvv[0]+xyz1dvv[1]*xyz1dvv[1]+xyz1dvv[2]*xyz1dvv[2]);
637 double F3=
sqrt(xyz2dvv[0]*xyz2dvv[0]+xyz2dvv[1]*xyz2dvv[1]+xyz2dvv[2]*xyz2dvv[2]);
673 R1=(u*((E12*u)+(E22*v)))+(v*((E22*u)+(E32*v)));
707 R2=(u*((F12*u)+(F22*v)))+(v*((F22*u)+(F32*v)));
709 if (angle>-1+eps)
return 0;