public override double GetYValue(CommonElements common, ChartArea area, Series series, DataPoint point, int pointIndex, int yValueIndex)
        {
            double[] array = null;
            string   seriesStackGroupName = StackedColumnChart.GetSeriesStackGroupName(series);

            if (this.stackedGroupsTotalPerPoint == null)
            {
                this.stackedGroupsTotalPerPoint = new Hashtable();
                foreach (string stackGroupName in base.stackGroupNames)
                {
                    Series[] seriesByStackedGroupName = StackedColumnChart.GetSeriesByStackedGroupName(common, stackGroupName, series.ChartTypeName, series.ChartArea);
                    common.DataManipulator.CheckXValuesAlignment(seriesByStackedGroupName);
                    double[] array2 = new double[series.Points.Count];
                    for (int i = 0; i < series.Points.Count; i++)
                    {
                        array2[i] = 0.0;
                        Series[] array3 = seriesByStackedGroupName;
                        foreach (Series series2 in array3)
                        {
                            array2[i] += Math.Abs(series2.Points[i].YValues[0]);
                        }
                    }
                    this.stackedGroupsTotalPerPoint.Add(stackGroupName, array2);
                }
            }
            array = (double[])this.stackedGroupsTotalPerPoint[seriesStackGroupName];
            if (!area.Area3DStyle.Enable3D && (point.YValues[0] == 0.0 || point.Empty))
            {
                return(0.0);
            }
            if (area.Area3DStyle.Enable3D && yValueIndex != -2)
            {
                double num = double.NaN;
                if (yValueIndex == -1)
                {
                    Axis   axis = area.GetAxis(AxisName.Y, series.YAxisType, series.YSubAxisName);
                    double num2 = axis.Crossing;
                    num = this.GetYValue(common, area, series, point, pointIndex, 0);
                    if (num >= 0.0)
                    {
                        if (!double.IsNaN(base.prevPosY))
                        {
                            num2 = base.prevPosY;
                        }
                    }
                    else if (!double.IsNaN(base.prevNegY))
                    {
                        num2 = base.prevNegY;
                    }
                    return(num - num2);
                }
                base.prevPosY = double.NaN;
                base.prevNegY = 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() && !(seriesStackGroupName != StackedColumnChart.GetSeriesStackGroupName(item)))
                    {
                        if (double.IsNaN(num))
                        {
                            num = ((array[pointIndex] != 0.0) ? (item.Points[pointIndex].YValues[0] / array[pointIndex] * 100.0) : 0.0);
                        }
                        else
                        {
                            num = ((array[pointIndex] != 0.0) ? (item.Points[pointIndex].YValues[0] / array[pointIndex] * 100.0) : 0.0);
                            if (num >= 0.0 && !double.IsNaN(base.prevPosY))
                            {
                                num += base.prevPosY;
                            }
                            if (num < 0.0 && !double.IsNaN(base.prevNegY))
                            {
                                num += base.prevNegY;
                            }
                        }
                        if (string.Compare(series.Name, item.Name, StringComparison.Ordinal) == 0)
                        {
                            break;
                        }
                        if (num >= 0.0)
                        {
                            base.prevPosY = num;
                        }
                        else
                        {
                            base.prevNegY = num;
                        }
                    }
                }
                if (!(num > 100.0))
                {
                    return(num);
                }
                return(100.0);
            }
            if (array[pointIndex] == 0.0)
            {
                return(0.0);
            }
            return(point.YValues[0] / array[pointIndex] * 100.0);
        }
        private void ProcessChartType3D(bool selection, ChartGraphics graph, CommonElements common, ChartArea area, bool labels, Series seriesToDraw)
        {
            if (labels && !selection)
            {
                return;
            }
            ArrayList arrayList = null;

            arrayList = area.GetClusterSeriesNames(seriesToDraw.Name);
            common.DataManager.GetNumberOfPoints((string[])arrayList.ToArray(typeof(string)));
            ArrayList dataPointDrawingOrder = area.GetDataPointDrawingOrder(arrayList, this, selection, COPCoordinates.X | COPCoordinates.Y, null, 0, false);
            bool      flag = false;

            foreach (object item in dataPointDrawingOrder)
            {
                DataPoint3D dataPoint3D = (DataPoint3D)item;
                DataPoint   dataPoint   = dataPoint3D.dataPoint;
                Series      series      = dataPoint.series;
                this.currentStackGroup = StackedColumnChart.GetSeriesStackGroupName(series);
                dataPoint.positionRel  = new PointF(float.NaN, float.NaN);
                Axis            axis            = area.GetAxis(AxisName.Y, series.YAxisType, series.YSubAxisName);
                Axis            axis2           = area.GetAxis(AxisName.X, series.XAxisType, series.XSubAxisName);
                BarDrawingStyle barDrawingStyle = ChartGraphics.GetBarDrawingStyle(dataPoint);
                float           num             = 0.5f;
                float           num2            = 0.5f;
                bool            flag2           = true;
                bool            flag3           = false;
                for (int i = 0; i < arrayList.Count; i++)
                {
                    Series series2 = common.DataManager.Series[i];
                    if (flag2 && dataPoint3D.index <= series2.Points.Count && series2.Points[dataPoint3D.index - 1].YValues[0] != 0.0)
                    {
                        flag2 = false;
                        if (series2.Name == series.Name)
                        {
                            num2 = 0f;
                        }
                    }
                    if (series2.Name == series.Name)
                    {
                        flag3 = true;
                    }
                    else if (dataPoint3D.index <= series2.Points.Count && series2.Points[dataPoint3D.index - 1].YValues[0] != 0.0)
                    {
                        flag3 = false;
                    }
                }
                if (flag3)
                {
                    num = 0f;
                }
                if (area.stackGroupNames != null && area.stackGroupNames.Count > 1 && area.Area3DStyle.Clustered)
                {
                    string seriesStackGroupName = StackedColumnChart.GetSeriesStackGroupName(series);
                    bool   flag4 = true;
                    bool   flag5 = false;
                    foreach (string item2 in arrayList)
                    {
                        Series series3 = common.DataManager.Series[item2];
                        if (StackedColumnChart.GetSeriesStackGroupName(series3) == seriesStackGroupName)
                        {
                            if (flag4 && dataPoint3D.index < series3.Points.Count && series3.Points[dataPoint3D.index - 1].YValues[0] != 0.0)
                            {
                                flag4 = false;
                                if (item2 == series.Name)
                                {
                                    num2 = 0f;
                                }
                            }
                            if (item2 == series.Name)
                            {
                                flag5 = true;
                            }
                            else if (dataPoint3D.index < series3.Points.Count && series3.Points[dataPoint3D.index - 1].YValues[0] != 0.0)
                            {
                                flag5 = false;
                            }
                        }
                    }
                    if (flag5)
                    {
                        num = 0f;
                    }
                }
                double yValue  = this.GetYValue(common, area, series, dataPoint3D.dataPoint, dataPoint3D.index - 1, 0);
                double yValue2 = yValue - this.GetYValue(common, area, series, dataPoint3D.dataPoint, dataPoint3D.index - 1, -1);
                yValue  = axis.GetLogValue(yValue);
                yValue2 = axis.GetLogValue(yValue2);
                if (yValue2 > axis.GetViewMaximum())
                {
                    num     = 0.5f;
                    yValue2 = axis.GetViewMaximum();
                }
                else if (yValue2 < axis.GetViewMinimum())
                {
                    num2    = 0.5f;
                    yValue2 = axis.GetViewMinimum();
                }
                if (yValue > axis.GetViewMaximum())
                {
                    num    = 0.5f;
                    yValue = axis.GetViewMaximum();
                }
                else if (yValue < axis.GetViewMinimum())
                {
                    num2   = 0.5f;
                    yValue = axis.GetViewMinimum();
                }
                double     linearPosition  = axis.GetLinearPosition(yValue);
                double     linearPosition2 = axis.GetLinearPosition(yValue2);
                RectangleF empty           = RectangleF.Empty;
                try
                {
                    empty.X     = (float)(dataPoint3D.xPosition - dataPoint3D.width / 2.0);
                    empty.Width = (float)dataPoint3D.width;
                    if (linearPosition2 < linearPosition)
                    {
                        float num3 = num2;
                        num2         = num;
                        num          = num3;
                        empty.Y      = (float)linearPosition2;
                        empty.Height = (float)linearPosition - empty.Y;
                    }
                    else
                    {
                        empty.Y      = (float)linearPosition;
                        empty.Height = (float)linearPosition2 - empty.Y;
                    }
                }
                catch (Exception)
                {
                    continue;
                }
                dataPoint.positionRel = new PointF((float)dataPoint3D.xPosition, empty.Top);
                if (!dataPoint.Empty)
                {
                    double yValue3 = dataPoint3D.indexedSeries ? ((double)dataPoint3D.index) : dataPoint.XValue;
                    yValue3 = axis2.GetLogValue(yValue3);
                    if (!(yValue3 < axis2.GetViewMinimum()) && !(yValue3 > axis2.GetViewMaximum()) && (!(yValue < axis.GetViewMinimum()) || !(yValue2 < axis.GetViewMinimum())) && (!(yValue > axis.GetViewMaximum()) || !(yValue2 > axis.GetViewMaximum())))
                    {
                        bool flag6 = false;
                        if (!(empty.Right <= area.PlotAreaPosition.X) && !(empty.X >= area.PlotAreaPosition.Right()))
                        {
                            if (empty.X < area.PlotAreaPosition.X)
                            {
                                empty.Width -= area.PlotAreaPosition.X - empty.X;
                                empty.X      = area.PlotAreaPosition.X;
                            }
                            if (empty.Right > area.PlotAreaPosition.Right())
                            {
                                empty.Width -= empty.Right - area.PlotAreaPosition.Right();
                            }
                            if (empty.Width < 0.0)
                            {
                                empty.Width = 0f;
                            }
                            if (empty.Height != 0.0 && empty.Width != 0.0)
                            {
                                DrawingOperationTypes drawingOperationTypes = DrawingOperationTypes.DrawElement;
                                if (common.ProcessModeRegions)
                                {
                                    drawingOperationTypes |= DrawingOperationTypes.CalcElementPath;
                                }
                                graph.StartHotRegion(dataPoint);
                                GraphicsPath path = graph.Fill3DRectangle(empty, dataPoint3D.zPosition, dataPoint3D.depth, area.matrix3D, area.Area3DStyle.Light, dataPoint.Color, num, num2, dataPoint.BackHatchStyle, dataPoint.BackImage, dataPoint.BackImageMode, dataPoint.BackImageTransparentColor, dataPoint.BackImageAlign, dataPoint.BackGradientType, dataPoint.BackGradientEndColor, dataPoint.BorderColor, dataPoint.BorderWidth, dataPoint.BorderStyle, PenAlignment.Inset, barDrawingStyle, true, drawingOperationTypes);
                                graph.StopAnimation();
                                graph.EndHotRegion();
                                if (flag6)
                                {
                                    graph.ResetClip();
                                }
                                if (common.ProcessModeRegions && !labels)
                                {
                                    common.HotRegionsList.AddHotRegion(path, false, graph, dataPoint, series.Name, dataPoint3D.index - 1);
                                }
                                if (dataPoint.ShowLabelAsValue || dataPoint.Label.Length > 0)
                                {
                                    flag = true;
                                }
                            }
                        }
                    }
                }
            }
            if (flag)
            {
                foreach (object item3 in dataPointDrawingOrder)
                {
                    DataPoint3D dataPoint3D2 = (DataPoint3D)item3;
                    DataPoint   dataPoint2   = dataPoint3D2.dataPoint;
                    Series      series4      = dataPoint2.series;
                    Axis        axis3        = area.GetAxis(AxisName.Y, series4.YAxisType, series4.YSubAxisName);
                    Axis        axis4        = area.GetAxis(AxisName.X, series4.XAxisType, series4.XSubAxisName);
                    double      num4         = this.GetYValue(common, area, series4, dataPoint3D2.dataPoint, dataPoint3D2.index - 1, 0);
                    if (num4 > axis3.GetViewMaximum())
                    {
                        num4 = axis3.GetViewMaximum();
                    }
                    if (num4 < axis3.GetViewMinimum())
                    {
                        num4 = axis3.GetViewMinimum();
                    }
                    num4 = axis3.GetLogValue(num4);
                    double     yPosition = dataPoint3D2.yPosition;
                    double     num5      = num4 - axis3.GetLogValue(this.GetYValue(common, area, series4, dataPoint3D2.dataPoint, dataPoint3D2.index - 1, -1));
                    double     height    = dataPoint3D2.height;
                    RectangleF empty2    = RectangleF.Empty;
                    try
                    {
                        empty2.X     = (float)(dataPoint3D2.xPosition - dataPoint3D2.width / 2.0);
                        empty2.Width = (float)dataPoint3D2.width;
                        if (height < yPosition)
                        {
                            empty2.Y      = (float)height;
                            empty2.Height = (float)yPosition - empty2.Y;
                        }
                        else
                        {
                            empty2.Y      = (float)yPosition;
                            empty2.Height = (float)height - empty2.Y;
                        }
                    }
                    catch (Exception)
                    {
                        continue;
                    }
                    if (!dataPoint2.Empty && !selection)
                    {
                        double yValue4 = dataPoint3D2.indexedSeries ? ((double)dataPoint3D2.index) : dataPoint2.XValue;
                        yValue4 = axis4.GetLogValue(yValue4);
                        if (!(yValue4 < axis4.GetViewMinimum()) && !(yValue4 > axis4.GetViewMaximum()) && (!(num4 < axis3.GetViewMinimum()) || !(num5 < axis3.GetViewMinimum())) && (!(num4 > axis3.GetViewMaximum()) || !(num5 > axis3.GetViewMaximum())))
                        {
                            graph.StartAnimation();
                            this.DrawLabels3D(common, graph, area, dataPoint3D2, dataPoint3D2.index - 1, series4, empty2);
                            graph.StopAnimation();
                        }
                    }
                }
            }
        }
        public static Series[] GetSeriesByStackedGroupName(CommonElements common, string groupName, string chartTypeName, string chartAreaName)
        {
            ArrayList arrayList = new ArrayList();

            foreach (Series item in common.DataManager.Series)
            {
                if (string.Compare(item.ChartTypeName, chartTypeName, StringComparison.OrdinalIgnoreCase) == 0 && chartAreaName == item.ChartArea && item.IsVisible() && StackedColumnChart.GetSeriesStackGroupName(item) == groupName)
                {
                    arrayList.Add(item);
                }
            }
            int num = 0;

            Series[] array = new Series[arrayList.Count];
            foreach (Series item2 in arrayList)
            {
                array[num++] = item2;
            }
            return(array);
        }
        public virtual double GetYValue(CommonElements common, ChartArea area, Series series, DataPoint point, int pointIndex, int yValueIndex)
        {
            double num = double.NaN;

            if (area.Area3DStyle.Enable3D)
            {
                switch (yValueIndex)
                {
                case -2:
                    break;

                case -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 (num >= 0.0)
                    {
                        if (!double.IsNaN(this.prevPosY))
                        {
                            crossing = this.prevPosY;
                        }
                    }
                    else if (!double.IsNaN(this.prevNegY))
                    {
                        crossing = this.prevNegY;
                    }
                    return(num - crossing);
                }

                default:
                    this.prevPosY = double.NaN;
                    this.prevNegY = 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())
                            {
                                string seriesStackGroupName = StackedColumnChart.GetSeriesStackGroupName(item);
                                if (this.stackGroupNameUsed && seriesStackGroupName != this.currentStackGroup)
                                {
                                    continue;
                                }
                                if (double.IsNaN(num))
                                {
                                    num = item.Points[pointIndex].YValues[0];
                                }
                                else
                                {
                                    num = item.Points[pointIndex].YValues[0];
                                    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;
                                    }
                                    continue;
                                }
                                return(num);
                            }
                        }
                        return(num);
                    }
                }
            }
            return(point.YValues[0]);
        }
        private void ProcessChartType(bool selection, ChartGraphics graph, CommonElements common, ChartArea area, bool shadow, bool labels, Series seriesToDraw)
        {
            bool     flag      = false;
            AxisType axisType  = AxisType.Primary;
            AxisType axisType2 = AxisType.Primary;
            string   a         = string.Empty;
            string   a2        = string.Empty;

            for (int i = 0; i < common.DataManager.Series.Count; i++)
            {
                Series series = common.DataManager.Series[i];
                if (string.Compare(series.ChartTypeName, this.Name, StringComparison.OrdinalIgnoreCase) == 0 && !(series.ChartArea != area.Name) && series.IsVisible())
                {
                    if (i != 0)
                    {
                        if (axisType == series.XAxisType && axisType2 == series.YAxisType && !(a != series.XSubAxisName) && !(a2 != series.YSubAxisName))
                        {
                            continue;
                        }
                        flag = true;
                        break;
                    }
                    axisType  = series.XAxisType;
                    axisType2 = series.YAxisType;
                    a         = series.XSubAxisName;
                    a2        = series.YSubAxisName;
                }
            }
            if (flag)
            {
                for (int j = 0; j < common.DataManager.Series.Count; j++)
                {
                    Series series2 = common.DataManager.Series[j];
                    if (string.Compare(series2.ChartTypeName, this.Name, StringComparison.OrdinalIgnoreCase) == 0 && !(series2.ChartArea != area.Name) && series2.IsVisible())
                    {
                        string   seriesStackGroupName = StackedColumnChart.GetSeriesStackGroupName(series2);
                        string[] values = new string[7]
                        {
                            "_X_",
                            series2.XAxisType.ToString(),
                            series2.XSubAxisName,
                            "_Y_",
                            series2.YAxisType.ToString(),
                            series2.YSubAxisName,
                            "__"
                        };
                        seriesStackGroupName = (((DataPointAttributes)series2)["StackedGroupName"] = string.Concat(values));
                    }
                }
            }
            this.stackGroupNames = new ArrayList();
            foreach (Series item in common.DataManager.Series)
            {
                if (string.Compare(item.ChartTypeName, this.Name, StringComparison.OrdinalIgnoreCase) == 0 && !(item.ChartArea != area.Name) && item.IsVisible())
                {
                    string seriesStackGroupName2 = StackedColumnChart.GetSeriesStackGroupName(item);
                    if (!this.stackGroupNames.Contains(seriesStackGroupName2))
                    {
                        this.stackGroupNames.Add(seriesStackGroupName2);
                    }
                }
            }
            if (area.Area3DStyle.Enable3D)
            {
                if (!shadow)
                {
                    this.ProcessChartType3D(selection, graph, common, area, labels, seriesToDraw);
                }
            }
            else
            {
                string[] series4        = (string[])area.GetSeriesFromChartType(this.Name).ToArray(typeof(string));
                int      numberOfPoints = common.DataManager.GetNumberOfPoints(series4);
                bool     flag2          = area.IndexedSeries(series4);
                for (int k = 0; k < numberOfPoints; k++)
                {
                    for (int l = 0; l < this.stackGroupNames.Count; l++)
                    {
                        this.currentStackGroup = (string)this.stackGroupNames[l];
                        int    num  = 0;
                        double num2 = 0.0;
                        double num3 = 0.0;
                        foreach (Series item2 in common.DataManager.Series)
                        {
                            if (string.Compare(item2.ChartTypeName, this.Name, StringComparison.OrdinalIgnoreCase) == 0 && !(item2.ChartArea != area.Name) && item2.IsVisible() && k < item2.Points.Count)
                            {
                                string seriesStackGroupName3 = StackedColumnChart.GetSeriesStackGroupName(item2);
                                if (!(seriesStackGroupName3 != this.currentStackGroup))
                                {
                                    DataPoint dataPoint = item2.Points[k];
                                    dataPoint.positionRel = new PointF(float.NaN, float.NaN);
                                    Axis   axis     = area.GetAxis(AxisName.Y, item2.YAxisType, item2.YSubAxisName);
                                    Axis   axis2    = area.GetAxis(AxisName.X, item2.XAxisType, item2.XSubAxisName);
                                    bool   flag3    = false;
                                    double interval = 1.0;
                                    if (!flag2)
                                    {
                                        if (item2.Points.Count == 1 && (item2.XValueType == ChartValueTypes.Date || item2.XValueType == ChartValueTypes.DateTime || item2.XValueType == ChartValueTypes.Time || item2.XValueType == ChartValueTypes.DateTimeOffset))
                                        {
                                            ArrayList seriesFromChartType = area.GetSeriesFromChartType(this.Name);
                                            ((ChartAreaAxes)area).GetPointsInterval(seriesFromChartType, axis2.Logarithmic, axis2.logarithmBase, true, out flag3);
                                            interval = ((double.IsNaN(axis2.majorGrid.Interval) || axis2.majorGrid.IntervalType == DateTimeIntervalType.NotSet) ? axis2.GetIntervalSize(axis2.minimum, axis2.Interval, axis2.IntervalType) : axis2.GetIntervalSize(axis2.minimum, axis2.majorGrid.Interval, axis2.majorGrid.IntervalType));
                                        }
                                        else
                                        {
                                            interval = area.GetPointsInterval(axis2.Logarithmic, axis2.logarithmBase);
                                        }
                                    }
                                    double pointWidth = item2.GetPointWidth(graph, axis2, interval, 0.8);
                                    pointWidth /= (double)this.stackGroupNames.Count;
                                    if (!selection)
                                    {
                                        common.EventsManager.OnBackPaint(item2, new ChartPaintEventArgs(graph, common, area.PlotAreaPosition));
                                    }
                                    double num4 = this.GetYValue(common, area, item2, dataPoint, k, 0);
                                    if (num != 0)
                                    {
                                        num4 = ((!(num4 >= 0.0)) ? (num4 + num3) : (num4 + num2));
                                    }
                                    bool   flag4 = false;
                                    double num5  = num4;
                                    num4 = axis.GetLogValue(num4);
                                    if (!flag4 || !labels)
                                    {
                                        if (num4 > axis.GetViewMaximum())
                                        {
                                            num4 = axis.GetViewMaximum();
                                        }
                                        if (num4 < axis.GetViewMinimum())
                                        {
                                            num4 = axis.GetViewMinimum();
                                        }
                                    }
                                    double linearPosition = axis.GetLinearPosition(num4);
                                    double num6           = 0.0;
                                    num6 = ((num != 0) ? ((!(this.GetYValue(common, area, item2, dataPoint, k, 0) >= 0.0)) ? num3 : num2) : ((!flag4 || !labels) ? axis.Crossing : 0.0));
                                    double position = axis.GetPosition(num6);
                                    double num7     = dataPoint.XValue;
                                    if (flag2)
                                    {
                                        num7 = (double)k + 1.0;
                                    }
                                    double num8 = axis2.GetPosition(num7);
                                    if (this.stackGroupNames.Count > 1)
                                    {
                                        num8 = num8 - pointWidth * (double)this.stackGroupNames.Count / 2.0 + pointWidth / 2.0 + (double)l * pointWidth;
                                    }
                                    num7 = axis2.GetLogValue(num7);
                                    RectangleF empty = RectangleF.Empty;
                                    try
                                    {
                                        empty.X     = (float)(num8 - pointWidth / 2.0);
                                        empty.Width = (float)pointWidth;
                                        if (position < linearPosition)
                                        {
                                            empty.Y      = (float)position;
                                            empty.Height = (float)linearPosition - empty.Y;
                                        }
                                        else
                                        {
                                            empty.Y      = (float)linearPosition;
                                            empty.Height = (float)position - empty.Y;
                                        }
                                    }
                                    catch (Exception)
                                    {
                                        num++;
                                        continue;
                                    }
                                    dataPoint.positionRel = new PointF((float)num8, empty.Top);
                                    if (dataPoint.Empty)
                                    {
                                        num++;
                                    }
                                    else
                                    {
                                        if (common.ProcessModePaint)
                                        {
                                            bool flag5 = false;
                                            if (num7 < axis2.GetViewMinimum() || num7 > axis2.GetViewMaximum() || (num4 < axis.GetViewMinimum() && num6 < axis.GetViewMinimum()) || (num4 > axis.GetViewMaximum() && num6 > axis.GetViewMaximum()))
                                            {
                                                flag5 = true;
                                            }
                                            if (!flag5)
                                            {
                                                int num9 = 0;
                                                if (shadow)
                                                {
                                                    num9 = item2.ShadowOffset;
                                                }
                                                if (!labels)
                                                {
                                                    bool flag6 = false;
                                                    if (empty.X < area.PlotAreaPosition.X || empty.Right > area.PlotAreaPosition.Right() || empty.Y < area.PlotAreaPosition.Y || empty.Bottom > area.PlotAreaPosition.Bottom())
                                                    {
                                                        graph.SetClip(area.PlotAreaPosition.ToRectangleF());
                                                        flag6 = true;
                                                    }
                                                    graph.StartHotRegion(dataPoint);
                                                    graph.StartAnimation();
                                                    if (!shadow || num9 != 0)
                                                    {
                                                        graph.FillRectangleRel(empty, (!shadow) ? dataPoint.Color : Color.Transparent, dataPoint.BackHatchStyle, dataPoint.BackImage, dataPoint.BackImageMode, dataPoint.BackImageTransparentColor, dataPoint.BackImageAlign, dataPoint.BackGradientType, (!shadow) ? dataPoint.BackGradientEndColor : Color.Transparent, dataPoint.BorderColor, dataPoint.BorderWidth, dataPoint.BorderStyle, item2.ShadowColor, num9, PenAlignment.Inset, (!shadow) ? ChartGraphics.GetBarDrawingStyle(dataPoint) : BarDrawingStyle.Default, true);
                                                    }
                                                    graph.StopAnimation();
                                                    graph.EndHotRegion();
                                                    if (flag6)
                                                    {
                                                        graph.ResetClip();
                                                    }
                                                }
                                                else
                                                {
                                                    graph.StartAnimation();
                                                    this.DrawLabels(common, graph, area, dataPoint, k, item2, empty);
                                                    graph.StopAnimation();
                                                }
                                            }
                                        }
                                        if (common.ProcessModeRegions && !shadow && !labels)
                                        {
                                            common.HotRegionsList.AddHotRegion(graph, empty, dataPoint, item2.Name, k);
                                        }
                                        if (!selection)
                                        {
                                            common.EventsManager.OnPaint(item2, new ChartPaintEventArgs(graph, common, area.PlotAreaPosition));
                                        }
                                        if (axis.Logarithmic)
                                        {
                                            num4 = Math.Pow(axis.logarithmBase, num4);
                                        }
                                        num++;
                                        if (this.GetYValue(common, area, item2, dataPoint, k, 0) >= 0.0)
                                        {
                                            num2 = num5;
                                        }
                                        else
                                        {
                                            num3 = num5;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (flag)
                {
                    for (int m = 0; m < common.DataManager.Series.Count; m++)
                    {
                        Series series6 = common.DataManager.Series[m];
                        if (string.Compare(series6.ChartTypeName, this.Name, StringComparison.OrdinalIgnoreCase) == 0 && !(series6.ChartArea != area.Name) && series6.IsVisible())
                        {
                            string text2 = StackedColumnChart.GetSeriesStackGroupName(series6);
                            int    num10 = text2.IndexOf("__", StringComparison.Ordinal);
                            if (num10 >= 0)
                            {
                                text2 = text2.Substring(num10 + 2);
                            }
                            if (text2.Length > 0)
                            {
                                ((DataPointAttributes)series6)["StackedGroupName"] = text2;
                            }
                            else
                            {
                                series6.DeleteAttribute("StackedGroupName");
                            }
                        }
                    }
                }
            }
        }