WPF c#用直线或替代方法绘制粗曲线

时间:2014-08-29 19:41:00

标签: c# wpf canvas curve

我目前正在画布上绘制XY数据并用它绘制曲线。到目前为止,它很简单并适用于细线,但是当我增加厚度时,由于线条被绘制成曲线的方式而产生一种特殊效果。

我附加了一个示例图像,该图像显示了一条很好的平滑线,当线很细时它可以正常工作。但是当线条较粗时,您可以明显看出问题。

  1. 有没有办法连接这些端点以形成一条漂亮的流畅线?

  2. 如果没有,是否有另一个绘图工具可用于创建一个好的线?

  3. 我对这个实现并不满意,因为画布很快就会被画布上数百甚至数千个线对象弄得乱七八糟。这似乎是一种可怕的方式,但我还没有找到更好的方法。我更愿意选择另一条创建单曲线对象的路线。

    任何帮助都会一如既往地受到赞赏。

    谢谢!

        Point previousPoint;
    
        public void DrawLineToBox(DrawLineAction theDrawAction, Point drawPoint)
        {
            Line myLine = new Line();
    
            myLine.Stroke = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            myLine.StrokeThickness = 29;
    
            if(theDrawAction == DrawLineAction.KeepDrawing)
            {
                myLine.X1 = previousPoint.X;        //draw from this point
                myLine.Y1 = previousPoint.Y;
            }
            else if(theDrawAction == DrawLineAction.StartDrawing)
            {
                myLine.X1 = drawPoint.X;            //draw from same point
                myLine.Y1 = drawPoint.Y;
            }
    
            myLine.X2 = drawPoint.X;                //draw to this point
            myLine.Y2 = drawPoint.Y;
    
            canvasToDrawOn.Children.Add(myLine);    //add to canvas
    
            previousPoint.X = drawPoint.X;          //set current point as last point
            previousPoint.Y = drawPoint.Y;
    
    
        }
    

    enter image description here

1 个答案:

答案 0 :(得分:3)

尝试添加以下两行:

myLine.StrokeStartLineCap = PenLineCap.Round;
myLine.StrokeEndLineCap = PenLineCap.Round;

此外,您确实应该使用Polylne或Path对象来执行您当前正在执行的操作。就个人而言,我总是将StrokeStartLineCap和StrokeEndLineCap设置为PenLineCap.Round,将StrokeLineJoin设置为PenLineJoin.Round,用于我使用的Polyline对象。