private void Render2D(Viewport2D viewport) { var pp = viewport.Flatten(_pivotPoint); GL.Begin(PrimitiveType.Lines); GL.Color3(Color.Cyan); GLX.Circle(new Vector2d(pp.DX, pp.DY), 4, (double)viewport.Zoom); GL.Color3(Color.White); GLX.Circle(new Vector2d(pp.DX, pp.DY), 8, (double)viewport.Zoom); GL.End(); }
public override void Render2D(Viewport2D viewport) { var pos = viewport.Flatten(_origin.Coordinate); GL.Color3(Color.Cyan); GL.Begin(PrimitiveType.Lines); GLX.Circle(new Vector2d(pos.DX, pos.DY), 8, (double)viewport.Zoom); GL.End(); GL.Begin(PrimitiveType.Points); GL.Vertex2(pos.DX, pos.DY); GL.End(); }
/// <summary> /// Render all the handles as squares or circles depending on class implementation /// </summary> /// <param name="viewport">The viewport to draw in</param> /// <param name="start">The start of the box</param> /// <param name="end">The end of the box</param> private void RenderHandles(Viewport2D viewport, Coordinate start, Coordinate end) { if (_currentTool == null) { return; } var circles = _currentTool.RenderCircleHandles; // Get the filtered list of handles, and convert them to vector locations var z = (double)viewport.Zoom; var handles = _currentTool.GetHandles(start, end, viewport.Zoom) .Where(x => _currentTool.FilterHandle(x.Item1)) .Select(x => new Vector2d((double)x.Item2, (double)x.Item3)) .ToList(); // Draw the insides of the handles in white GL.Color3(Color.White); foreach (var handle in handles) { GL.Begin(BeginMode.Polygon); if (circles) { GLX.Circle(handle, 4, z, loop: true); } else { GLX.Square(handle, 4, z, true); } GL.End(); } // Draw the borders of the handles in black GL.Color3(Color.Black); GL.Begin(BeginMode.Lines); foreach (var handle in handles) { if (circles) { GLX.Circle(handle, 4, z); } else { GLX.Square(handle, 4, z); } } GL.End(); }
public override void Render(ViewportBase viewport) { var vp = viewport as Viewport2D; if (vp == null) { return; } var cams = GetCameras().ToList(); if (!cams.Any()) { return; } var z = (double)vp.Zoom; GL.Enable(EnableCap.LineSmooth); GL.Hint(HintTarget.LineSmoothHint, HintMode.Nicest); // Draw lines between points and point outlines GL.Begin(BeginMode.Lines); foreach (var camera in cams) { var p1 = vp.Flatten(camera.EyePosition); var p2 = vp.Flatten(camera.LookPosition); GL.Color3(camera == Document.Map.ActiveCamera ? Color.Red : Color.Cyan); GL.Vertex2(p1.DX, p1.DY); GL.Vertex2(p2.DX, p2.DY); GL.Vertex2(p2.DX, p2.DY); GL.Vertex2(p1.DX, p1.DY); } GL.End(); GL.Enable(EnableCap.PolygonSmooth); GL.Hint(HintTarget.PolygonSmoothHint, HintMode.Nicest); foreach (var camera in cams) { var p1 = vp.Flatten(camera.EyePosition); // Position circle GL.Begin(BeginMode.Polygon); GL.Color3(camera == Document.Map.ActiveCamera ? Color.DarkOrange : Color.LawnGreen); GLX.Circle(new Vector2d(p1.DX, p1.DY), 4, z, loop: true); GL.End(); } foreach (var camera in cams) { var p1 = vp.Flatten(camera.EyePosition); var p2 = vp.Flatten(camera.LookPosition); var multiplier = 4 / vp.Zoom; var dir = (p2 - p1).Normalise(); var cp = new Coordinate(-dir.Y, dir.X, 0).Normalise(); // Direction Triangle GL.Begin(BeginMode.Triangles); GL.Color3(camera == Document.Map.ActiveCamera ? Color.Red : Color.Cyan); Coord(p2 - (dir - cp) * multiplier); Coord(p2 - (dir + cp) * multiplier); Coord(p2 + dir * 1.5m * multiplier); GL.End(); } GL.Disable(EnableCap.PolygonSmooth); GL.Begin(BeginMode.Lines); foreach (var camera in cams) { var p1 = vp.Flatten(camera.EyePosition); var p2 = vp.Flatten(camera.LookPosition); var multiplier = 4 / vp.Zoom; var dir = (p2 - p1).Normalise(); var cp = new Coordinate(-dir.Y, dir.X, 0).Normalise(); GL.Color3(Color.Black); GLX.Circle(new Vector2d(p1.DX, p1.DY), 4, z); Coord(p2 + dir * 1.5m * multiplier); Coord(p2 - (dir + cp) * multiplier); Coord(p2 - (dir + cp) * multiplier); Coord(p2 - (dir - cp) * multiplier); Coord(p2 - (dir - cp) * multiplier); Coord(p2 + dir * 1.5m * multiplier); } GL.End(); GL.Disable(EnableCap.LineSmooth); }