Beispiel #1
0
        private static IPolyline TryGetAdjacentSegmentsAsPolyline(
            [NotNull] IPolygon polygon,
            [NotNull] IPoint startingAt)
        {
            double xyTolerance = GeometryUtils.GetXyTolerance(startingAt);

            int         partIdx;
            const bool  allowNoMatch     = true;
            IList <int> adjacentSegments = SegmentReplacementUtils.GetAdjacentSegmentIndexes(
                polygon, startingAt, xyTolerance, out partIdx, allowNoMatch);

            if (adjacentSegments.Count == 0)
            {
                return(null);
            }

            var segmentList = new List <ISegment>();

            foreach (int segmentIdx in adjacentSegments)
            {
                ISegment segment = GeometryUtils.GetSegment((ISegmentCollection)polygon, partIdx,
                                                            segmentIdx);
                segmentList.Add(GeometryFactory.Clone(segment));
            }

            if (segmentList.Count == 0)
            {
                return(null);
            }

            ISegment[] segments = segmentList.ToArray();

            // create a polyline
            IPolyline result = GeometryFactory.CreateEmptyPolyline(polygon);

            GeometryUtils.GeometryBridge.AddSegments((ISegmentCollection)result,
                                                     ref segments);

            GeometryUtils.Simplify(result);

            return(result);
        }