public void Draw(LargeMapViewer2D viewer, Color backColor1, Color backColor2)
            {
                const int ALPHA = 64;
                const double AXISMULT = 1.5d;
                const double AXISWIDTH = 5;

                // Draw Axis
                viewer.DrawLine(Color.Red, AXISWIDTH, this.Position, this.Position + this.Rotation.GetRotatedVector(new MyVector(this.Radius * AXISMULT, 0, 0), true));
                viewer.DrawLine(Color.Green, AXISWIDTH, this.Position, this.Position + this.Rotation.GetRotatedVector(new MyVector(0, this.Radius * AXISMULT, 0), true));
                viewer.DrawLine(Color.Blue, AXISWIDTH, this.Position, this.Position + this.Rotation.GetRotatedVector(new MyVector(0, 0, this.Radius * AXISMULT), true));

                // Draw Polygon
                viewer.FillPolygon(backColor1, backColor2, this.Position, this);

                // Dot Colors
                Color colorRotateX = Color.Red;
                Color colorRotateY = Color.Green;
                Color colorRotateZ = Color.Blue;

                switch (_mouseDown)
                {
                    case MouseDownOnPolygon.Nothing:
                    case MouseDownOnPolygon.Ball:
                        break;

                    case MouseDownOnPolygon.RotateX:
                        colorRotateX = Color.HotPink;
                        break;

                    case MouseDownOnPolygon.RotateY:
                        colorRotateY = Color.Chartreuse;
                        break;

                    case MouseDownOnPolygon.RotateZ:
                        colorRotateZ = Color.LightBlue;
                        break;

                    default:
                        throw new ApplicationException("Unknown MouseDownOnTriangle: " + _mouseDown.ToString());
                }

                colorRotateX = Color.FromArgb(ALPHA, colorRotateX);
                colorRotateY = Color.FromArgb(ALPHA, colorRotateY);
                colorRotateZ = Color.FromArgb(ALPHA, colorRotateZ);
                Color circleColor = Color.FromArgb(ALPHA, Color.Black);

                // Draw Dots
                MyVector point = this.Position + this.RotateHandleX;
                viewer.FillCircle(colorRotateX, point, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, point, DOTRADIUS);
                viewer.DrawString("X", _font, _fontBrush, point, ContentAlignment.MiddleCenter);

                point = this.Position + this.RotateHandleY;
                viewer.FillCircle(colorRotateY, point, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, point, DOTRADIUS);
                viewer.DrawString("Y", _font, _fontBrush, point, ContentAlignment.MiddleCenter);

                point = this.Position + this.RotateHandleZ;
                viewer.FillCircle(colorRotateZ, point, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, point, DOTRADIUS);
                viewer.DrawString("Z", _font, _fontBrush, point, ContentAlignment.MiddleCenter);
            }
            public void Draw(LargeMapViewer2D viewer, Color backColor)
            {
                const double DOTRADIUS = 35;
                const int ALPHA = 64;

                MyVector point1 = this.Position + this.Vertex1;
                MyVector point2 = this.Position + this.Vertex2;
                MyVector point3 = this.Position + this.Vertex3;

                // Draw Triangle
                viewer.FillTriangle(backColor, point1, point2, point3);
                viewer.DrawTriangle(Color.Black, 1, point1, point2, point3);

                // Dot Colors
                Color color1 = point1.Z < -1 ? Color.Black : point1.Z > 1 ? Color.White : Color.MediumPurple;
                Color color2 = point2.Z < -1 ? Color.Black : point2.Z > 1 ? Color.White : Color.MediumPurple;
                Color color3 = point3.Z < -1 ? Color.Black : point3.Z > 1 ? Color.White : Color.MediumPurple;
                Color colorRotate = Color.DarkSeaGreen;

                switch (_mouseDown)
                {
                    case MouseDownOnTriangle.Nothing:
                    case MouseDownOnTriangle.Ball:
                        break;

                    case MouseDownOnTriangle.Point1:
                        color1 = Color.Silver;
                        break;

                    case MouseDownOnTriangle.Point2:
                        color2 = Color.Silver;
                        break;

                    case MouseDownOnTriangle.Point3:
                        color3 = Color.Silver;
                        break;

                    case MouseDownOnTriangle.Rotate:
                        colorRotate = Color.Chartreuse;
                        break;

                    default:
                        throw new ApplicationException("Unknown MouseDownOnTriangle: " + _mouseDown.ToString());
                }

                color1 = Color.FromArgb(ALPHA, color1);
                color2 = Color.FromArgb(ALPHA, color2);
                color3 = Color.FromArgb(ALPHA, color3);
                colorRotate = Color.FromArgb(ALPHA, colorRotate);
                Color circleColor = Color.FromArgb(ALPHA, Color.Black);

                // Draw Dots
                viewer.FillCircle(color1, point1, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, point1, DOTRADIUS);
                viewer.DrawString("1", _font, _fontBrush, point1, ContentAlignment.MiddleCenter);

                viewer.FillCircle(color2, point2, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, point2, DOTRADIUS);
                viewer.DrawString("2", _font, _fontBrush, point2, ContentAlignment.MiddleCenter);

                viewer.FillCircle(color3, point3, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, point3, DOTRADIUS);
                viewer.DrawString("3", _font, _fontBrush, point3, ContentAlignment.MiddleCenter);

                MyVector pointRotate = this.Position + this.Rotation.GetRotatedVector(_rotateHandle, true);

                viewer.FillCircle(colorRotate, pointRotate, DOTRADIUS);
                viewer.DrawCircle(circleColor, .5d, pointRotate, DOTRADIUS);
            }