public DirectedEdge GetRightmostEdge() { IList edges = this.Edges; int size = edges.Count; if (size < 1) { return(null); } DirectedEdge de0 = (DirectedEdge)edges[0]; if (size == 1) { return(de0); } DirectedEdge deLast = (DirectedEdge)edges[size - 1]; int quad0 = de0.Quadrant; int quad1 = deLast.Quadrant; if (Quadrant.IsNorthern(quad0) && Quadrant.IsNorthern(quad1)) { return(de0); } else if (!Quadrant.IsNorthern(quad0) && !Quadrant.IsNorthern(quad1)) { return(deLast); } else { // edges are in different hemispheres - make sure we return one that is non-horizontal if (de0.Dy != 0) { return(de0); } else if (deLast.Dy != 0) { return(deLast); } } Debug.Assert(false, "Should never reach here: found two horizontal edges incident on node"); return(null); }
/// <summary> /// The coordinate pairs match if they define line segments lying in /// the same direction. /// E.g. the segments are parallel and in the same quadrant /// (as opposed to parallel and opposite!). /// </summary> private bool MatchInSameDirection(Coordinate p0, Coordinate p1, Coordinate ep0, Coordinate ep1) { if (!p0.Equals(ep0)) { return(false); } if (CGAlgorithms.ComputeOrientation(p0, p1, ep1) == OrientationType.Collinear && Quadrant.GetQuadrant(p0, p1) == Quadrant.GetQuadrant(ep0, ep1)) { return(true); } return(false); }