public BrokenLine(List <Point> points, Brush brush, double thickness, BrokenLineCapType brokenLineCapType, String name) { Points = points; Brush = brush; Thickness = thickness; //BrokenLineCapType = brokenLineCapType; Name = name; }
public BrokenLine(List <Point> points, Brush brush, double thickness, BrokenLineCapType brokenLineCapType) : this(points, brush, 1, BrokenLineCapType.None, "") { }
/// <summary> /// 绘制线帽 /// </summary> private void DrawLineCap(DrawingContext dc, Brush brush, Point p, BrokenLineCapType type) { switch (type) { case BrokenLineCapType.None: break; case BrokenLineCapType.Circle: dc.DrawEllipse(brush, new Pen(brush, 1), new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX, canvas.ActualHeight - p.Y * canvas.ActualHeight / ScaleRatioAxisY), 1.5, 1.5); break; case BrokenLineCapType.RectangleH: dc.DrawRectangle(brush, new Pen(brush, 1), new Rect(p.X * canvas.ActualWidth * ScaleRatioAxisX - 2, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 1, 4, 2)); break; case BrokenLineCapType.RectangleV: dc.DrawRectangle(brush, new Pen(brush, 1), new Rect(p.X * canvas.ActualWidth * ScaleRatioAxisX - 1, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 2, 2, 4)); break; case BrokenLineCapType.Square: dc.DrawRectangle(brush, new Pen(brush, 1), new Rect(p.X * canvas.ActualWidth * ScaleRatioAxisX - 1.5, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 1.5, 3, 3)); break; case BrokenLineCapType.Triangle: dc.DrawGeometry(brush, new Pen(brush, 1), new PathGeometry() { Figures = new PathFigureCollection() { new PathFigure() { Segments = new PathSegmentCollection { new PolyLineSegment { Points = new PointCollection(new Point[2] { new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX + 1.5, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 1.5), new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY + 2) }) }, }, IsFilled = true, IsClosed = true, StartPoint = new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX - 1.5, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 1.5) } } }); break; case BrokenLineCapType.TriangleR: dc.DrawGeometry(brush, new Pen(brush, 1), new PathGeometry() { Figures = new PathFigureCollection() { new PathFigure() { Segments = new PathSegmentCollection { new PolyLineSegment { Points = new PointCollection(new Point[2] { new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX + 1.5, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY + 1.5), new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 2) }) }, }, IsFilled = true, IsClosed = true, StartPoint = new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX - 1.5, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY + 1.5) } } }); break; case BrokenLineCapType.Diamond: dc.DrawGeometry(brush, new Pen(brush, 1), new PathGeometry() { Figures = new PathFigureCollection() { new PathFigure() { Segments = new PathSegmentCollection { new PolyLineSegment { Points = new PointCollection(new Point[3] { new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY - 1.7), new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX + 1.7, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY), new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY + 1.7) }) }, }, IsFilled = true, IsClosed = true, StartPoint = new Point(p.X * canvas.ActualWidth * ScaleRatioAxisX - 1.7, canvas.ActualHeight - (p.Y * canvas.ActualHeight) / ScaleRatioAxisY) } } }); break; } }