40 #pragma package(smart_init)
45 :
MG_TRIANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,
MAGIC::ORIGINE::MAILLEUR_AUTO), _saveFormat(0)
51 :
MG_TRIANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,
MAGIC::ORIGINE::MAILLEUR_AUTO), _saveFormat(0)
74 int indexSegBestQuality=0;
75 for (
int i=0; i<3; i++)
78 if (quality[i] > quality[indexSegBestQuality])
79 indexSegBestQuality=i;
81 int indexNodeA = (indexSegBestQuality+2)%3;
181 int nbB2RefFaceInMCFace=0;
188 nbB2RefFaceInMCFace++;
190 int nbC2RefFaceInMCFace=0;
197 nbC2RefFaceInMCFace++;
199 if (nbB2RefFaceInMCFace == 0 || nbC2RefFaceInMCFace == 0)
222 evaluer_geo(&B2C2,&B3C3,du,__uv,__result,tangent_u,tangent_v);
230 double du = (1-__uv[0]-__uv[1] > __du) ? __du : -__du;
231 if (fabs(1-__uv[0]) < __du)
238 (*B2C2)->evaluer_geo(__uv[1]/(1-__uv[0]), __P, tangent_v);
244 (*B3C3)->evaluer_geo(__uv[1]/(1-(__uv[0]+du)), rdu);
245 for (
int i=0;i<3;i++)
251 for (
int i=0;i<3;i++) tangent_v[i] *= 1/(1-__uv[0]);
261 double tBA=__uv[0], tCA=__uv[0];
262 double xyzB2[3], xyzC2[3];
263 for (
int i=0; i<3; i++)
269 double t=__uv[1]/(1-__uv[0]);
271 for (
int i=0; i<3; i++)
272 __result[i] = xyzB2[i]+(xyzC2[i]-xyzB2[i])*t;
373 void MCTriangle::Tessellate(
unsigned __nbPtsPerSegment, std::vector <MCNode *> & __nodes, std::vector <unsigned> & __indexedTriangleSet)
375 unsigned N = __nbPtsPerSegment;
376 double D = 1.0f/(N-1);
377 std::map <unsigned, unsigned> mapIndices;
379 for (
unsigned i=0;i<N; i++)
384 for (
unsigned j=0;j<N-i; j++)
386 mapIndices[i*N+j] = __nodes.size();
389 __nodes.push_back(mcNode);
393 delete isoparametric;
397 mapIndices[i*N] = __nodes.size();
400 __nodes.push_back(mcNode);
403 for (
unsigned i=0;i+1<N;i++)
404 for (
unsigned j=0;j+1<N-i;j++)
407 unsigned north = p+N;
409 unsigned northeast = p+N+1;
411 unsigned t[2][3]={{p,east,north},{east,northeast,north}};
413 for (
int k=0; k<2; k++)
415 if (k == 1 && j+2==N-i)
417 for (
int l=0; l<3; l++)
418 __indexedTriangleSet.push_back(mapIndices[t[k][l]]);