Cocoa 使用NSBezierPath绘制不同的线宽?

Cocoa 使用NSBezierPath绘制不同的线宽?,cocoa,drawing,vector-graphics,nsbezierpath,pen-tablet,Cocoa,Drawing,Vector Graphics,Nsbezierpath,Pen Tablet,我想创建一个向量对象,它可以用钢笔平板画出来,并且会尊重钢笔的压力信息(通过适当增加/减少线宽)。现在我知道了如何从NSEvent获取压力信息,但是NSBezierPath当然不支持不同的线宽 因此,我试图通过计算曲线末端的垂直线,并将它们与同一条曲线连接起来,来生成一条贝塞尔路径,这是我的直线的轮廓。在我的小测试项目中,它几乎适用于单个曲线段: 但是这有一个大问题:直线在中间只有2个像素(它只应该从32到8)。有人知道我如何调整控制点,使曲线部分的两条线的边缘处于大致相同的距离吗 有人有想

我想创建一个向量对象,它可以用钢笔平板画出来,并且会尊重钢笔的压力信息(通过适当增加/减少线宽)。现在我知道了如何从NSEvent获取压力信息,但是NSBezierPath当然不支持不同的线宽

因此,我试图通过计算曲线末端的垂直线,并将它们与同一条曲线连接起来,来生成一条贝塞尔路径,这是我的直线的轮廓。在我的小测试项目中,它几乎适用于单个曲线段:

但是这有一个大问题:直线在中间只有2个像素(它只应该从32到8)。有人知道我如何调整控制点,使曲线部分的两条线的边缘处于大致相同的距离吗


有人有想法吗?建议?有用的文章?

多亏了别人的建议,我终于拼凑出了一些有用的东西。我已经将更改提交到存储库,但是如果您想查看较旧的代码,可以返回一些修订。我现在做的是:

  • 我使用BezierPathByFlatingPath展平路径。这给了我直线段
  • 然后,我计算每个线段起点和终点处垂直线的起点和终点(这些线的长度与该点处的线大小相同)
  • 我创建了一个贝塞尔路径,其中包含一个平行四边形,由两条垂直线加上连接它们的线组成。这使每个线段的线宽平滑过渡
  • 一旦我有了线段,我就画出路径的末端垂直线,再加上每个线段的边(但不是线段之间的垂直线)到一个新的贝塞尔路径中,然后我可以填充该路径以绘制具有所需线宽变化的笔划
  • 如果你想用它来打印或在HiDPI下使用,你可能不得不弄脏贝塞尔路径的“平坦度”,但对于1x屏幕显示来说,它看起来不错