internal void Paint(ChartGraphics graph) { if (!enabled) { return; } if (axis.IsCustomGridLines()) { PaintCustom(graph); return; } Series series = null; if (axis.axisType == AxisName.X || axis.axisType == AxisName.X2) { ArrayList xAxesSeries = axis.chartArea.GetXAxesSeries((axis.axisType != 0) ? AxisType.Secondary : AxisType.Primary, axis.SubAxisName); if (xAxesSeries.Count > 0) { series = axis.Common.DataManager.Series[xAxesSeries[0]]; if (series != null && !series.XValueIndexed) { series = null; } } } double num = interval; DateTimeIntervalType dateTimeIntervalType = intervalType; double num2 = intervalOffset; DateTimeIntervalType dateTimeIntervalType2 = intervalOffsetType; if (!majorGridTick && (interval == 0.0 || double.IsNaN(interval))) { if (axis.majorGrid.IntervalType == DateTimeIntervalType.Auto) { interval = axis.majorGrid.Interval / 5.0; } else { DateTimeIntervalType type = axis.majorGrid.IntervalType; interval = axis.CalcInterval(axis.minimum, axis.minimum + (axis.maximum - axis.minimum) / 4.0, date: true, out type, ChartValueTypes.DateTime); intervalType = type; intervalOffsetType = axis.majorGrid.IntervalOffsetType; intervalOffset = axis.majorGrid.IntervalOffset; } } double num3 = axis.GetViewMinimum(); if (!axis.chartArea.chartAreaIsCurcular || axis.axisType == AxisName.Y || axis.axisType == AxisName.Y2) { num3 = axis.AlignIntervalStart(num3, Interval, IntervalType, series, majorGridTick); } DateTimeIntervalType type2 = (IntervalOffsetType == DateTimeIntervalType.Auto) ? IntervalType : IntervalOffsetType; if (IntervalOffset != 0.0 && !double.IsNaN(IntervalOffset) && series == null) { num3 += axis.GetIntervalSize(num3, IntervalOffset, type2, series, 0.0, DateTimeIntervalType.Number, forceIntIndex: true, forceAbsInterval: false); } if ((axis.GetViewMaximum() - axis.GetViewMinimum()) / axis.GetIntervalSize(num3, Interval, IntervalType, series, 0.0, DateTimeIntervalType.Number, forceIntIndex: true) > 10000.0 || axis.GetViewMaximum() <= axis.GetViewMinimum() || Interval <= 0.0) { return; } int index = 0; int num4 = 1; double num5 = num3; decimal d = (decimal)axis.GetViewMaximum(); while ((decimal)num3 <= d) { if (majorGridTick || !axis.Logarithmic) { double num6 = Interval; double intervalSize = axis.GetIntervalSize(num3, num6, IntervalType, series, IntervalOffset, type2, forceIntIndex: true); if (intervalSize == 0.0) { throw new InvalidOperationException(SR.ExceptionTickMarksIntervalIsZero); } if ((decimal)num3 >= (decimal)axis.GetViewMinimum()) { DrawGrid(graph, num3, (int)((axis.GetViewMaximum() - axis.GetViewMinimum()) / intervalSize), index); } num3 += intervalSize; } else { double logMinimum = GetLogMinimum(num3, series); if (num5 != logMinimum) { num5 = logMinimum; num4 = 1; } double num7 = Math.Log(1.0 + interval * (double)num4, axis.logarithmBase); num3 = num5; num3 += num7; num4++; if (GetLogMinimum(num3, series) != logMinimum) { continue; } if (num7 == 0.0) { throw new InvalidOperationException(SR.ExceptionTickMarksIntervalIsZero); } if ((decimal)num3 >= (decimal)axis.GetViewMinimum() && (decimal)num3 <= (decimal)axis.GetViewMaximum()) { DrawGrid(graph, num3, (int)((axis.GetViewMaximum() - axis.GetViewMinimum()) / num7), index); } } if (index++ > 10000) { break; } } if (!majorGridTick) { interval = num; intervalType = dateTimeIntervalType; intervalOffset = num2; intervalOffsetType = dateTimeIntervalType2; } }
internal void Paint(ChartGraphics graph, CommonElements common, bool drawLinesOnly) { if (axis.chartArea.chartAreaIsCurcular) { return; } RectangleF rect = axis.chartArea.PlotAreaPosition.ToRectangleF(); bool flag = true; if (axis.AxisPosition == AxisPosition.Bottom || axis.AxisPosition == AxisPosition.Top) { flag = false; } Series series = null; if (axis.axisType == AxisName.X || axis.axisType == AxisName.X2) { ArrayList xAxesSeries = axis.chartArea.GetXAxesSeries((axis.axisType != 0) ? AxisType.Secondary : AxisType.Primary, axis.SubAxisName); if (xAxesSeries.Count > 0) { series = axis.Common.DataManager.Series[xAxesSeries[0]]; if (series != null && !series.XValueIndexed) { series = null; } } } double num = axis.GetViewMinimum(); if (!axis.chartArea.chartAreaIsCurcular || axis.axisType == AxisName.Y || axis.axisType == AxisName.Y2) { double num2 = Interval; if (interlaced) { num2 /= 2.0; } num = axis.AlignIntervalStart(num, num2, IntervalType, series); } if (Interval != 0.0 && (axis.GetViewMaximum() - axis.GetViewMinimum()) / axis.GetIntervalSize(num, interval, intervalType, series, 0.0, DateTimeIntervalType.Number, forceIntIndex: false) > 10000.0) { return; } DateTimeIntervalType type = (IntervalOffsetType == DateTimeIntervalType.Auto) ? IntervalType : IntervalOffsetType; if (Interval == 0.0) { num = IntervalOffset; } else if (IntervalOffset > 0.0) { num += axis.GetIntervalSize(num, IntervalOffset, type, series, 0.0, DateTimeIntervalType.Number, forceIntIndex: false); } else if (IntervalOffset < 0.0) { num -= axis.GetIntervalSize(num, 0.0 - IntervalOffset, type, series, 0.0, DateTimeIntervalType.Number, forceIntIndex: false); } int num3 = 0; while (num3++ <= 10000) { if (StripWidth > 0.0 && !drawLinesOnly) { double num4 = num + axis.GetIntervalSize(num, StripWidth, StripWidthType, series, IntervalOffset, type, forceIntIndex: false); if (num4 > axis.GetViewMinimum() && num < axis.GetViewMaximum()) { RectangleF empty = RectangleF.Empty; double val = (float)axis.GetLinearPosition(num); double val2 = (float)axis.GetLinearPosition(num4); if (flag) { empty.X = rect.X; empty.Width = rect.Width; empty.Y = (float)Math.Min(val, val2); empty.Height = (float)Math.Max(val, val2) - empty.Y; empty.Intersect(rect); } else { empty.Y = rect.Y; empty.Height = rect.Height; empty.X = (float)Math.Min(val, val2); empty.Width = (float)Math.Max(val, val2) - empty.X; empty.Intersect(rect); } if (empty.Width > 0f && empty.Height > 0f) { graph.StartHotRegion(href, toolTip); if (!axis.chartArea.Area3DStyle.Enable3D) { graph.StartAnimation(); graph.FillRectangleRel(empty, BackColor, BackHatchStyle, BackImage, BackImageMode, BackImageTransparentColor, BackImageAlign, BackGradientType, BackGradientEndColor, BorderColor, BorderWidth, BorderStyle, Color.Empty, 0, PenAlignment.Inset); graph.StopAnimation(); } else { Draw3DStrip(graph, empty, flag); } graph.EndHotRegion(); PaintTitle(graph, empty); if (common.ProcessModeRegions && !axis.chartArea.Area3DStyle.Enable3D) { common.HotRegionsList.AddHotRegion(graph, empty, ToolTip, Href, MapAreaAttributes, this, ChartElementType.StripLines, string.Empty); } } } } else if (StripWidth == 0.0 && drawLinesOnly && num > axis.GetViewMinimum() && num < axis.GetViewMaximum()) { PointF empty2 = PointF.Empty; PointF empty3 = PointF.Empty; if (flag) { empty2.X = rect.X; empty2.Y = (float)axis.GetLinearPosition(num); empty3.X = rect.Right; empty3.Y = empty2.Y; } else { empty2.X = (float)axis.GetLinearPosition(num); empty2.Y = rect.Y; empty3.X = empty2.X; empty3.Y = rect.Bottom; } graph.StartHotRegion(href, toolTip); if (!axis.chartArea.Area3DStyle.Enable3D) { graph.DrawLineRel(BorderColor, BorderWidth, BorderStyle, empty2, empty3); } else { graph.Draw3DGridLine(axis.chartArea, borderColor, borderWidth, borderStyle, empty2, empty3, flag, axis.Common, this); } graph.EndHotRegion(); PaintTitle(graph, empty2, empty3); if (common.ProcessModeRegions) { SizeF size = new SizeF(BorderWidth + 1, BorderWidth + 1); size = graph.GetRelativeSize(size); RectangleF empty4 = RectangleF.Empty; if (flag) { empty4.X = empty2.X; empty4.Y = empty2.Y - size.Height / 2f; empty4.Width = empty3.X - empty2.X; empty4.Height = size.Height; } else { empty4.X = empty2.X - size.Width / 2f; empty4.Y = empty2.Y; empty4.Width = size.Width; empty4.Height = empty3.Y - empty2.Y; } common.HotRegionsList.AddHotRegion(graph, empty4, ToolTip, Href, MapAreaAttributes, this, ChartElementType.StripLines, string.Empty); } } if (Interval > 0.0) { num += axis.GetIntervalSize(num, Interval, IntervalType, series, IntervalOffset, type, forceIntIndex: false); } if (!(Interval > 0.0) || !(num <= axis.GetViewMaximum())) { break; } } }