我正在为特定目的开发SVG转换器。 SVG版本是1.1,有点旧,但我必须使用这个版本。
我很难尝试实现剪辑列表。
剪辑结构如下。
struct
{
edgeList *path
clip *intersect
clip *union
} clip
任何剪辑对象都可以有一个相交的剪辑或联合剪辑,或者两者都没有(但不是两者)。因此,如果存在交叉剪辑,我必须使用与父节点相交的剪辑路径。如果有一个联合剪辑,我必须将它与父组合。
根据SVG规范,我可以通过定义两个clipPath元素并在另一个clipPath的clip-path属性中使用其中一个来使用两个剪辑的交集。可以实现Union,以便在clipPath元素上定义两个路径。
现在,如果我获得多个剪辑路径怎么办?比方说,其中5个就是这样,
注意:组合的黑色区域是最后的剪辑区域。
我可以尝试像这样实现它。
<defs>
<clipPath id=cp1>
<path>red</path>
<clipPath>
<clipPath id=cp2 clip-path="#cp3">
<path clip-path="#cp1">green</path>
<path>purple</path>
<clipPath>
<clipPath id=cp3>
<path>yellow</path>
<clipPath>
</defs>
我被困在第五个片段。
我如何结合这个?此外,这种方法更难以编程方式进行。这有更好的方法吗?如果没有别的办法,我想我不得不把它作为SVG的限制。