示例#1
0
        public void DrawEllipse(Rect frame, Pen pen = null, Brush brush = null)
        {
            var ellipse = StaticRenderer.GenerateEllipse((float)frame.Width / 2, (float)frame.Height / 2, 25);
            var center  = Vec2(frame.Center);

            for (int i = 0; i < ellipse.Length; i++)
            {
                ellipse[i] += center;
            }

            if (brush != null)
            {
                if (brush is SolidBrush)
                {
                    var c = (brush as SolidBrush).Color;
                    GL.Color4(c.R, c.G, c.B, c.A);
                }
                GL.Begin(PrimitiveType.Polygon);
                foreach (var v in ellipse)
                {
                    GL.Vertex2(v);
                }
                GL.End();
            }
            if (pen != null)
            {
                StaticRenderer.DrawConnectedLines(ellipse, System.Drawing.Color.FromArgb(pen.Color.Argb), (float)pen.Width);
            }
        }
示例#2
0
        private List <int> DrawGWell(StandardLine line)
        {
            List <int> ret = new List <int>();
            var        p1  = (Vector2)line.Position;
            var        p2  = (Vector2)line.Position2;

            Vector2[] vecs  = new Vector2[4];
            var       angle = Tools.Angle.FromLine(p1, p2);

            angle.Radians += 1.5708f;             //90 degrees as const, radians so no conversion between degrees for a radians only calculation
            var t = StaticRenderer.CalculateLine(Vector2.Zero, angle, line.inv ? -StandardLine.Zone : StandardLine.Zone);

            vecs[0] = p1 + t;
            vecs[1] = p2 + t;
            vecs[2] = p2;
            vecs[3] = p1;
            var c  = Color.FromArgb(40, 0, 0, 0);
            int v1 = AddVertex(new Vertex(vecs[0].X, vecs[0].Y, c));
            int v2 = AddVertex(new Vertex(vecs[1].X, vecs[1].Y, c));
            int v3 = AddVertex(new Vertex(vecs[2].X, vecs[2].Y, c));
            int v4 = AddVertex(new Vertex(vecs[3].X, vecs[3].Y, c));

            ret.Add(v1);
            ret.Add(v2);
            ret.Add(v3);

            ret.Add(v1);
            ret.Add(v4);
            ret.Add(v3);
            return(ret);
        }
示例#3
0
        private List <int> DrawThickLine(Vector2 p, Vector2 p1, float width, Color c)
        {
            List <int> ret  = new List <int>(6);
            var        vecs = StaticRenderer.GenerateThickLine(p, p1, width);
            int        v1   = AddVertex(new Vertex(vecs[0].X, vecs[0].Y, c));
            int        v2   = AddVertex(new Vertex(vecs[1].X, vecs[1].Y, c));
            int        v3   = AddVertex(new Vertex(vecs[2].X, vecs[2].Y, c));
            int        v4   = AddVertex(new Vertex(vecs[3].X, vecs[3].Y, c));

            ret.Add(v1);
            ret.Add(v2);
            ret.Add(v3);

            ret.Add(v1);
            ret.Add(v4);
            ret.Add(v3);
            return(ret);
        }
示例#4
0
        public static List <Vertex> GenRoundedLine(Vector2d position, Vector2d position2, Color color, float thickness, bool knobs = false, bool redknobs = false)
        {
            List <Vertex> vertices = new List <Vertex>(6 * 5);
            var           end1     = (position + Game.ScreenTranslation) * Game.Track.Zoom;
            var           end2     = (position2 + Game.ScreenTranslation) * Game.Track.Zoom;
            var           line     = StaticRenderer.GenerateThickLine((Vector2)end1, (Vector2)end2, thickness * Game.Track.Zoom);

            vertices.Add(new Vertex(line[0], color));
            vertices.Add(new Vertex(line[1], color));
            vertices.Add(new Vertex(line[2], color));
            vertices.Add(new Vertex(line[0], color));
            vertices.Add(new Vertex(line[3], color));
            vertices.Add(new Vertex(line[2], color));
            vertices.AddRange(StaticRenderer.FastCircle((Vector2)(end1), Game.Track.Zoom * (thickness / 2), color));
            vertices.AddRange(StaticRenderer.FastCircle((Vector2)(end2), Game.Track.Zoom * (thickness / 2), color));
            if (knobs)
            {
                vertices.AddRange(StaticRenderer.FastCircle((Vector2)(end1), Game.Track.Zoom * (thickness / 3), redknobs ? Color.Red : Color.White));
                vertices.AddRange(StaticRenderer.FastCircle((Vector2)(end2), Game.Track.Zoom * (thickness / 3), redknobs ? Color.Red : Color.White));
            }
            return(vertices);
        }
示例#5
0
 public void DrawRectangle(Rect frame, Pen pen = null, Brush brush = null)
 {
     brushcheck(brush);
     if (brush != null)
     {
         if (brush is SolidBrush)
         {
             GL.Color4(color((brush as SolidBrush).Color));
         }
         GL.Begin(PrimitiveType.Quads);
         GL.Vertex2(frame.X, frame.Y);
         GL.Vertex2(frame.X + frame.Width, frame.Y);
         GL.Vertex2(frame.X + frame.Width, frame.Y + frame.Height);
         GL.Vertex2(frame.X, frame.Y + frame.Height);
         GL.End();
     }
     if (pen != null)
     {
         StaticRenderer.RenderLine(new Vector2d(frame.X, frame.Y), new Vector2d(frame.X + frame.Width, frame.Y), System.Drawing.Color.FromArgb(pen.Color.Argb), (float)pen.Width);
         StaticRenderer.RenderLine(new Vector2d(frame.X + frame.Width, frame.Y), new Vector2d(frame.X + frame.Width, frame.Y + frame.Height), System.Drawing.Color.FromArgb(pen.Color.Argb), (float)pen.Width);
         StaticRenderer.RenderLine(new Vector2d(frame.X + frame.Width, frame.Y + frame.Height), new Vector2d(frame.X, frame.Y + frame.Height), System.Drawing.Color.FromArgb(pen.Color.Argb), (float)pen.Width);
         StaticRenderer.RenderLine(new Vector2d(frame.X, frame.Y + frame.Height), new Vector2d(frame.X, frame.Y), System.Drawing.Color.FromArgb(pen.Color.Argb), (float)pen.Width);
     }
 }
示例#6
0
        public static void DrawTrackLine(StandardLine l, Color color, bool drawwell, bool drawcolor, bool drawknobs, bool redknobs = false)
        {
            color = Color.FromArgb(255, color);
            var   thickness = 2;
            Color color2;
            var   type = l.GetLineType();

            switch (type)
            {
            case LineType.Blue:
                color2 = Color.FromArgb(0, 0x66, 0xFF);
                break;

            case LineType.Red:
                color2 = Color.FromArgb(0xCC, 0, 0);
                break;

            default:
                throw new Exception("Rendering Invalid Line");
            }
            if (drawcolor)
            {
                var loc3 = l.Perpendicular.X > 0 ? (Math.Ceiling(l.Perpendicular.X)) : (Math.Floor(l.Perpendicular.X));
                var loc4 = l.Perpendicular.Y > 0 ? (Math.Ceiling(l.Perpendicular.Y)) : (Math.Floor(l.Perpendicular.Y));
                if (type == LineType.Red)
                {
                    var redline = l as RedLine;
                    GameDrawingMatrix.Enter();
                    GL.Color3(color2);
                    GL.Begin(PrimitiveType.Triangles);
                    var basepos = l.Position2;
                    for (int ix = 0; ix < redline.Multiplier; ix++)
                    {
                        var    angle = MathHelper.RadiansToDegrees(Math.Atan2(l.diff.Y, l.diff.X));
                        Turtle t     = new Turtle(l.Position2);
                        var    basex = 8 + (ix * 2);
                        t.Move(angle, -basex);
                        GL.Vertex2(new Vector2((float)t.X, (float)t.Y));
                        t.Move(90, l.inv ? -8 : 8);
                        GL.Vertex2(new Vector2((float)t.X, (float)t.Y));
                        t.Point = l.Position2;
                        t.Move(angle, -(ix * 2));
                        GL.Vertex2(new Vector2((float)t.X, (float)t.Y));
                    }
                    GL.End();
                    GameDrawingMatrix.Exit();
                }
                RenderRoundedLine(new Vector2d(l.Position.X + loc3, l.Position.Y + loc4),
                                  new Vector2d(l.Position2.X + loc3, l.Position2.Y + loc4), color2, thickness);
            }
            RenderRoundedLine(l.Position, l.Position2, color, thickness, drawknobs, redknobs);
            if (drawwell)
            {
                using (new GLEnableCap(EnableCap.Blend))
                {
                    GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
                    GameDrawingMatrix.Enter();
                    GL.Begin(PrimitiveType.Quads);
                    GL.Color4(new Color4(150, 150, 150, 150));
                    var rect = StaticRenderer.GenerateThickLine((Vector2)l.Position, (Vector2)l.Position2, (float)(StandardLine.Zone * 2));

                    GL.Vertex2(l.Position);
                    GL.Vertex2(l.Position2);
                    GL.Vertex2(rect[l.inv ? 2 : 1]);
                    GL.Vertex2(rect[l.inv ? 3 : 0]);
                    GL.End();
                    GL.PopMatrix();
                }
            }
        }