using System.Drawing;
using System.Drawing.Drawing2D;
using HeuristicLab.Visualization.Drawing;
namespace HeuristicLab.Visualization {
public class LineShape : IShape {
private IShape parent;
private RectangleD boundingBox;
private Color color;
private int thickness;
private DrawingStyle drawingStyle;
private Pen pen;
///
/// Initializes the LineShape.
///
/// x coordinate of left lineEndPoind
/// y coordinate of left lineEndPoind
/// x coordinate of right lineEndPoind
/// y coordinate of right lineEndPoind
/// color for the LineShape
/// tickness of the line in pixels
/// drawing style of the line (solid, dashed, dotted,...)
public LineShape(double x1, double y1, double x2, double y2, Color color, int thickness, DrawingStyle drawingStyle) {
this.boundingBox = new RectangleD(x1, y1, x2, y2);
this.LSColor = color;
this.LSThickness = thickness;
this.LSDrawingStyle = drawingStyle;
}
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 Y1 {
get { return boundingBox.Y1; }
set { boundingBox.Y1 = value; }
}
public double Y2 {
get { return boundingBox.Y2; }
set { boundingBox.Y2 = value; }
}
public double X1 {
get { return boundingBox.X1; }
set { boundingBox.X1 = value; }
}
public double X2 {
get { return boundingBox.X2; }
set { 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.DrawLine(GetPen(), screenRect.Left, screenRect.Bottom, screenRect.Right, screenRect.Top);
}
private Pen GetPen() {
if (pen == null) {
pen = new Pen(LSColor, LSThickness);
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 int LSThickness {
get { return thickness; }
set {
thickness = value;
DisposePen();
}
}
public DrawingStyle LSDrawingStyle {
get { return drawingStyle; }
set {
drawingStyle = value;
DisposePen();
}
}
}
}