gyg_123 2020-09-10 10:36 采纳率: 0%
浏览 919

WPF 绘制带箭头的直线和虚线

namespace InkCanvas
{
public class BaseStroke : Stroke
{
public BaseStroke(StylusPointCollection stylusPoints, DrawingAttributes drawingAttributes)
: base(stylusPoints, drawingAttributes)
{

    }

    protected override void DrawCore(DrawingContext drawingContext,
            DrawingAttributes drawingAttributes)
    {
        //创建画笔对象
        Pen pen = new Pen(new SolidColorBrush(drawingAttributes.Color), drawingAttributes.Width);
        //设置画笔线型
        DashStyle dashStyle = new DashStyle();
        dashStyle.Offset = 0;
        dashStyle.Dashes = new DoubleCollection();
        dashStyle.Dashes.Add(1);
        dashStyle.Dashes.Add(2);
        pen.StartLineCap = PenLineCap.Triangle;
        if (DashStyle == 0)
        {

        }
        else
        {
            pen.DashStyle = dashStyle;
        }
        // 长方形
        if (DrawType == 6)
        {
            for (int i = 0; i < StylusPoints.Count - 1; i++)
            {
                    drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
            }
        }
        // 圆
        else if (DrawType == 7)
        {
            for (int i = 0; i < StylusPoints.Count - 1; i++)
            {
                if (DashStyle == 0)
                {
                    drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
                }
                else
                {
                    drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
                    i = i + 2;
                }
            }
        }
        // 椭圆
        else if (DrawType == 8)
        {
            for (int i = 0; i < StylusPoints.Count - 1; i++)
            {
                if (DashStyle == 0)
                {
                    drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
                }
                else
                {
                    drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
                    i = i + 2;  
                }
            }

        }
        //直线
        else if (DrawType == 9)
        {
            Point point = new Point(StylusPoints[0].X, StylusPoints[0].Y);
            Point point2 = new Point(StylusPoints[1].X, StylusPoints[1].Y);
            double num = Math.Atan((StylusPoints[1].Y - StylusPoints[0].Y) / (StylusPoints[1].X - StylusPoints[0].X));
            double d = num + this.ArrowAngle;
            double num3 = num - this.ArrowAngle;
            int num4 = (StylusPoints[1].X > StylusPoints[0].X) ? -1 : 1;
            double x = StylusPoints[1].X + ((num4 * this.ArrowLengh) * Math.Cos(d));
            double y = StylusPoints[1].Y + ((num4 * this.ArrowLengh) * Math.Sin(d));
            double num7 = StylusPoints[1].X + ((num4 * this.ArrowLengh) * Math.Cos(num3));
            double num8 = StylusPoints[1].Y + ((num4 * this.ArrowLengh) * Math.Sin(num3));





            Point point3 = new Point(x, y);
            Point point4 = new Point(num7, num8);
            PathGeometry geometry = new PathGeometry();
            PathFigure figure = new PathFigure();
           figure.IsFilled = true;
            figure.StartPoint = point;
             Point[] pointss = new Point[] { point, point2, point3, point4, point2 };       


            PolyLineSegment segment = new PolyLineSegment(pointss, true);
            figure.Segments.Add(segment);
            geometry.Figures.Add(figure);
            geometry.Freeze();







            drawingContext.DrawGeometry(new SolidColorBrush(drawingAttributes.Color),pen, geometry);


        }
    }


}

}

绘制带箭头的虚线时如何让箭头不产生xu'xian

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-10 12:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真