PGF 装饰上下文中的“输入段”是什么?

PGF 装饰上下文中的“输入段”是什么?

关于 PGF 装饰,请考虑具有朗朗上口的名称的两个维度(TikZ 和 PGF 手册 3.0.1a 版第 1001 页)

  • \pgfdecoratedinputsegmentremainingdistance...输入路径当前输入段的剩余距离。
  • \pgfdecoratedinputsegmentcompleteddistance... 输入路径的当前输入段上完成的距离。

我不明白

  1. 输入什么部分是?
  2. PGF 如何计算其余的(分别完全的)当前输入段的距离?

第一个问题的答案很复杂,因为有多个类似的概念可以描述为输入段

  1. 输入段是输入路径的一部分。每条路径可分解为零个或多个部分。一般而言,部分以一个moveto操作开始,并在下一个操作之前moveto或下一个操作之前结束pgfuse(以先到者为准)。
  2. 输入段是与单个路径扩展操作相对应的路径的子集:

    输入路径可能由多条直线和曲线输入段组成(例如,一个圆或一个椭圆由四条曲线组成。)(第 996 页底部)

  3. 装饰自动机将输入路径分成几段,如下所示:当自动机进入新状态时,s下一段是输入路径的子集,从前e一段的末尾到p输入路径上更远的点,其曲线距离由的选项e指定。swidth

注意

  • 一个段(1)可以由多个段(2)组成。
  • 一个段(2)可以由多个段(3)组成。
  • 一个段(3)可跨越多个段(1),也可以跨越多个段(2)。

第二个问题的答案因以下事实而变得复杂:

  1. 装饰输出路径与装饰输入路径不同。

  2. “您提供的宽度不必是片段的“真实”宽度,这允许装饰片段重叠或相距较远。”(第 997 页)

答案1

当你写作时

\draw (0,0) -- (1,0) arc (20:230:1 and 2);

这转化为\pgfpathmoveto\pgfpathlineto基元。每个基元都表示一个输入段。如果有嵌套修饰,它们也会成为子基元,并且每个子基元都是用户输入的路径段。

路径长度由软路径层计算​​,我不知道该如何总结。一旦知道总长度,状态机就会开始更新修饰路径,并在每一步根据最后一个修饰点减少剩余的距离寄存器。

相关内容