38 #pragma package(smart_init)
45 OT_VECTEUR_3D coedgeDerT, faceEdgeInteriorDir, vecTpCoedgeDerT, vecTpFaceEdgeInteriorDir;
51 OT_MATRICE_3D tangentPlaneFrame = TangentPlaneFrame( __face, uv );
53 OT_VECTEUR_3D vecTpDirection = tangentPlaneTranform*direction;
55 vecTpDirection.
norme();
60 for (
int it_coe=0;it_coe<nb_coedge;it_coe++)
65 if (adjacent_face == __face)
67 coedge1 = coedge; coedge1T = __t;
72 double angle_coedge1_testdirection, cs_angle_coedge1_testdirection, sn_angle_coedge1_testdirection;
73 OT_VECTEUR_3D coedge1DerT, coedge2DerT, vecTpCoedge1DerT, vecTpCoedge2DerT;
76 vecTpCoedge1DerT = tangentPlaneTranform*coedge1DerT;
77 vecTpCoedge1DerT.
norme();
79 cs_angle_coedge1_testdirection = vecTpCoedge1DerT*vecTpDirection;
80 sn_angle_coedge1_testdirection = -vecTpCoedge1DerT[1]*vecTpDirection[0]+vecTpCoedge1DerT[0]*vecTpDirection[1];
81 if (cs_angle_coedge1_testdirection>1) cs_angle_coedge1_testdirection=1;
82 if (cs_angle_coedge1_testdirection < -1) cs_angle_coedge1_testdirection=-1;
83 angle_coedge1_testdirection =
acos(cs_angle_coedge1_testdirection);
84 if (sn_angle_coedge1_testdirection < 0 ) angle_coedge1_testdirection *= -1;
86 if ( angle_coedge1_testdirection < 0 )
102 result = MCFace_MCEdgeDir_IsInterior(__mcFace, mcEdge, s, __direction);
108 result = MCFace_MCVertexDir_IsInterior(__mcFace, mcVertex, __direction);
125 double tEdge, dtEdge;
129 for (
int it_coe=0;it_coe<nb_coedge;it_coe++)
132 if ( polysurface->
Contains(adjacentFace) )
134 if (IsInteriorDir(adjacentFace, edge, tEdge, __direction))
147 std::set<MG_FACE*> adjacentFaces; MG_SOMMET_GetAdjacent_MG_FACE(vertex, adjacentFaces);
148 for (std::set<MG_FACE*>::iterator itF = adjacentFaces.begin();
149 itF != adjacentFaces.end(); itF++)
152 if ( polysurface->
Contains(adjacentFace) )
154 if (IsInteriorDir(adjacentFace, vertex, __direction))
165 OT_VECTEUR_3D coedgeDerT, faceEdgeInteriorDir, vecTpCoedgeDerT, vecTpFaceEdgeInteriorDir;
168 double xyz[3], uv[2];
171 OT_MATRICE_3D tangentPlaneFrame = TangentPlaneFrame( __face, uv );
173 OT_VECTEUR_3D vecTpDirection = tangentPlaneTranform*direction;
175 vecTpDirection.
norme();
178 double coedge1T, coedge2T;
184 for (
unsigned i=0; i<nb_adjacent_face; i++)
189 if (adjacent_face == __face)
196 if (__vertex==v1) {coedge2 = coedge; coedge2->
get_arete()->
inverser(coedge2T,xyz); }
197 if (__vertex==v2) {coedge1 = coedge; coedge1->
get_arete()->
inverser(coedge1T,xyz); }
203 double angle_coedge1_coedge2, cs_angle_coedge1_coedge2, sn_angle_coedge1_coedge2;
204 double angle_coedge1_testdirection, cs_angle_coedge1_testdirection, sn_angle_coedge1_testdirection;
205 OT_VECTEUR_3D coedge1DerT, coedge2DerT, vecTpCoedge1DerT, vecTpCoedge2DerT;
208 vecTpCoedge1DerT = tangentPlaneTranform*coedge1DerT;
209 vecTpCoedge1DerT.
norme();
210 coedge2->get_arete()->deriver(coedge2T, coedge2DerT);
211 coedge2DerT *= coedge2->get_orientation();
212 vecTpCoedge2DerT = tangentPlaneTranform*coedge2DerT;
213 vecTpCoedge2DerT.
norme();
215 cs_angle_coedge1_coedge2 = vecTpCoedge1DerT*vecTpCoedge2DerT;
216 if (cs_angle_coedge1_coedge2>1) cs_angle_coedge1_coedge2=1;
217 if (cs_angle_coedge1_coedge2<-1) cs_angle_coedge1_coedge2=-1;
218 sn_angle_coedge1_coedge2 = -vecTpCoedge1DerT[1]*vecTpCoedge2DerT[0]+vecTpCoedge1DerT[0]*vecTpCoedge2DerT[1];
219 angle_coedge1_coedge2 =
acos(cs_angle_coedge1_coedge2);
220 if (sn_angle_coedge1_coedge2<0) angle_coedge1_coedge2 *= -1;
221 cs_angle_coedge1_testdirection = vecTpCoedge1DerT*vecTpDirection;
222 sn_angle_coedge1_testdirection = -vecTpCoedge1DerT[1]*vecTpDirection[0]+vecTpCoedge1DerT[0]*vecTpDirection[1];
223 if (cs_angle_coedge1_testdirection>1) cs_angle_coedge1_testdirection=1;
224 if (cs_angle_coedge1_testdirection<-1) cs_angle_coedge1_testdirection=-1;
225 angle_coedge1_testdirection =
acos(cs_angle_coedge1_testdirection);
226 if (sn_angle_coedge1_testdirection< 0) angle_coedge1_testdirection *= -1;
228 if ( angle_coedge1_testdirection > M_PI || angle_coedge1_testdirection < angle_coedge1_coedge2)
246 for (
int i=0; i<2; i++)
248 if (uvperiod[i] != 0.0)
250 if (__uv[i] > uvmax[i])
251 __uv[i] -= uvmax[i]-uvmin[i];
253 if (__uv[i] < uvmin[i])
254 __uv[i] += uvmax[i]-uvmin[i];
258 if (__uv[i] > uvmax[i])
259 { __uv[i] = uvmax[i]; bEval =
true; }
261 if (__uv[i] < uvmin[i])
262 { __uv[i] = uvmin[i]; bEval =
true; }
348 __sigma->
deriver(uv,DerU,DerV);
349 Normal = DerU & DerV;
363 Normal = DerU & DerV;
382 __face->
evaluer(__uv, planeRootPoint);
385 tangentPlaneTransform = matTpFrame.
inverse();
387 vecTpDir=tangentPlaneTransform*vecWDir;
389 for (
int i=0; i<2; i++)
390 __directionUV[i] = vecTpDir[i];
400 double afTpOrigin[3];
401 __sigma->
evaluer(__uv, afTpOrigin);
409 return intrLineResult;
419 dir1[0]=normal.
get_y();
420 dir1[1]=(-normal.
get_x());
426 dir1[1]=(-normal.
get_z());
427 dir1[2]=normal.
get_y();
431 dir1[0]=normal.
get_z();
443 double directionNorm =
sqrt(__direction[0]*__direction[0]+__direction[1]*__direction[1]);
444 double axisXNorm =
sqrt(__axisX[0]*__axisX[0]+__axisX[1]*__axisX[1]);
446 double cs = (+__direction[0]*__axisX[0] + __direction[1]*__axisX[1]) / (axisXNorm*directionNorm);
447 double sn = (-__direction[0]*__axisX[1] + __direction[1]*__axisX[0]);
450 if (sn < 0)
return -
acos(cs);
451 else return acos(cs);
473 for (
int it_coe=0;it_coe<nb_coedge;it_coe++)
483 if (v1 == __vertex)
return true;
485 if (v2 == __vertex)
return true;
492 for (
int it_cov=0;it_cov<nb_covertex;it_cov++)
497 for (
int it_coe=0;it_coe<nb_coedge;it_coe++)
500 if (__polysurface->
Contains(refFace))
510 for (
int it_cov=0;it_cov<nb_covertex;it_cov++)
515 for (
int it_coe=0;it_coe<nb_coedge;it_coe++)
518 __adjacentfaces.insert(refFace);
533 __face->
evaluer(__uv, xyzEval);
540 (d_uvn[0]*d_uvn[0])+(d_uvn[1]*d_uvn[1]) > 1E-8*d_uvn[2]*d_uvn[2]
551 __face->
evaluer(__uv, xyzEval);
574 vec_UV1_UV2 = tangentPlaneTransform * vec_P1_P2;
576 for (
int i=0;i<2;i++)
577 __uv12[i] = vec_UV1_UV2[i];
591 int nbPlaneCorrections=0;
595 for(nbPlaneCorrections = 0;
596 nbPlaneCorrections < nbPointToPlaneResidueCorrection && deltamax3D<error;
597 nbPlaneCorrections ++)
600 tangentPlaneTransform = tangentPlaneFrame3D.
inverse();
602 vec_UV1_UV2 = tangentPlaneTransform*vec_P1_P2;
603 uv2 = uv1 + vec_UV1_UV2;
610 for (
int i=0; i<2; i++)
613 for (
int i=0; i<3; i++)
622 double decal_uv2[2],decal_uv1[2],duv[2],uv[2],decal[2]={0,0};
633 duv[0]=1.0/__nbNubdivisions*(decal_uv2[0]-decal_uv1[0]);
634 duv[1]=1.0/__nbNubdivisions*(decal_uv2[1]-decal_uv1[1]);
637 for (
unsigned i=0; i<=__nbNubdivisions; i++)
647 double dist2=duv[0]*duv[0]*E+duv[1]*duv[1]*G+duv[1]*duv[0]*F;
663 for (
int i=0;i<2;i++)
667 for (
int j=0;j<2;j++)
668 for (
int k=0;k<3;k++)
669 s[j][k]=__tri[i][j+1]->get_coord()[k]-__tri[i][j]->
get_coord()[k];
673 if (normal[i].get_longueur2() == 0)
679 double cs = normal[0]*normal[1];
682 double angle =
acos(cs);
691 for (
int k=0;k<nbccf;k++)
695 if ((typeccf[0]==
'C') && (typeccf[1]==
'c'))
720 unsigned char *p=(
unsigned char*)&val;
722 rgba += ((*p)<<8);p++;
723 rgba += ((*p)<<16);p++;
736 unsigned char *p=(
unsigned char*)&val;
739 rgba += ((*p)<<8);p++;
740 rgba += ((*p)<<16);p++;
756 unsigned char *p=(
unsigned char*)&val;
757 for (
int i=0; i<4; i++)
767 unsigned char *p=(
unsigned char*)&val;
768 for (
int i=0; i<4; i++)
788 unsigned char rgba[4] = {r,g,b,
a};