43 #pragma package(smart_init)
83 if (t[0]==v||t[1]==v||t[2]==v)
continue;
95 return Swap(__segment,
false);
231 MG_NOEUD* tris[2][2][3]={{{no[2],no[3],no[0]},{no[0],no[1],no[2]}},
232 {{no[3],no[1],no[2]},{no[1],no[3],no[0]}}};
236 if (testOverlapTriangles)
return -1;
241 for (
int k=0;k<2;k++)
242 for (
int i=0;i<2;i++)
245 MCFace * face = (
MCFace *)triangle[i]->get_lien_topologie();
246 for (
int j=0;j<3;j++)
247 ((
MCNode*)tris[k][i][j])->NormalMCFace(face,normal[j]);
248 normal[3] = .3333*(normal[0]+normal[1]+normal[2]);
253 for (
int j=0;j<3;j++)
256 tpProjNodes[j] = trf*p;
258 tpProjNodes[j][2] = 0;
263 double crit1=std::min(crit[0][0],crit[0][1]);
264 double crit2=std::min(crit[1][0],crit[1][1]);
268 double critGeomAccuracy[2];
280 AB->
evaluer_geo(((area[1][0]*wA+area[1][1]*wB)/(area[1][0]+area[1][1])),&Pgeo);
283 double P_Euclid[2][3];
284 for (
int i=0;i<3;i++) {
285 P_Euclid[1][i]=((area[0][0]*no[1]->
get_coord()[i]+area[0][1]*no[3]->
get_coord()[i])/(area[0][0]+area[0][1]));
286 P_Euclid[0][i]=((area[1][0]*no[0]->
get_coord()[i]+area[1][1]*no[2]->
get_coord()[i])/(area[1][0]+area[1][1]));
288 double distP[2],segLength[2];
289 for (
int i=0;i<2;i++)
291 for (
int i=0;i<2;i++)
293 double maxDistP=.5*std::max(segLength[0],segLength[1]);
294 for (
int i=0;i<2;i++)
295 if ( distP[i] < maxDistP )
296 critGeomAccuracy[i] = 1-distP[i]/maxDistP;
298 critGeomAccuracy[i] = 0;
301 crit1 += critGeomAccuracy[0];
302 crit2 += critGeomAccuracy[1];
304 if (__execute && crit2 > crit1 )
309 return (crit2>crit1)?crit2:-1;
319 for (
int i=0; i<3; i++)
338 for (
int i=0; i<3; i++)
352 for (
int i=0; i<3; i++)
366 for (
int i=0; i<3; i++)
374 LISTE_MG_SEGMENT::iterator itSeg;
375 LISTE_MG_NOEUD::iterator itNo;
376 LISTE_MG_TRIANGLE::iterator itTri;
380 if (tri->get_lien_topologie()->get_dimension()==3)
385 if (seg->get_lien_topologie()->get_dimension()==3)
390 if (no->get_lien_topologie()->get_dimension()==3)
398 LISTE_MG_SEGMENT::iterator itSeg;
400 std::map<double, MG_SEGMENT*> lst;
402 for (
int j=0;j<3;j++)
405 int tmpnbSwap = nbSwap;
409 if (__face != NULL && topo != __face)
416 for (std::map<double, MG_SEGMENT*>::reverse_iterator i=lst.rbegin();i!=lst.rend();i++)
418 double score1 = i->first;
430 if (nbSwap-tmpnbSwap==0)