public void AddTriangle(DelaunayTriangle t) { Triangles.Add(t); }
/// <summary> /// Update neighbor pointers /// </summary> /// <param name="p1">Point 1 of the shared edge</param> /// <param name="p2">Point 2 of the shared edge</param> /// <param name="t">This triangle's new neighbor</param> private void MarkNeighbor( TriangulationPoint p1, TriangulationPoint p2, DelaunayTriangle t ) { int i = EdgeIndex(p1,p2); if ( i==-1 ) throw new Exception( "Error marking neighbors -- t doesn't contain edge p1-p2!" ); Neighbors[i] = t; }
/// <summary> /// Exhaustive search to update neighbor pointers /// </summary> public void MarkNeighbor( DelaunayTriangle t ) { // Points of this triangle also belonging to t bool a = t.Contains(Points[0]); bool b = t.Contains(Points[1]); bool c = t.Contains(Points[2]); if (b&&c) { Neighbors[0]=t; t.MarkNeighbor(Points[1],Points[2],this); } else if (a&&c) { Neighbors[1]=t; t.MarkNeighbor(Points[0],Points[2],this); } else if (a&&b) { Neighbors[2]=t; t.MarkNeighbor(Points[0],Points[1],this); } else throw new Exception( "Failed to mark neighbor, doesn't share an edge!"); }
/// <param name="t">Opposite triangle</param> /// <param name="p">The point in t that isn't shared between the triangles</param> public TriangulationPoint OppositePoint(DelaunayTriangle t, TriangulationPoint p) { Debug.Assert(t != this, "self-pointer error"); return PointCWFrom(t.PointCWFrom(p)); }
public void MarkEdge(DelaunayTriangle triangle) { for (int i = 0; i < 3; i++) if ( EdgeIsConstrained[i] ) { triangle.MarkConstrainedEdge(Points[(i+1)%3], Points[(i+2)%3]); } }