Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
            }
        }