/// <summary>
        /// Limited reshape curve calculation without support for multiple-sources-as-union, adjust and preview-calculation
        /// </summary>
        /// <param name="sourceFeatures"></param>
        /// <param name="targetFeatures"></param>
        /// <param name="visibleExtent"></param>
        /// <param name="useMinimalTolerance"></param>
        /// <param name="bufferOptions"></param>
        /// <param name="filterOptions"></param>
        /// <param name="resultSubcurves"></param>
        /// <param name="trackCancel"></param>
        /// <returns></returns>
        public static ReshapeAlongCurveUsability CalculateReshapeCurves(
            [NotNull] IList <IFeature> sourceFeatures,
            [NotNull] IList <IFeature> targetFeatures,
            [CanBeNull] IEnvelope visibleExtent,
            bool useMinimalTolerance,
            TargetBufferOptions bufferOptions,
            ReshapeCurveFilterOptions filterOptions,
            IList <CutSubcurve> resultSubcurves,
            [CanBeNull] ITrackCancel trackCancel)
        {
            Assert.ArgumentCondition(sourceFeatures.Count > 0, "No selected features");

            IEnvelope clipExtent =
                GetClipExtent(visibleExtent,
                              bufferOptions.BufferTarget ? bufferOptions.BufferDistance : 0);

            ISubcurveCalculator curveCalculator = new ReshapableSubcurveCalculator();

            curveCalculator.SubcurveFilter =
                new SubcurveFilter(new StaticExtentProvider(visibleExtent));

            IGeometry targetGeometry = BuildTargetGeometry(targetFeatures, clipExtent);

            string    reasonForEmptyTargetLine;
            IPolyline targetLine = PrepareTargetLine(
                sourceFeatures, targetGeometry, clipExtent, bufferOptions,
                out reasonForEmptyTargetLine, trackCancel);

            if (targetLine == null || targetLine.IsEmpty)
            {
                return(ReshapeAlongCurveUsability.NoTarget);
            }

            PrepareSubcurveCalculator(curveCalculator, sourceFeatures, targetFeatures,
                                      useMinimalTolerance, filterOptions, clipExtent);

            ReshapeAlongCurveUsability result;

            if (sourceFeatures.Count == 1)
            {
                result = RecalculateReshapableSubcurves(
                    sourceFeatures[0], targetLine, curveCalculator,
                    resultSubcurves, trackCancel);
            }
            else
            {
                result = AddAdditionalSingleGeometryReshapeCurves(
                    sourceFeatures, targetLine, null, curveCalculator, resultSubcurves,
                    trackCancel);
            }

            // TODO: Adjust lines, Difference areas

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Limited reshape curve calculation without support for multiple-sources-as-union, adjust and preview-calculation
        /// </summary>
        /// <param name="sourceFeatures"></param>
        /// <param name="targetFeatures"></param>
        /// <param name="visibleExtent"></param>
        /// <param name="tolerance"></param>
        /// <param name="bufferOptions"></param>
        /// <param name="filterOptions"></param>
        /// <param name="resultSubcurves"></param>
        /// <param name="trackCancel"></param>
        /// <returns></returns>
        public static ReshapeAlongCurveUsability CalculateReshapeCurves(
            [NotNull] IList <IFeature> sourceFeatures,
            [NotNull] IList <IFeature> targetFeatures,
            [CanBeNull] IEnvelope visibleExtent,
            double tolerance,
            TargetBufferOptions bufferOptions,
            ReshapeCurveFilterOptions filterOptions,
            IList <CutSubcurve> resultSubcurves,
            [CanBeNull] ITrackCancel trackCancel = null)
        {
            ISubcurveCalculator curveCalculator = new ReshapableSubcurveCalculator();

            return(CalculateChangeAlongCurves(sourceFeatures, targetFeatures, visibleExtent,
                                              tolerance, bufferOptions, filterOptions,
                                              resultSubcurves, curveCalculator, trackCancel));
        }