public override double GetYValue(CommonElements common, ChartArea area, Series series, DataPoint point, int pointIndex, int yValueIndex)
        {
            if (this.totalPerPoint == null)
            {
                int num = 0;
                foreach (Series item in common.DataManager.Series)
                {
                    if (string.Compare(item.ChartTypeName, this.Name, true, CultureInfo.CurrentCulture) == 0 && item.ChartArea == area.Name && item.IsVisible())
                    {
                        num++;
                    }
                }
                Series[] array = new Series[num];
                int      num2  = 0;
                foreach (Series item2 in common.DataManager.Series)
                {
                    if (string.Compare(item2.ChartTypeName, this.Name, true, CultureInfo.CurrentCulture) == 0 && item2.ChartArea == area.Name && item2.IsVisible())
                    {
                        array[num2++] = item2;
                    }
                }
                common.DataManipulator.CheckXValuesAlignment(array);
                this.totalPerPoint = new double[series.Points.Count];
                for (int i = 0; i < series.Points.Count; i++)
                {
                    this.totalPerPoint[i] = 0.0;
                    Series[] array2 = array;
                    foreach (Series series4 in array2)
                    {
                        this.totalPerPoint[i] += Math.Abs(series4.Points[i].YValues[0]);
                    }
                }
            }
            if (!area.Area3DStyle.Enable3D)
            {
                if (this.totalPerPoint[pointIndex] == 0.0)
                {
                    int num4 = 0;
                    foreach (Series item3 in common.DataManager.Series)
                    {
                        if (string.Compare(item3.ChartTypeName, this.Name, true, CultureInfo.CurrentCulture) == 0 && item3.ChartArea == area.Name && item3.IsVisible())
                        {
                            num4++;
                        }
                    }
                    return(100.0 / (double)num4);
                }
                return(point.YValues[0] / this.totalPerPoint[pointIndex] * 100.0);
            }
            double num5 = double.NaN;

            if (yValueIndex == -1)
            {
                Axis   axis = area.GetAxis(AxisName.Y, series.YAxisType, series.YSubAxisName);
                double num6 = axis.Crossing;
                num5 = this.GetYValue(common, area, series, point, pointIndex, 0);
                if (area.Area3DStyle.Enable3D && num5 < 0.0)
                {
                    num5 = 0.0 - num5;
                }
                if (num5 >= 0.0)
                {
                    if (!double.IsNaN(base.prevPosY))
                    {
                        num6 = base.prevPosY;
                    }
                }
                else if (!double.IsNaN(base.prevNegY))
                {
                    num6 = base.prevNegY;
                }
                return(num5 - num6);
            }
            base.prevPosY      = double.NaN;
            base.prevNegY      = double.NaN;
            base.prevPositionX = double.NaN;
            foreach (Series item4 in common.DataManager.Series)
            {
                if (string.Compare(series.ChartArea, item4.ChartArea, true, CultureInfo.CurrentCulture) == 0 && string.Compare(series.ChartTypeName, item4.ChartTypeName, true, CultureInfo.CurrentCulture) == 0 && series.IsVisible())
                {
                    num5 = item4.Points[pointIndex].YValues[0] / this.totalPerPoint[pointIndex] * 100.0;
                    if (!double.IsNaN(num5) && area.Area3DStyle.Enable3D && num5 < 0.0)
                    {
                        num5 = 0.0 - num5;
                    }
                    if (num5 >= 0.0 && !double.IsNaN(base.prevPosY))
                    {
                        num5 += base.prevPosY;
                    }
                    if (num5 < 0.0 && !double.IsNaN(base.prevNegY))
                    {
                        num5 += base.prevNegY;
                    }
                    if (string.Compare(series.Name, item4.Name, StringComparison.Ordinal) == 0)
                    {
                        break;
                    }
                    if (num5 >= 0.0)
                    {
                        base.prevPosY = num5;
                    }
                    else
                    {
                        base.prevNegY = num5;
                    }
                    base.prevPositionX = item4.Points[pointIndex].XValue;
                    if (base.prevPositionX == 0.0 && ChartElement.IndexedSeries(series))
                    {
                        base.prevPositionX = (double)(pointIndex + 1);
                    }
                }
            }
            if (num5 > 100.0)
            {
                return(100.0);
            }
            return(num5);
        }
Exemplo n.º 2
0
 protected virtual void ProcessChartType(bool selection, ChartGraphics graph, CommonElements common, ChartArea area, Series seriesToDraw)
 {
     if (area.Area3DStyle.Enable3D)
     {
         ProcessChartType3D(selection, graph, common, area, seriesToDraw);
         return;
     }
     if (ShiftedSerName.Length == 0)
     {
         indexedSeries = area.IndexedSeries((string[])area.GetSeriesFromChartType(Name).ToArray(typeof(string)));
     }
     else
     {
         indexedSeries = ChartElement.IndexedSeries(common.DataManager.Series[ShiftedSerName]);
     }
     foreach (Series item in common.DataManager.Series)
     {
         bool flag = false;
         if (ShiftedSerName.Length > 0)
         {
             if (ShiftedSerName != item.Name)
             {
                 continue;
             }
             flag = true;
         }
         if (string.Compare(item.ChartTypeName, Name, ignoreCase: true, CultureInfo.CurrentCulture) != 0 || item.ChartArea != area.Name || !item.IsVisible() || (seriesToDraw != null && seriesToDraw.Name != item.Name))
         {
             continue;
         }
         hAxis = area.GetAxis(AxisName.X, item.XAxisType, item.XSubAxisName);
         vAxis = area.GetAxis(AxisName.Y, item.YAxisType, item.YSubAxisName);
         double viewMaximum  = hAxis.GetViewMaximum();
         double viewMinimum  = hAxis.GetViewMinimum();
         double viewMaximum2 = vAxis.GetViewMaximum();
         double viewMinimum2 = vAxis.GetViewMinimum();
         if (!selection)
         {
             common.EventsManager.OnBackPaint(item, new ChartPaintEventArgs(graph, common, area.PlotAreaPosition));
         }
         int num  = 0;
         int num2 = 1;
         foreach (DataPoint point in item.Points)
         {
             point.positionRel = new PointF(float.NaN, float.NaN);
             double yValue = indexedSeries ? ((double)num2) : point.XValue;
             yValue = hAxis.GetLogValue(yValue);
             if (yValue > viewMaximum || yValue < viewMinimum)
             {
                 num2++;
                 continue;
             }
             double yValue2 = GetYValue(common, area, item, point, num2 - 1, yValueIndex);
             yValue2 = vAxis.GetLogValue(yValue2);
             if (yValue2 > viewMaximum2 || yValue2 < viewMinimum2)
             {
                 num2++;
                 continue;
             }
             bool flag2 = false;
             if (!ShouldDrawMarkerOnViewEdgeX())
             {
                 if (yValue == viewMaximum && ShiftedX >= 0.0)
                 {
                     flag2 = true;
                 }
                 if (yValue == viewMinimum && ShiftedX <= 0.0)
                 {
                     flag2 = true;
                 }
             }
             int         markerSize  = point.MarkerSize;
             string      markerImage = point.MarkerImage;
             MarkerStyle markerStyle = point.MarkerStyle;
             PointF      empty       = PointF.Empty;
             empty.Y = (float)vAxis.GetLinearPosition(yValue2);
             if (indexedSeries)
             {
                 empty.X = (float)hAxis.GetPosition(num2);
             }
             else
             {
                 empty.X = (float)hAxis.GetPosition(point.XValue);
             }
             empty.X          += (float)ShiftedX;
             point.positionRel = new PointF(empty.X, empty.Y);
             SizeF markerSize2 = GetMarkerSize(graph, common, area, point, markerSize, markerImage);
             if (flag2)
             {
                 num2++;
                 continue;
             }
             if (alwaysDrawMarkers || markerStyle != 0 || markerImage.Length > 0)
             {
                 if (common.ProcessModePaint)
                 {
                     if (num == 0)
                     {
                         graph.StartHotRegion(point);
                         graph.StartAnimation();
                         DrawPointMarker(graph, point.series, point, empty, (markerStyle == MarkerStyle.None) ? MarkerStyle.Circle : markerStyle, (int)markerSize2.Height, (point.MarkerColor == Color.Empty) ? point.Color : point.MarkerColor, (point.MarkerBorderColor == Color.Empty) ? point.BorderColor : point.MarkerBorderColor, GetMarkerBorderSize(point), markerImage, point.MarkerImageTransparentColor, (point.series != null) ? point.series.ShadowOffset : 0, (point.series != null) ? point.series.ShadowColor : Color.Empty, new RectangleF(empty.X, empty.Y, markerSize2.Width, markerSize2.Height));
                         graph.StopAnimation();
                         graph.EndHotRegion();
                     }
                     if (common.ProcessModeRegions)
                     {
                         SetHotRegions(common, graph, point, markerSize2, point.series.Name, num2 - 1, markerStyle, empty);
                     }
                 }
                 num++;
                 if (item.MarkerStep == num)
                 {
                     num = 0;
                 }
             }
             graph.StartHotRegion(point, labelRegion: true);
             graph.StartAnimation();
             DrawLabels(area, graph, common, empty, (int)markerSize2.Height, point, item, num2 - 1);
             graph.StopAnimation();
             graph.EndHotRegion();
             num2++;
         }
         if (!selection)
         {
             common.EventsManager.OnPaint(item, new ChartPaintEventArgs(graph, common, area.PlotAreaPosition));
         }
         if (flag)
         {
             break;
         }
     }
 }
Exemplo n.º 3
0
        public override double GetYValue(CommonElements common, ChartArea area, Series series, DataPoint point, int pointIndex, int yValueIndex)
        {
            double num = double.NaN;

            if (!area.Area3DStyle.Enable3D)
            {
                return(point.YValues[0]);
            }
            if (yValueIndex == -1)
            {
                Axis   axis     = area.GetAxis(AxisName.Y, series.YAxisType, series.YSubAxisName);
                double crossing = axis.Crossing;
                num = this.GetYValue(common, area, series, point, pointIndex, 0);
                if (area.Area3DStyle.Enable3D && num < 0.0)
                {
                    num = 0.0 - num;
                }
                if (num >= 0.0)
                {
                    if (!double.IsNaN(this.prevPosY))
                    {
                        crossing = this.prevPosY;
                    }
                }
                else if (!double.IsNaN(this.prevNegY))
                {
                    crossing = this.prevNegY;
                }
                return(num - crossing);
            }
            this.prevPosY      = double.NaN;
            this.prevNegY      = double.NaN;
            this.prevPositionX = double.NaN;
            foreach (Series item in common.DataManager.Series)
            {
                if (string.Compare(series.ChartArea, item.ChartArea, StringComparison.Ordinal) == 0 && string.Compare(series.ChartTypeName, item.ChartTypeName, StringComparison.OrdinalIgnoreCase) == 0 && item.IsVisible())
                {
                    num = item.Points[pointIndex].YValues[0];
                    if (area.Area3DStyle.Enable3D && num < 0.0)
                    {
                        num = 0.0 - num;
                    }
                    if (!double.IsNaN(num))
                    {
                        if (num >= 0.0 && !double.IsNaN(this.prevPosY))
                        {
                            num += this.prevPosY;
                        }
                        if (num < 0.0 && !double.IsNaN(this.prevNegY))
                        {
                            num += this.prevNegY;
                        }
                    }
                    if (string.Compare(series.Name, item.Name, StringComparison.Ordinal) != 0)
                    {
                        if (num >= 0.0)
                        {
                            this.prevPosY = num;
                        }
                        if (num < 0.0)
                        {
                            this.prevNegY = num;
                        }
                        this.prevPositionX = item.Points[pointIndex].XValue;
                        if (this.prevPositionX == 0.0 && ChartElement.IndexedSeries(series))
                        {
                            this.prevPositionX = (double)(pointIndex + 1);
                        }
                        continue;
                    }
                    return(num);
                }
            }
            return(num);
        }