Example #1
0
        internal void flipEdgeAndRebuild(FlippedEdge flippedEdge)
        {
            Edge edge = flippedEdge.edge;

            //swap the positions
            edge.beginVert.position = UsefulFunctions.convertPoint3dToVector(flippedEdge.rightFaceIntersection);
            edge.endVert.position   = UsefulFunctions.convertPoint3dToVector(flippedEdge.leftFaceIntersection);

            //get faces in anticlockwise order starting with rightFace
            Face face0 = edge.rightFace;
            Face face1 = edge.endVert.returnNextAntiClockwiseFace(face0);
            Face face2 = edge.leftFace;
            Face face3 = edge.beginVert.returnNextAntiClockwiseFace(face2);

            Face face2Check = edge.endVert.returnNextAntiClockwiseFace(face1);

            if (face2.index != face2Check.index)
            {
                //problem we do not have the standard situation
            }

            Face face0Check = edge.beginVert.returnNextAntiClockwiseFace(face3);

            if (face0Check.index != face0.index)
            {
                //again do not have the standard situation
            }

            //get edges in same order
            Edge edge0 = edge.endVert.returnNextAntiClockwiseEdge(edge);
            Edge edge1 = edge.endVert.returnNextAntiClockwiseEdge(edge0);
            Edge edge2 = edge.beginVert.returnNextAntiClockwiseEdge(edge);
            Edge edge3 = edge.beginVert.returnNextAntiClockwiseEdge(edge2);


            int insertRef = findEdgePositionInList(edge.endVert.connectedEdges, edge1);

            if (insertRef != -1)
            {
                edge.endVert.connectedEdges.Insert(insertRef + 1, edge2);
                edge.beginVert.connectedEdges.Remove(edge2);
            }
            else
            {
            }

            insertRef = findEdgePositionInList(edge.beginVert.connectedEdges, edge3);
            if (insertRef != -1)
            {
                edge.beginVert.connectedEdges.Insert(insertRef + 1, edge0);
                edge.endVert.connectedEdges.Remove(edge0);
            }
            else
            {
            }

            insertRef = findVertexPositionInList(face1.faceVerts, edge.endVert);
            if (insertRef != -1)
            {
                face1.faceVerts.Insert(insertRef + 1, edge.beginVert);
            }

            insertRef = findVertexPositionInList(face3.faceVerts, edge.beginVert);
            if (insertRef != -1)
            {
                face3.faceVerts.Insert(insertRef + 1, edge.endVert);
            }

            insertRef = findEdgePositionInList(face1.faceEdges, edge1);
            if (insertRef != -1)
            {
                face1.faceEdges.Insert(insertRef + 1, edge);
            }
            insertRef = findEdgePositionInList(face3.faceEdges, edge3);
            if (insertRef != -1)
            {
                face3.faceEdges.Insert(insertRef + 1, edge);
            }

            face0.faceEdges.Remove(edge);
            face2.faceEdges.Remove(edge);
            face0.faceVerts.Remove(edge.endVert);
            face2.faceVerts.Remove(edge.beginVert);

            //is there something going wrong here!
            //at some point
            if (edge0.beginVert == edge.endVert)
            {
                edge0.beginVert = edge.beginVert;
            }
            else
            {
                edge0.endVert = edge.beginVert;
            }
            if (edge2.beginVert == edge.beginVert)
            {
                edge2.beginVert = edge.endVert;
            }
            else
            {
                edge2.endVert = edge.endVert;
            }

            edge.rightFace = face1;
            edge.leftFace  = face3;
        }
Example #2
0
 protected virtual void OnFlippedEdge(FlippedEdgeEventArgs e)
 {
     sw.Stop();
     FlippedEdge?.Invoke(this, e);
     sw.Start();
 }