public void ReplaceEdge(ECEdge from, ECEdge to) { for (int i = 0; i < 3; i++) { if (AdjEdges[i] == from) { AdjEdges[i] = to; to.LinkFace(this); } else if (AdjEdges[i] == from.Twin()) { AdjEdges[i] = to.Twin(); to.Twin().LinkFace(this); } } MarkPlaneInvalid(); }
public ECEdge CreateEdge(ECVertex v1, ECVertex v2) { ECEdge e = new ECEdge(v1, v2); Edges.Add(e); e.UId = Edges.Count - 1; e.Twin().UId = e.UId; ValidEdgesCount++; return(e); }
public void MayFixFace(ECFace face) { ECVertex v0 = face.GetVertex(0); ECVertex v1 = face.GetVertex(1); ECVertex v2 = face.GetVertex(2); ECEdge e0 = face.GetEdge(0); ECEdge e1 = face.GetEdge(1); ECEdge e2 = face.GetEdge(2); bool a = (v0 == v1); bool b = (v0 == v2); bool c = (v1 == v2); if (a && c) { KillEdge(e0); KillEdge(e1); KillEdge(e2); KillFace(face); } else if (a) { KillEdge(e0); e1.ReplaceBy(e2.Twin()); KillFace(face); } else if (b) { KillEdge(e2); e0.ReplaceBy(e1.Twin()); KillFace(face); } else if (c) { KillEdge(e1); e0.ReplaceBy(e2.Twin()); KillFace(face); } }