Пример #1
0
 public BrokenLine(List <Point> points, Brush brush, double thickness, BrokenLineCapType brokenLineCapType, String name)
 {
     Points    = points;
     Brush     = brush;
     Thickness = thickness;
     //BrokenLineCapType = brokenLineCapType;
     Name = name;
 }
Пример #2
0
 public BrokenLine(List <Point> points, Brush brush, double thickness, BrokenLineCapType brokenLineCapType) : this(points, brush, 1, BrokenLineCapType.None, "")
 {
 }
Пример #3
0
        /// <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;
            }
        }