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, sideBySide: false);
            bool      flag = false;

            foreach (DataPoint3D item in dataPointDrawingOrder)
            {
                DataPoint dataPoint = item.dataPoint;
                Series    series    = dataPoint.series;
                currentStackGroup     = 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 && item.index <= series2.Points.Count && series2.Points[item.index - 1].YValues[0] != 0.0)
                    {
                        flag2 = false;
                        if (series2.Name == series.Name)
                        {
                            num2 = 0f;
                        }
                    }
                    if (series2.Name == series.Name)
                    {
                        flag3 = true;
                    }
                    else if (item.index <= series2.Points.Count && series2.Points[item.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 = GetSeriesStackGroupName(series);
                    bool   flag4 = true;
                    bool   flag5 = false;
                    foreach (string item2 in arrayList)
                    {
                        Series series3 = common.DataManager.Series[item2];
                        if (!(GetSeriesStackGroupName(series3) == seriesStackGroupName))
                        {
                            continue;
                        }
                        if (flag4 && item.index < series3.Points.Count && series3.Points[item.index - 1].YValues[0] != 0.0)
                        {
                            flag4 = false;
                            if (item2 == series.Name)
                            {
                                num2 = 0f;
                            }
                        }
                        if (item2 == series.Name)
                        {
                            flag5 = true;
                        }
                        else if (item.index < series3.Points.Count && series3.Points[item.index - 1].YValues[0] != 0.0)
                        {
                            flag5 = false;
                        }
                    }
                    if (flag5)
                    {
                        num = 0f;
                    }
                }
                double yValue  = GetYValue(common, area, series, item.dataPoint, item.index - 1, 0);
                double yValue2 = yValue - GetYValue(common, area, series, item.dataPoint, item.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)(item.xPosition - item.width / 2.0);
                    empty.Width = (float)item.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)item.xPosition, empty.Top);
                if (dataPoint.Empty)
                {
                    continue;
                }
                double yValue3 = item.indexedSeries ? ((double)item.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()))
                {
                    continue;
                }
                bool flag6 = false;
                if (empty.Right <= area.PlotAreaPosition.X || empty.X >= area.PlotAreaPosition.Right())
                {
                    continue;
                }
                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 < 0f)
                {
                    empty.Width = 0f;
                }
                if (empty.Height != 0f && empty.Width != 0f)
                {
                    DrawingOperationTypes drawingOperationTypes = DrawingOperationTypes.DrawElement;
                    if (common.ProcessModeRegions)
                    {
                        drawingOperationTypes |= DrawingOperationTypes.CalcElementPath;
                    }
                    graph.StartHotRegion(dataPoint);
                    GraphicsPath path = graph.Fill3DRectangle(empty, item.zPosition, item.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, veticalOrientation: true, drawingOperationTypes);
                    graph.StopAnimation();
                    graph.EndHotRegion();
                    if (flag6)
                    {
                        graph.ResetClip();
                    }
                    if (common.ProcessModeRegions && !labels)
                    {
                        common.HotRegionsList.AddHotRegion(path, relativePath: false, graph, dataPoint, series.Name, item.index - 1);
                    }
                    if (dataPoint.ShowLabelAsValue || dataPoint.Label.Length > 0)
                    {
                        flag = true;
                    }
                }
            }
            if (!flag)
            {
                return;
            }
            foreach (DataPoint3D item3 in dataPointDrawingOrder)
            {
                DataPoint dataPoint2 = item3.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       = GetYValue(common, area, series4, item3.dataPoint, item3.index - 1, 0);
                if (num4 > axis3.GetViewMaximum())
                {
                    num4 = axis3.GetViewMaximum();
                }
                if (num4 < axis3.GetViewMinimum())
                {
                    num4 = axis3.GetViewMinimum();
                }
                num4 = axis3.GetLogValue(num4);
                double     yPosition = item3.yPosition;
                double     num5      = num4 - axis3.GetLogValue(GetYValue(common, area, series4, item3.dataPoint, item3.index - 1, -1));
                double     height    = item3.height;
                RectangleF empty2    = RectangleF.Empty;
                try
                {
                    empty2.X     = (float)(item3.xPosition - item3.width / 2.0);
                    empty2.Width = (float)item3.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 = item3.indexedSeries ? ((double)item3.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();
                        DrawLabels3D(common, graph, area, item3, item3.index - 1, series4, empty2);
                        graph.StopAnimation();
                    }
                }
            }
        }