/// <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); }
/// <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)); }