public HalfEdge[] InsertVertex(Vertex v) { HalfEdge e01 = this.edge; HalfEdge e12 = e01.next; HalfEdge e20 = e12.next; this.edge = null; HalfEdge e13 = new HalfEdge(e12.origin); HalfEdge e30 = new HalfEdge(v); Triangle tri0 = new Triangle(e01, e13, e30); HalfEdge e23 = new HalfEdge(e20.origin); HalfEdge e31 = new HalfEdge(v); Triangle tri1 = new Triangle(e12, e23, e31); HalfEdge e03 = new HalfEdge(e01.origin); HalfEdge e32 = new HalfEdge(v); Triangle tri2 = new Triangle(e20, e03, e32); HalfEdge.SetTwins(e03, e30); HalfEdge.SetTwins(e13, e31); HalfEdge.SetTwins(e23, e32); v.AddOutgoingEdge(e30); v.AddOutgoingEdge(e31); v.AddOutgoingEdge(e32); e03.origin.AddOutgoingEdge(e03); e13.origin.AddOutgoingEdge(e13); e23.origin.AddOutgoingEdge(e23); this.children = new List <Triangle>() { tri0, tri1, tri2 }; return(new HalfEdge[] { e01, e12, e20 }); }
public HalfEdge[] InsertVertex(Vertex v) { //012 forms left triangle. 103 forms right triangle. 4 is inserted vertex on edge 01, v. HalfEdge e01 = this; HalfEdge e12 = e01.next; HalfEdge e20 = e12.next; e01.incidentTriangle.edge = null; //Split into 4 triangles HalfEdge e04 = new HalfEdge(e01.origin); HalfEdge e42 = new HalfEdge(v); Triangle tri0 = new Triangle(e04, e42, e20); HalfEdge e41 = new HalfEdge(v); HalfEdge e24 = new HalfEdge(e20.origin); Triangle tri1 = new Triangle(e41, e12, e24); HalfEdge.SetTwins(e24, e42); e04.origin.RemoveOutgoingEdge(e01); e04.origin.AddOutgoingEdge(e04); v.AddOutgoingEdge(e41); v.AddOutgoingEdge(e42); e20.origin.AddOutgoingEdge(e24); e01.incidentTriangle.children = new List <Triangle> { tri0, tri1 }; HalfEdge e10 = this.twin; if (e10 != null) { e10.incidentTriangle.edge = null; HalfEdge e03 = e10.next; HalfEdge e31 = e03.next; HalfEdge e14 = new HalfEdge(e10.origin); HalfEdge e43 = new HalfEdge(v); Triangle tri2 = new Triangle(e14, e43, e31); HalfEdge e40 = new HalfEdge(v); HalfEdge e34 = new HalfEdge(e31.origin); Triangle tri3 = new Triangle(e40, e03, e34); HalfEdge.SetTwins(e04, e40); HalfEdge.SetTwins(e14, e41); HalfEdge.SetTwins(e34, e43); e14.origin.RemoveOutgoingEdge(e10); e14.origin.AddOutgoingEdge(e14); v.AddOutgoingEdge(e40); v.AddOutgoingEdge(e43); e31.origin.AddOutgoingEdge(e34); e10.incidentTriangle.children = new List <Triangle> { tri2, tri3 }; return(new HalfEdge[] { e20, e12, e31, e03 }); } return(new HalfEdge[] { e20, e12 }); }