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; }
protected virtual void OnFlippedEdge(FlippedEdgeEventArgs e) { sw.Stop(); FlippedEdge?.Invoke(this, e); sw.Start(); }