コード例 #1
0
        protected virtual void GetTopSurfaceVisibility(ChartArea area, DataPoint3D firstPoint, DataPoint3D secondPoint, bool upSideDown, float positionZ, float depth, Matrix3D matrix, ref SurfaceNames visibleSurfaces)
        {
            if ((visibleSurfaces & SurfaceNames.Top) == SurfaceNames.Top)
            {
                visibleSurfaces ^= SurfaceNames.Top;
            }
            Point3D[] array = new Point3D[3];
            if (!area.reverseSeriesOrder)
            {
                if (!upSideDown && firstPoint.xPosition <= secondPoint.xPosition)
                {
                    goto IL_0048;
                }
                if (upSideDown && firstPoint.xPosition >= secondPoint.xPosition)
                {
                    goto IL_0048;
                }
                array[0] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ + depth);
                array[1] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
                array[2] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
            }
            else
            {
                if (!upSideDown && secondPoint.xPosition <= firstPoint.xPosition)
                {
                    goto IL_010c;
                }
                if (upSideDown && secondPoint.xPosition >= firstPoint.xPosition)
                {
                    goto IL_010c;
                }
                array[0] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ + depth);
                array[1] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
                array[2] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
            }
            goto IL_01a4;
IL_010c:
            array[0] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ + depth);
            array[1] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
            array[2] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
            goto IL_01a4;
IL_01a4:
            matrix.TransformPoints(array);
            if (ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]))
            {
                visibleSurfaces |= SurfaceNames.Top;
            }
            return;

IL_0048:
            array[0] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ + depth);
            array[1] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
            array[2] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
            goto IL_01a4;
        }
コード例 #2
0
 private void CheckSurfaceOrientation(COPCoordinates coord, Point3D point1, Point3D point2, out bool xSameOrientation, out bool ySameOrientation, out bool zSameOrientation)
 {
     Point3D[] array = new Point3D[3];
     xSameOrientation = true;
     ySameOrientation = true;
     zSameOrientation = true;
     if ((coord & COPCoordinates.X) == COPCoordinates.X)
     {
         array[0] = new Point3D(point1.X, base.PlotAreaPosition.Y, 0f);
         array[1] = new Point3D(point1.X, base.PlotAreaPosition.Bottom(), 0f);
         array[2] = new Point3D(point1.X, base.PlotAreaPosition.Bottom(), this.areaSceneDepth);
         this.matrix3D.TransformPoints(array);
         bool flag = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
         array[0] = new Point3D(point2.X, base.PlotAreaPosition.Y, 0f);
         array[1] = new Point3D(point2.X, base.PlotAreaPosition.Bottom(), 0f);
         array[2] = new Point3D(point2.X, base.PlotAreaPosition.Bottom(), this.areaSceneDepth);
         this.matrix3D.TransformPoints(array);
         bool flag2 = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
         xSameOrientation = (flag == flag2);
     }
     if ((coord & COPCoordinates.Y) == COPCoordinates.Y)
     {
         array[0] = new Point3D(base.PlotAreaPosition.X, point1.Y, this.areaSceneDepth);
         array[1] = new Point3D(base.PlotAreaPosition.X, point1.Y, 0f);
         array[2] = new Point3D(base.PlotAreaPosition.Right(), point1.Y, 0f);
         this.matrix3D.TransformPoints(array);
         bool flag = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
         array[0] = new Point3D(base.PlotAreaPosition.X, point2.Y, this.areaSceneDepth);
         array[1] = new Point3D(base.PlotAreaPosition.X, point2.Y, 0f);
         array[2] = new Point3D(base.PlotAreaPosition.Right(), point2.Y, 0f);
         this.matrix3D.TransformPoints(array);
         bool flag2 = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
         ySameOrientation = (flag == flag2);
     }
     if ((coord & COPCoordinates.Z) == COPCoordinates.Z)
     {
         array[0] = new Point3D(base.PlotAreaPosition.X, base.PlotAreaPosition.Y, point1.Z);
         array[1] = new Point3D(base.PlotAreaPosition.X, base.PlotAreaPosition.Bottom(), point1.Z);
         array[2] = new Point3D(base.PlotAreaPosition.Right(), base.PlotAreaPosition.Bottom(), point1.Z);
         this.matrix3D.TransformPoints(array);
         bool flag = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
         array[0] = new Point3D(base.PlotAreaPosition.X, base.PlotAreaPosition.Y, point2.Z);
         array[1] = new Point3D(base.PlotAreaPosition.X, base.PlotAreaPosition.Bottom(), point2.Z);
         array[2] = new Point3D(base.PlotAreaPosition.Right(), base.PlotAreaPosition.Bottom(), point2.Z);
         this.matrix3D.TransformPoints(array);
         bool flag2 = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
         zSameOrientation = (flag == flag2);
     }
 }
コード例 #3
0
        internal GraphicsPath Draw3DSplinePolygon(ChartGraphics graph, ChartArea area, float positionZ, Color backColor, Color borderColor, int borderWidth, ChartDashStyle borderStyle, DataPoint3D firstPoint, DataPoint3D secondPoint, DataPoint3D thirdPoint, DataPoint3D fourthPoint, ArrayList points, int pointIndex, float tension, DrawingOperationTypes operationType, LineSegmentType lineSegmentType, bool forceThinBorder)
        {
            if (tension == 0f)
            {
                SurfaceNames thinBorders = (SurfaceNames)0;
                if (forceThinBorder)
                {
                    thinBorders = (SurfaceNames.Left | SurfaceNames.Right);
                }
                return(graph.Draw3DPolygon(area, area.matrix3D, area.Area3DStyle.Light, SurfaceNames.Front, positionZ, backColor, borderColor, borderWidth, borderStyle, firstPoint, secondPoint, thirdPoint, fourthPoint, points, pointIndex, tension, operationType, lineSegmentType, thinBorders));
            }
            bool         num                = (operationType & DrawingOperationTypes.DrawElement) == DrawingOperationTypes.DrawElement;
            GraphicsPath graphicsPath       = new GraphicsPath();
            GraphicsPath splineFlattenPath  = graph.GetSplineFlattenPath(area, area.matrix3D, positionZ, 0f, firstPoint, secondPoint, points, pointIndex, tension, flatten: false, translateCoordinates: true, 0);
            GraphicsPath splineFlattenPath2 = graph.GetSplineFlattenPath(area, area.matrix3D, positionZ, 0f, thirdPoint, fourthPoint, points, pointIndex, tension, flatten: false, translateCoordinates: true, 1);

            graphicsPath.AddPath(splineFlattenPath, connect: true);
            graphicsPath.AddPath(splineFlattenPath2, connect: true);
            graphicsPath.CloseAllFigures();
            Point3D[] array = new Point3D[3]
            {
                new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ),
                new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ),
                new Point3D((float)thirdPoint.xPosition, (float)thirdPoint.yPosition, positionZ)
            };
            area.matrix3D.TransformPoints(array);
            bool  visiblePolygon = ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]);
            Color polygonLight   = area.matrix3D.GetPolygonLight(array, backColor, visiblePolygon, area.Area3DStyle.YAngle, SurfaceNames.Front, area.reverseSeriesOrder);
            Color color          = borderColor;

            if (color == Color.Empty)
            {
                color = ChartGraphics.GetGradientColor(backColor, Color.Black, 0.2);
            }
            Pen pen = null;

            if (num)
            {
                SmoothingMode smoothingMode = graph.SmoothingMode;
                graph.SmoothingMode = SmoothingMode.Default;
                graph.FillPath(new SolidBrush(polygonLight), graphicsPath);
                graph.SmoothingMode = smoothingMode;
                if (forceThinBorder)
                {
                    graph.DrawPath(new Pen(color, 1f), graphicsPath);
                }
                else if (polygonLight.A == byte.MaxValue)
                {
                    graph.DrawPath(new Pen(polygonLight, 1f), graphicsPath);
                }
                pen          = new Pen(color, borderWidth);
                pen.StartCap = LineCap.Round;
                pen.EndCap   = LineCap.Round;
                graph.DrawPath(pen, splineFlattenPath);
                graph.DrawPath(pen, splineFlattenPath2);
                switch (lineSegmentType)
                {
                case LineSegmentType.First:
                    graph.DrawLine(pen, splineFlattenPath.PathPoints[0], splineFlattenPath2.GetLastPoint());
                    break;

                case LineSegmentType.Last:
                    graph.DrawLine(pen, splineFlattenPath.GetLastPoint(), splineFlattenPath2.PathPoints[0]);
                    break;
                }
            }
            if (graphicsPath != null && pen != null)
            {
                ChartGraphics.Widen(graphicsPath, pen);
            }
            return(graphicsPath);
        }
コード例 #4
0
 protected virtual void GetTopSurfaceVisibility(ChartArea area, DataPoint3D firstPoint, DataPoint3D secondPoint, bool upSideDown, float positionZ, float depth, Matrix3D matrix, ref SurfaceNames visibleSurfaces)
 {
     if ((visibleSurfaces & SurfaceNames.Top) == SurfaceNames.Top)
     {
         visibleSurfaces ^= SurfaceNames.Top;
     }
     Point3D[] array = new Point3D[3];
     if (!area.reverseSeriesOrder)
     {
         if ((!upSideDown && firstPoint.xPosition < secondPoint.xPosition) || (upSideDown && firstPoint.xPosition > secondPoint.xPosition))
         {
             array[0] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ + depth);
             array[1] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
             array[2] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
         }
         else
         {
             array[0] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ + depth);
             array[1] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
             array[2] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
         }
     }
     else if ((!upSideDown && secondPoint.xPosition < firstPoint.xPosition) || (upSideDown && secondPoint.xPosition > firstPoint.xPosition))
     {
         array[0] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ + depth);
         array[1] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
         array[2] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
     }
     else
     {
         array[0] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ + depth);
         array[1] = new Point3D((float)firstPoint.xPosition, (float)firstPoint.yPosition, positionZ);
         array[2] = new Point3D((float)secondPoint.xPosition, (float)secondPoint.yPosition, positionZ);
     }
     matrix.TransformPoints(array);
     if (ChartGraphics3D.IsSurfaceVisible(array[0], array[1], array[2]))
     {
         visibleSurfaces |= SurfaceNames.Top;
     }
     GetBottomPointsPosition(area.Common, area, 0f, ref firstPoint, ref secondPoint, out PointF thirdPoint, out PointF fourthPoint);
     if ((visibleSurfaces & SurfaceNames.Bottom) == SurfaceNames.Bottom)
     {
         visibleSurfaces ^= SurfaceNames.Bottom;
     }
     array = new Point3D[3];
     if (!area.reverseSeriesOrder)
     {
         if ((!upSideDown && firstPoint.xPosition < secondPoint.xPosition) || (upSideDown && firstPoint.xPosition > secondPoint.xPosition))
         {
             array[0] = new Point3D((float)firstPoint.xPosition, thirdPoint.Y, positionZ + depth);
             array[1] = new Point3D((float)firstPoint.xPosition, thirdPoint.Y, positionZ);
             array[2] = new Point3D((float)secondPoint.xPosition, fourthPoint.Y, positionZ);
         }
         else
         {
             array[0] = new Point3D((float)secondPoint.xPosition, fourthPoint.Y, positionZ + depth);
             array[1] = new Point3D((float)secondPoint.xPosition, fourthPoint.Y, positionZ);
             array[2] = new Point3D((float)firstPoint.xPosition, thirdPoint.Y, positionZ);
         }
     }
     else if ((!upSideDown && secondPoint.xPosition < firstPoint.xPosition) || (upSideDown && secondPoint.xPosition > firstPoint.xPosition))
     {
         array[0] = new Point3D((float)secondPoint.xPosition, fourthPoint.Y, positionZ + depth);
         array[1] = new Point3D((float)secondPoint.xPosition, fourthPoint.Y, positionZ);
         array[2] = new Point3D((float)firstPoint.xPosition, thirdPoint.Y, positionZ);
     }
     else
     {
         array[0] = new Point3D((float)firstPoint.xPosition, thirdPoint.Y, positionZ + depth);
         array[1] = new Point3D((float)firstPoint.xPosition, thirdPoint.Y, positionZ);
         array[2] = new Point3D((float)secondPoint.xPosition, fourthPoint.Y, positionZ);
     }
     matrix.TransformPoints(array);
     if (ChartGraphics3D.IsSurfaceVisible(array[2], array[1], array[0]))
     {
         visibleSurfaces |= SurfaceNames.Bottom;
     }
 }