如何实现多个交集和联合剪辑

时间:2013-12-09 03:00:08

标签: svg union intersection clip

我正在为特定目的开发SVG转换器。 SVG版本是1.1,有点旧,但我必须使用这个版本。

我很难尝试实现剪辑列表。

剪辑结构如下。

struct
{
    edgeList *path
    clip *intersect
    clip *union    
} clip

任何剪辑对象都可以有一个相交的剪辑或联合剪辑,或者两者都没有(但不是两者)。因此,如果存在交叉剪辑,我必须使用与父节点相交的剪辑路径。如果有一个联合剪辑,我必须将它与父组合。

根据SVG规范,我可以通过定义两个clipPath元素并在另一个clipPath的clip-path属性中使用其中一个来使用两个剪辑的交集。可以实现Union,以便在clipPath元素上定义两个路径。

现在,如果我获得多个剪辑路径怎么办?比方说,其中5个就是这样,

  1. 前两个剪辑应该相互交叉
  2. 第3个剪辑应与之前的结果相结合
  3. 第4个剪辑应与之前的结果相交
  4. 第5个剪辑应与之前的结果相结合
  5. 注意:组合的黑色区域是最后的剪辑区域。

    clip example

    我可以尝试像这样实现它。

    <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的限制。

0 个答案:

没有答案