6

我想创建一个可以用数位板绘制的矢量对象,并将尊重来自笔的压力信息(通过适当地增加/减少线宽)。现在我知道如何从 NSEvent 中获取压力信息,但当然 NSBezierPath 不支持不同的线宽。

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

https://github.com/uliwitness/WideningBezierPathTest

但这有一个大问题:线条在中间变细到几乎没有 2 个像素(它应该只从 32 变为 8)。有谁知道我将如何调整控制点,使曲线部分的两条线的距离大致相同?

在此处输入图像描述

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

4

1 回答 1

2

感谢其他人的建议,我设法拼凑出一些可行的东西。我已将更改提交到存储库,但如果您想查看旧代码,可以返回一些修订。这是我现在要做的:

  1. 我使用 bezierPathByFlateningPath 展平路径。这给了我直线段。
  2. 然后我计算每个线段起点和终点的垂直线的起点和终点(这些线只要线的大小应该在这一点上)。
  3. 我创建了一个包含平行四边形的贝塞尔路径,该平行四边形由两条垂直线加上连接它们的线组成。这为每个段提供了线宽的平滑过渡。
  4. 一旦我有了这些线段,我将路径的末端垂直线以及每个线段的边(但不是线段之间的垂直线)绘制成一个新的贝塞尔路径,然后我可以用所需的线填充它以绘制笔画宽度变化。

如果您想将其用于打印或在 HiDPI 下使用,您可能不得不对贝塞尔路径的“平坦度”进行处理,但对于 1x 屏幕显示,它看起来不错。

于 2014-03-09T00:11:44.953 回答