开罗的笔划对齐

Stroke alignment in Cairo

许多图形包允许用户select在他们想要围绕形状绘制区域边界的地方;沿着形状的内部、外部或中心。例如,这显示了同一个正方形,其边框分别沿中心、内部和外部绘制:

我可以根据笔划的宽度缩放路径 up/down,但我想先检查是否有内置支持。

我正在使用 Ruby,但如果有用于此的 C 方法,它也可能在 Ruby 绑定中可用。

在开罗,有没有一种方法可以在路径的外侧或内侧绘制笔划,而不是沿着中心绘制?

不,没有这样的内置方法。

人们可能会用一个稍后用作遮罩的临时表面来近似此。例如,要执行 "outside",您首先要用 "transparent" 填充一个临时表面,然后用两倍于所需线宽的笔划一些 "opaque",最后用 "transparent" 填充形状摆脱线宽的内部部分。然后可以将生成的表面用作遮罩。

"Inside" 类似,但有一个额外的技巧:同样,透明表面和线条宽度的两倍。现在需要删除此笔画的外部部分。为此,需要一条具有奇偶弯曲规则的路径。向此路径添加一个表面大小的矩形会反转路径,从而允许通过填充移除外部的所有内容。 对于非零缠绕规则...我没有任何直接的想法(好吧,另一个临时表面然后通过带有运算符 SUBTRACT 的全表面油漆反转?)。

要在路径内部描边,将路径设置为裁剪区域,然后描边路径;位于裁剪区域之外的笔划的任何部分都将不可见...