added update of face edge sel on TriSplit::Apply

This commit is contained in:
nico 2018-07-23 17:48:34 +02:00
parent 40781a5455
commit d4f5f73324
1 changed files with 27 additions and 10 deletions

View File

@ -913,48 +913,48 @@ public:
{ {
vB->P() = Center(f); vB->P() = Center(f);
//i tre vertici della faccia da dividere //three vertices of the face to be split
VertexType *V0,*V1,*V2; VertexType *V0,*V1,*V2;
V0 = f->V(0); V0 = f->V(0);
V1 = f->V(1); V1 = f->V(1);
V2 = f->V(2); V2 = f->V(2);
//risistemo la faccia di partenza //reupdate initial face
(*f).V(2) = &(*vB); (*f).V(2) = &(*vB);
//Faccia nuova #1 //new face #1
(*f1).V(0) = &(*vB); (*f1).V(0) = &(*vB);
(*f1).V(1) = V1; (*f1).V(1) = V1;
(*f1).V(2) = V2; (*f1).V(2) = V2;
//Faccia nuova #2 //new face #2
(*f2).V(0) = V0; (*f2).V(0) = V0;
(*f2).V(1) = &(*vB); (*f2).V(1) = &(*vB);
(*f2).V(2) = V2; (*f2).V(2) = V2;
if(f->HasFFAdjacency()) if(f->HasFFAdjacency())
{ {
//adiacenza delle facce adiacenti a quelle aggiunte //update adjacency
f->FFp(1)->FFp(f->FFi(1)) = f1; f->FFp(1)->FFp(f->FFi(1)) = f1;
f->FFp(2)->FFp(f->FFi(2)) = f2; f->FFp(2)->FFp(f->FFi(2)) = f2;
//adiacenza ff // ff adjacency
FaceType * FF0,*FF1,*FF2; FaceType * FF0,*FF1,*FF2;
FF0 = f->FFp(0); FF0 = f->FFp(0);
FF1 = f->FFp(1); FF1 = f->FFp(1);
FF2 = f->FFp(2); FF2 = f->FFp(2);
//Indici di adiacenza ff //ff adjacency indexes
char FFi0,FFi1,FFi2; char FFi0,FFi1,FFi2;
FFi0 = f->FFi(0); FFi0 = f->FFi(0);
FFi1 = f->FFi(1); FFi1 = f->FFi(1);
FFi2 = f->FFi(2); FFi2 = f->FFi(2);
//adiacenza della faccia di partenza //initial face
(*f).FFp(1) = &(*f1); (*f).FFp(1) = &(*f1);
(*f).FFi(1) = 0; (*f).FFi(1) = 0;
(*f).FFp(2) = &(*f2); (*f).FFp(2) = &(*f2);
(*f).FFi(2) = 0; (*f).FFi(2) = 0;
//adiacenza della faccia #1 //face #1
(*f1).FFp(0) = f; (*f1).FFp(0) = f;
(*f1).FFi(0) = 1; (*f1).FFi(0) = 1;
@ -964,7 +964,7 @@ public:
(*f1).FFp(2) = &(*f2); (*f1).FFp(2) = &(*f2);
(*f1).FFi(2) = 1; (*f1).FFi(2) = 1;
//adiacenza della faccia #2 //face #2
(*f2).FFp(0) = f; (*f2).FFp(0) = f;
(*f2).FFi(0) = 2; (*f2).FFi(0) = 2;
@ -974,6 +974,23 @@ public:
(*f2).FFp(2) = FF2; (*f2).FFp(2) = FF2;
(*f2).FFi(2) = FFi2; (*f2).FFi(2) = FFi2;
} }
//update faceEdge Sel if needed
if (f->HasFlags())
{
bool IsFaceEdgeS[3];
//collect and clear
for (size_t i=0;i<3;i++)
{
IsFaceEdgeS[i]=(*f).IsFaceEdgeS(i);
(*f).ClearFaceEdgeS(i);
(*f1).ClearFaceEdgeS(i);
(*f2).ClearFaceEdgeS(i);
}
//set back
if (IsFaceEdgeS[0])(*f).SetFaceEdgeS(0);
if (IsFaceEdgeS[1])(*f1).SetFaceEdgeS(1);
if (IsFaceEdgeS[2])(*f2).SetFaceEdgeS(2);
}
} }
}; // end class TriSplit }; // end class TriSplit