public SegmentPart([NotNull] ISegmentProxy segmentProxy, double minFraction, double maxFraction, bool complete) : this( segmentProxy.PartIndex, segmentProxy.SegmentIndex, minFraction, maxFraction, complete) { _segmentProxy = segmentProxy; }
private static bool?GetOnRightSide( [NotNull] SegmentProxy nearestSegment, double nearestFraction, [NotNull] SegmentProxy segmentProxy, double alongFraction, [NotNull] IGeometry baseGeometry) { if (nearestSegment.PartIndex != segmentProxy.PartIndex) { return(null); } SegmentProxy from; SegmentProxy to; if (nearestFraction >= 1) { if (alongFraction > 0) { return(null); } ISegmentProxy next = nearestSegment.GetNextSegment(baseGeometry); if (next == null) { return(null); } if (next.SegmentIndex != segmentProxy.SegmentIndex) { return(null); } from = nearestSegment; to = segmentProxy; } else if (nearestFraction <= 0) { if (alongFraction < 1) { return(null); } ISegmentProxy next = segmentProxy.GetNextSegment(baseGeometry); if (next == null) { return(null); } if (next.SegmentIndex != nearestSegment.SegmentIndex) { return(null); } from = segmentProxy; to = nearestSegment; } else { // unexpected return(null); } Pnt vectorFrom = from.GetEnd(as3D: false) - from.GetStart(as3D: false); Pnt vectorTo = to.GetEnd(as3D: false) - to.GetStart(as3D: false); bool onRightSide = vectorFrom.VectorProduct(vectorTo) > 0; return(onRightSide); }