示例#1
0
        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;
            }
        }
示例#2
0
        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;
                }
            }
        }