using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; namespace HeuristicLab.Visualization { class MarkerShape : IShape { private IShape parent; private RectangleD boundingBox; private Color color; private int thickness; private int width; private DrawingStyle drawingStyle; private Pen pen; /// /// Initializes the Marker. /// /// x coordinate of left dataPoint /// y coordinate of left dataPoint /// width of the whole marker /// color for the marker public MarkerShape(double x, double y, int width, Color color) { this.boundingBox = new RectangleD(x , y , x, y ); this.width = width; this.LSColor = color; } public RectangleD BoundingBox { get { return boundingBox; } set { boundingBox = value; } } public RectangleD ClippingArea { get { return Parent.ClippingArea; } } public Rectangle Viewport { get { return Parent.Viewport; } } public IShape Parent { get { return parent; } set { parent = value; } } public double Y { get { return boundingBox.Y1; } set { boundingBox.Y1 = value ; boundingBox.Y2 = value ; } } public double X { get { return (boundingBox.X1+boundingBox.X2)/2; } set { boundingBox.X1 = value; boundingBox.X2 = value; } } /// /// Draws the LineShape. /// /// graphics handle to draw to public virtual void Draw(Graphics graphics) { Rectangle screenRect = Transform.ToScreen(boundingBox, Parent.Viewport, Parent.ClippingArea); graphics.DrawEllipse(GetPen(),screenRect.Left-2, screenRect.Top-2,4,4); } private Pen GetPen() { if (pen == null) { pen = new Pen(Color.Black, 3); switch (LSDrawingStyle) { case DrawingStyle.Dashed: pen.DashStyle = DashStyle.Dash; break; default: pen.DashStyle = DashStyle.Solid; break; } } return pen; } private void DisposePen() { if (pen != null) { pen.Dispose(); pen = null; } } public Color LSColor { get { return color; } set { color = value; DisposePen(); } } public DrawingStyle LSDrawingStyle { get { return drawingStyle; } set { drawingStyle = value; DisposePen(); } } } }