コード例 #1
0
ファイル: SegmentPart.cs プロジェクト: sungaoyong/ProSuite
 public SegmentPart([NotNull] ISegmentProxy segmentProxy,
                    double minFraction,
                    double maxFraction,
                    bool complete)
     : this(
         segmentProxy.PartIndex, segmentProxy.SegmentIndex, minFraction, maxFraction,
         complete)
 {
     _segmentProxy = segmentProxy;
 }
コード例 #2
0
ファイル: QaPointNotNear.cs プロジェクト: sungaoyong/ProSuite
        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);
        }