984 |
std::pair<const Vertex*,const Vertex*> pV(Vo0,Vo1); |
std::pair<const Vertex*,const Vertex*> pV(Vo0,Vo1); |
985 |
std::pair<const Vertex*,const Vertex*> pV2(Vo1,Vo0); |
std::pair<const Vertex*,const Vertex*> pV2(Vo1,Vo0); |
986 |
|
|
987 |
real_t epsilon=1e-10; |
real_t epsilon=1e-6; |
988 |
real_t pscalar,k; |
real_t pscalar,k; |
989 |
size_t num; |
size_t num; |
990 |
Vertex P; |
Vertex P; |
1022 |
__InTriangle(P,V,num); |
__InTriangle(P,V,num); |
1023 |
if(num==3) { |
if(num==3) { |
1024 |
if(!(norm2>epsilon)) { |
if(!(norm2>epsilon)) { |
1025 |
|
//point confondus avec un des sommets |
1026 |
Pinter.addPoint(Vo0); |
Pinter.addPoint(Vo0); |
1027 |
} else |
} else |
1028 |
if(!(norm3>epsilon)) { |
if(!(norm3>epsilon)) { |
1029 |
|
//point confondus avec l'autre sommet |
1030 |
Pinter.addPoint(Vo1); |
Pinter.addPoint(Vo1); |
1031 |
} else |
} else |
1032 |
if(listVertexIntersectionNew.find(pV)==listVertexIntersectionNew.end() |
if(listVertexIntersectionNew.find(pV)==listVertexIntersectionNew.end() |
1061 |
Pinter.cutTriangle1()[ncase]=Pinter.size(); |
Pinter.cutTriangle1()[ncase]=Pinter.size(); |
1062 |
} |
} |
1063 |
} else { |
} else { |
1064 |
|
//il ne faut pas que le point soit sur une arete du tr 1 |
1065 |
if(inV01 > epsilon and inV02 > epsilon and inV12 > epsilon ) { |
if(inV01 > epsilon and inV02 > epsilon and inV12 > epsilon ) { |
1066 |
__InTriangle(P,V,num); |
__InTriangle(P,V,num); |
1067 |
if(num==3) { |
if(num==3) { |
1205 |
TinyVector<3,size_t >& cutTr2= pairTriangleToIntersectionPoints[pTriangle].cutTriangle2(); |
TinyVector<3,size_t >& cutTr2= pairTriangleToIntersectionPoints[pTriangle].cutTriangle2(); |
1206 |
|
|
1207 |
for(size_t i=0 ; i<Pinter.size() ; ++i) { |
for(size_t i=0 ; i<Pinter.size() ; ++i) { |
1208 |
real_t epsilon=1e-10; |
real_t epsilon=1e-6; |
1209 |
const Triangle& To=(*(*currentTriangle)); |
const Triangle& To=(*(*currentTriangle)); |
1210 |
const Vertex& Vo0 = To(0); |
const Vertex& Vo0 = To(0); |
1211 |
const Vertex& Vo1 = To(1); |
const Vertex& Vo1 = To(1); |
1330 |
const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection); |
const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection); |
1331 |
if(edgesCut[1]==1) { |
if(edgesCut[1]==1) { |
1332 |
const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection); |
const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection); |
1333 |
//#warning Reference not set. |
if(B==C) { |
1334 |
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
//cas ou les 2 points d'intersections sont de meme adresse (donc confondus) |
1335 |
|
//ffout(4)<<"we have a problem createcase1\n"; |
1336 |
|
//ffout(4)<<A<<&A<<"\n"; |
1337 |
|
//ffout(4)<<B<<&B<<"\n"; |
1338 |
|
//ffout(4)<<C<<&C<<"\n"; |
1339 |
|
} else { |
1340 |
|
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
1341 |
|
} |
1342 |
} else { |
} else { |
1343 |
ffout(4) <<"pbs 10\n"<<std::flush; |
ffout(4) <<"pbs 10\n"<<std::flush; |
1344 |
ffout(4)<<V0<<"\n"; |
ffout(4)<<V0<<"\n"; |
1371 |
const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection); |
const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection); |
1372 |
if(edgesCut[1]==1) { |
if(edgesCut[1]==1) { |
1373 |
const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection); |
const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection); |
1374 |
//#warning Reference not set. |
if( D==B ) { |
1375 |
__addTriangle(Triangle(A,B,D,K.reference()),cell,triangleListIntersectionNew); |
__addTriangle(Triangle(A,C,D,K.reference()),cell,triangleListIntersectionNew); |
1376 |
__addTriangle(Triangle(A,D,C,K.reference()),cell,triangleListIntersectionNew); |
} else if(C==D){ |
1377 |
|
__addTriangle(Triangle(A,B,D,K.reference()),cell,triangleListIntersectionNew); |
1378 |
|
} else { |
1379 |
|
__addTriangle(Triangle(A,B,D,K.reference()),cell,triangleListIntersectionNew); |
1380 |
|
__addTriangle(Triangle(A,D,C,K.reference()),cell,triangleListIntersectionNew); |
1381 |
|
} |
1382 |
} else { |
} else { |
1383 |
ffout(4)<<"-------- warning trou in 0\n"<<std::flush; |
ffout(4)<<"-------- warning trou in 0\n"<<std::flush; |
1384 |
ffout(4)<<V0<<"\n"; |
ffout(4)<<V0<<"\n"; |
1403 |
#warning is it true? case where only one edge is cut? |
#warning is it true? case where only one edge is cut? |
1404 |
ffout(4) << numberPointsInterior<<" be careful 1\n"<<std::flush; |
ffout(4) << numberPointsInterior<<" be careful 1\n"<<std::flush; |
1405 |
//case 1 point inside and more than 1 point in the triangle |
//case 1 point inside and more than 1 point in the triangle |
1406 |
__createByEdges(K, cell, triangleListIntersectionNew); |
// __createByEdges(K, cell, triangleListIntersectionNew); |
1407 |
} |
} |
1408 |
} |
} |
1409 |
} |
} |
1465 |
const Vertex& D=__determinateNumber(vertexNum[1],pointsIntersection); |
const Vertex& D=__determinateNumber(vertexNum[1],pointsIntersection); |
1466 |
//#warning Reference not set. |
//#warning Reference not set. |
1467 |
if(D==C) { |
if(D==C) { |
1468 |
if(!(D==K(0) or D==K(1) or D==K(2))) { |
//si les 2 points d'inter sont confondus |
1469 |
if(Norm(D-K(0))<1e-6 or Norm(D-K(1))<1e-6 or Norm(D-K(2))<1e-6) { |
if(!(D==V0 or D==V1 or D==V2)) { |
1470 |
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
//si le point d'inter n'est confondus avec aucun des sommets |
1471 |
} else { |
//ffout(4)<<"we have a problem\n"; |
1472 |
ffout(4)<<"we have a problem\n"; |
//ffout(4)<<V0<<&V0<<"\n"; |
1473 |
|
//ffout(4)<<V1<<&V1<<"\n"; |
1474 |
|
//ffout(4)<<V2<<&V2<<"\n"; |
1475 |
|
//ffout(4)<<A<<&A<<"\n"; |
1476 |
|
//ffout(4)<<B<<&B<<"\n"; |
1477 |
|
//ffout(4)<<C<<&C<<"\n"; |
1478 |
|
// le triangle est vraisemblablement plat mais il le faut pour la connectivite du maillage |
1479 |
|
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
1480 |
|
} else { |
1481 |
|
//il y a une point d'inter confondu avec un des sommets |
1482 |
|
//il faut voir si ce n'est pas A ou B et dans ce cas on construit |
1483 |
|
if(!(C==A or C==B)) { |
1484 |
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
|
__addTriangle(Triangle(C,B,D,K.reference()),cell,triangleListIntersectionNew); |
|
1485 |
} |
} |
|
} else { |
|
|
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
|
1486 |
} |
} |
1487 |
} else { |
} else { |
1488 |
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
__addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew); |
1489 |
__addTriangle(Triangle(C,B,D,K.reference()),cell,triangleListIntersectionNew); |
__addTriangle(Triangle(C,B,D,K.reference()),cell,triangleListIntersectionNew); |
1490 |
} |
} |
1491 |
|
|
1492 |
} else { |
} else { |
1493 |
ffout(4) <<"pbs 20\n"; |
ffout(4) <<"pbs 20\n"; |
1494 |
//#warning Reference not set. |
//#warning Reference not set. |
2417 |
} |
} |
2418 |
|
|
2419 |
std::list<Triangle*> listTriangle0=(*it0).second; |
std::list<Triangle*> listTriangle0=(*it0).second; |
|
ffout(4)<<listTriangle0.size()<<"\n"; |
|
2420 |
for(std::list<Triangle*>::iterator jt0=listTriangle0.begin() ; |
for(std::list<Triangle*>::iterator jt0=listTriangle0.begin() ; |
2421 |
jt0!=listTriangle0.end() ; ++jt0) { |
jt0!=listTriangle0.end() ; ++jt0) { |
2422 |
|
|
3391 |
(*__internals).__constructionFinalMesh((*objectStack.top()), |
(*__internals).__constructionFinalMesh((*objectStack.top()), |
3392 |
s_mesh); |
s_mesh); |
3393 |
|
|
3394 |
|
// #warning _________________________________A ENLEVER_________ |
3395 |
|
// Connectivity<Triangle> connect(s_mesh.numberOfCells()); |
3396 |
|
// ConnectivityBuilder<SurfaceMeshOfTriangles> C(s_mesh,connect); |
3397 |
|
// size_t compt=0; |
3398 |
|
// for(size_t i=0 ; i<s_mesh.numberOfCells() ; ++i) { |
3399 |
|
// const Triangle& T=s_mesh.cell(i); |
3400 |
|
// TinyVector<3,const Triangle*> V=connect(s_mesh.cellNumber(T)); |
3401 |
|
// for(size_t j=0 ; j<3 ; ++j) { |
3402 |
|
// if(V[j]==0) { |
3403 |
|
// //ffout(4)<<"attention un des voisins n'existe pas\n"; |
3404 |
|
// ++compt; |
3405 |
|
// } |
3406 |
|
// } |
3407 |
|
// } |
3408 |
|
// ffout(4)<<"****************************il manque "<<compt<<" sommets\n"; |
3409 |
|
// ///////////////////////////////////////////////////////////////////////////// |
3410 |
|
|
3411 |
int n0=0, n1=0; |
int n0=0, n1=0; |
3412 |
|
|
3413 |
#warning REMOVE THIS CALL |
#warning REMOVE THIS CALL |