public static CanvasPosition CanvasFromPlotter(Geometry.Position point, double zoomScale, CanvasPosition origin)
 {
     return new CanvasPosition
     {
         X = (point.X * zoomScale) + origin.X,
         Y = origin.Y - (point.Y * zoomScale)
     };
 }
 public static Geometry.Position PlotterFromCanvas(CanvasPosition point, double zoomScale, CanvasPosition origin)
 {
     return new Geometry.Position
     {
         X = (point.X - origin.X) / zoomScale,
         Y = (origin.Y - point.Y) / zoomScale
     };
 }
 public void DrawCircle(CanvasPosition centre, double radius, Color colour)
 {
     var circle = new Ellipse();
     circle.Height = 2 * radius;
     circle.Width = 2 * radius;
     circle.Stroke = new SolidColorBrush(colour);
     circle.Fill = new SolidColorBrush(colour);
     Canvas.SetLeft(circle, centre.X - radius);
     Canvas.SetTop(circle, centre.Y - radius);
     DrawObject(circle);
 }
 private void DrawText(string text, CanvasPosition p, HorizontalAlignment align, string font, int size)
 {
     var label = new Label();
     label.FontSize = size;
     label.FontFamily = new FontFamily(font);
     label.Content = text;
     label.HorizontalAlignment = align;
     Canvas.SetLeft(label, p.X);
     Canvas.SetTop(label, p.Y);
     DrawObject(label);
 }
 public void DrawEndAlignedText(string text, CanvasPosition p, string font, int size)
 {
     DrawText(text, p, HorizontalAlignment.Right, font, size);
 }
 public void DrawCenteredText(string text, CanvasPosition p, string font, int size)
 {
     DrawText(text, p, HorizontalAlignment.Center, font, size);
 }
 public void DrawAlignedCircle(CanvasPosition centre, double radius, Color colour)
 {
     centre.X = AlignedToPixel(centre.X, 2 * radius);
     centre.Y = AlignedToPixel(centre.Y, 2 * radius);
     DrawCircle(centre, radius, colour);
 }
        public void DrawCross(CanvasPosition position, double crossSize, double lineWidth, Color colour)
        {
            var leftX = position.X - crossSize;
            var rightX = position.X + crossSize;

            var topY = position.Y - crossSize;
            var bottomY = position.Y + crossSize;

            DrawLine(
                new CanvasPosition { X = leftX, Y = topY },
                new CanvasPosition { X = rightX, Y = bottomY },
                lineWidth, colour);

            DrawLine(
                new CanvasPosition { X = leftX, Y = bottomY },
                new CanvasPosition { X = rightX, Y = topY },
                lineWidth, colour);
        }
 public void DrawAlignedCircle(CanvasPosition centre, double radius, Color colour)
 {
     DrawCircle(centre, radius, colour);
 }
 private Geometry.Position PicturePosFromCanvasPos(CanvasPosition pos)
 {
     return PointConversions.PlotterFromCanvas(pos, ZoomScale(), _origin.Point);
 }
        private void FocusPosition(CanvasPosition canvas_pos, Geometry.Position picture_pos)
        {
            var focus_pos = CanvasPosFromPicturePos(picture_pos);
            var dx = canvas_pos.X - focus_pos.X;
            var dy = canvas_pos.Y - focus_pos.Y;

            _origin.Point = new CanvasPosition
            {
                X = _origin.Point.X + dx,
                Y = _origin.Point.Y + dy
            };
        }
 public void DrawText(string text, CanvasPosition p, string font, int size)
 {
     _gl.DrawText((int)p.X, (int)(Height() - p.Y), 0, 0, 0, font, size, text);
 }
        public void DrawCircle(CanvasPosition centre, double radius, Color colour)
        {
            _gl.Color(colour.R, colour.G, colour.B, colour.A); 
            _gl.PointSize((float)radius*2);

            _gl.Begin(OpenGL.GL_POINTS);
            _gl.Vertex(GLPosition(centre));
            _gl.End();
        }
 private float[] GLPosition(CanvasPosition p)
 {
     return new float[] { GLx(p.X), GLy(p.Y) };
 }
 public void DrawEndAlignedText(string text, CanvasPosition p, string font, int size)
 {
     DrawText(text, p, font, size);
 }
        public void DrawLine(CanvasPosition start, CanvasPosition end, double lineWidth, Color colour)
        {
            var line = new Line();
            line.StrokeThickness = lineWidth;
            line.Stroke = new SolidColorBrush(colour);
            line.X1 = start.X;
            line.Y1 = start.Y;
            line.X2 = end.X;
            line.Y2 = end.Y;

            DrawObject(line);
        }
        public void DrawLine(CanvasPosition start, CanvasPosition end, double lineWidth, Color colour)
        {
            _gl.Color(colour.R, colour.G, colour.B, colour.A); 
            _gl.LineWidth((float)lineWidth);

            _gl.Begin(OpenGL.GL_LINES);
              _gl.Vertex(GLPosition(start));
              _gl.Vertex(GLPosition(end));
            _gl.End();
        }