private int ReportError( [NotNull] SegmentLengthProvider segmentLengthProvider, [NotNull] List <SegmentLength> errorSegments, double minSegmentLength, [NotNull] IRow row) { int part = errorSegments[0].PartIndex; int startSegmentIndex = errorSegments[0].SegmentIndex; int endSegmentIndex = errorSegments[errorSegments.Count - 1].SegmentIndex; IPolyline line = segmentLengthProvider.GetSubpart(part, startSegmentIndex, endSegmentIndex); return(ReportError(row, line, minSegmentLength)); }
protected override int ExecuteCore(IRow row, int tableIndex) { using (SegmentLengthProvider provider = GetSegmentLengthProvider((IFeature)row)) { int errorCount = 0; var errorSegments = new List <SegmentLength>(); double maxLength = 0; SegmentLength segmentLength; while ((segmentLength = provider.ReadSegmentLength()) != null) { double length = segmentLength.Length; if (length >= _limit) { continue; } if (errorSegments.Count > 0 && (errorSegments[0].PartIndex != segmentLength.PartIndex || errorSegments[errorSegments.Count - 1].SegmentIndex != segmentLength.SegmentIndex - 1)) { errorCount += ReportError(provider, errorSegments, maxLength, row); errorSegments.Clear(); maxLength = 0; } errorSegments.Add(segmentLength); maxLength = Math.Max(length, maxLength); } if (errorSegments.Count > 0) { errorCount += ReportError(provider, errorSegments, maxLength, row); } return(errorCount); } }