private static ChangeAlongCurves PopulateReshapeAlongCurves( [NotNull] IList <Feature> sourceFeatures, [NotNull] IList <Feature> targetFeatures, IEnumerable <ReshapeLineMsg> reshapeLineMsgs, ReshapeAlongCurveUsability cutSubcurveUsability) { IList <CutSubcurve> resultSubcurves = new List <CutSubcurve>(); foreach (var reshapeLineMsg in reshapeLineMsgs) { CutSubcurve cutSubcurve = FromReshapeLineMsg(reshapeLineMsg); Assert.NotNull(cutSubcurve); if (reshapeLineMsg.Source != null) { var sourceRef = new GdbObjectReference(reshapeLineMsg.Source.ClassHandle, reshapeLineMsg.Source.ObjectId); cutSubcurve.Source = sourceFeatures.First(f => sourceRef.References(f)); } resultSubcurves.Add(cutSubcurve); } return(new ChangeAlongCurves(resultSubcurves, cutSubcurveUsability) { TargetFeatures = targetFeatures }); }
private static IList <CutSubcurve> CalculateReshapeLines( [NotNull] IList <IFeature> sourceFeatures, [NotNull] IList <IFeature> targetFeatures, [NotNull] CalculateReshapeLinesRequest request, [CanBeNull] ITrackCancel trackCancel, out ReshapeAlongCurveUsability usability) { Stopwatch watch = Stopwatch.StartNew(); IEnvelope visibleExtent; ReshapeCurveFilterOptions filterOptions = GetLineFilterOptions(request.FilterOptions, out visibleExtent); TargetBufferOptions targetBufferOptions = GetTargetBufferOptions(request.TargetBufferOptions); IList <CutSubcurve> resultLines = new List <CutSubcurve>(); usability = ChangeGeometryAlongUtils.CalculateReshapeCurves( sourceFeatures, targetFeatures, visibleExtent, request.Tolerance, targetBufferOptions, filterOptions, resultLines, trackCancel); _msg.DebugStopTiming(watch, "Calculated {0} reshape lines", resultLines.Count); return(resultLines); }
public void Update([NotNull] ChangeAlongCurves newState) { _curveUsability = newState._curveUsability; _reshapeSubcurves.Clear(); _reshapeSubcurves.AddRange(newState.ReshapeCutSubcurves); TargetFeatures = newState.TargetFeatures; }
private static CalculateReshapeLinesResponse PackCalculateReshapeLinesResponse( ReshapeAlongCurveUsability usability, [NotNull] IList <CutSubcurve> resultLines) { Stopwatch watch = Stopwatch.StartNew(); var result = new CalculateReshapeLinesResponse { ReshapeLinesUsability = (int)usability }; foreach (CutSubcurve resultCurve in resultLines) { result.ReshapeLines.Add(ToReshapeLineMsg(resultCurve)); } _msg.DebugStopTiming( watch, "Packed {0} reshape along calculation results into response", resultLines.Count); return(result); }
private static IEnumerable <CutSubcurve> GetIndividualGeometriesReshapeCurves( [NotNull] IList <IFeature> sourceFeatures, [NotNull] IPolyline targetPolyline, [NotNull] ISubcurveCalculator subcurveCalculator) { var result = new List <CutSubcurve>(); _msg.DebugFormat( "GetIndividualGeometriesReshapeCurves: calculating curves for {0} geometries..", sourceFeatures.Count); foreach (IFeature sourceFeature in sourceFeatures) { IGeometry sourceGeometry = sourceFeature.Shape; var individualResultList = new List <CutSubcurve>(); ReshapeAlongCurveUsability individualResult = subcurveCalculator.CalculateSubcurves( sourceGeometry, targetPolyline, individualResultList, null); foreach (CutSubcurve subcurve in individualResultList) { subcurve.Source = new GdbObjectReference(sourceFeature); } result.AddRange(individualResultList); _msg.VerboseDebugFormat( "Individual geometry's subcurve calculation result: {0}", individualResult); Marshal.ReleaseComObject(sourceGeometry); } return(result); }
public ChangeAlongCurves([NotNull] IEnumerable <CutSubcurve> subcurves, ReshapeAlongCurveUsability curveUsability) { _curveUsability = curveUsability; _reshapeSubcurves = new List <CutSubcurve>(subcurves); }