Пример #1
0
        protected override int ExecuteCore(IRow row, int tableIndex)
        {
            using (
                SegmentSlopeAngleProvider segmentSlopeAngleProvider =
                    GetSegmentSlopeAngleProvider((IFeature)row))
            {
                var errorCount    = 0;
                var errorSegments = new List <SegmentSlopeAngle>();

                double maxAngle       = 0;
                double maxZDifference = 0;

                SegmentSlopeAngle segmentSlopeAngle;
                while ((segmentSlopeAngle = segmentSlopeAngleProvider.ReadSegmentSlopeAngle()) !=
                       null)
                {
                    double slopeAngle = segmentSlopeAngle.SlopeAngle;

                    if (slopeAngle > _limitRad)
                    {
                        continue;
                    }

                    if (slopeAngle <= _toleranceRad)
                    {
                        continue;
                    }

                    if (errorSegments.Count > 0 &&
                        (errorSegments[0].PartIndex != segmentSlopeAngle.PartIndex ||
                         errorSegments[errorSegments.Count - 1].SegmentIndex !=
                         segmentSlopeAngle.SegmentIndex - 1))
                    {
                        errorCount += ReportError(segmentSlopeAngleProvider, errorSegments,
                                                  maxAngle, maxZDifference, row);
                        errorSegments.Clear();
                        maxAngle       = 0;
                        maxZDifference = 0;
                    }

                    errorSegments.Add(segmentSlopeAngle);
                    maxAngle       = Math.Max(slopeAngle, maxAngle);
                    maxZDifference = Math.Max(segmentSlopeAngle.ZDifference, maxZDifference);
                }

                if (errorSegments.Count > 0)
                {
                    errorCount += ReportError(segmentSlopeAngleProvider, errorSegments,
                                              maxAngle, maxZDifference, row);
                }

                return(errorCount);
            }
        }
Пример #2
0
        private int ReportError(
            [NotNull] SegmentSlopeAngleProvider segmentSlopeAngleProvider,
            [NotNull] List <SegmentSlopeAngle> errorSegments,
            double maxAngleRad, double maxZDifference,
            [NotNull] IRow row)
        {
            int part = errorSegments[0].PartIndex;
            int startSegmentIndex = errorSegments[0].SegmentIndex;
            int endSegmentIndex   = errorSegments[errorSegments.Count - 1].SegmentIndex;

            IPolyline line = segmentSlopeAngleProvider.GetSubpart(part, startSegmentIndex,
                                                                  endSegmentIndex);

            return(ReportError(row, line, maxAngleRad, maxZDifference));
        }