private static PolygonCrossing CreatePolygonCrossing(
            SegmentIntersectionOperation.PointResult pointResult,
            Segment2Data segmentDataA, Segment2Data segmentDataB
            )
        {
            Contract.Ensures(Contract.Result <PolygonCrossing>() != null);

            Contract.Assume(segmentDataA.RingIndex >= 0);
            Contract.Assume(segmentDataA.SegmentIndex >= 0);
            Contract.Assume(segmentDataB.RingIndex >= 0);
            Contract.Assume(segmentDataB.SegmentIndex >= 0);

            return(new PolygonCrossing(
                       pointResult.P,
                       new PolygonBoundaryLocation(segmentDataA.RingIndex, segmentDataA.SegmentIndex, pointResult.S),
                       new PolygonBoundaryLocation(segmentDataB.RingIndex, segmentDataB.SegmentIndex, pointResult.T)
                       ));
        }
 private static bool IsNotHead(SegmentIntersectionOperation.PointResult pointResult)
 {
     return(0 == ((pointResult.TypeA | pointResult.TypeB) & SegmentIntersectionOperation.SegmentIntersectionType.Head));
 }