【问题标题】:how to split one path into two paths in svg如何在svg中将一条路径分成两条路径
【发布时间】:2017-01-12 09:29:48
【问题描述】:

我对 svg 语法非常陌生,我想知道如何将一条路径拆分为两条路径。其实我有这样的东西:

M Xm Ym ... C Xc1 Yc1 Xc2 Yc2 Xc3 Yc3 (*) C Xd1 Yd1 Xd2 Yd2 Xd3 Yd3 C ...

(*) 是我要分割路径的地方

我想把它转换成这样的两条路径:

M Am Bm ... C Ac1 Bc1 Ac2 Bc2 Ac3 Bc3

M An Bn C Ad1 Bd1 Ad2 Bd2 Ad3 Bd3 ...

如何通过 X 和 Y 数计算 A 和 B 数?

【问题讨论】:

    标签: svg


    【解决方案1】:

    如果您可以依赖绝对路径命令(即大写字母,如“C”而不是“c”),那么这很容易。

    M Xm Ym ... C Xc1 Yc1 Xc2 Yc2 Xc3 Yc3 (*) C Xd1 Yd1 Xd2 Yd2 Xd3 Yd3 C ...
    

    会变成

    M Xm Ym ... C Xc1 Yc1 Xc2 Yc2 Xc3 Yc3
    

    M Xc3 Yc3  C Xd1 Yd1 Xd2 Yd2 Xd3 Yd3 C ...
    

    也就是说,只需使用上一个路径命令中的最后一个坐标对。

    但是请注意,如果路径有填充,像这样拆分它可能会弄乱填充。

    如果路径有相对路径命令(例如c)——尤其是拆分前的命令——那么你需要做更多的工作。在插入的M 命令中使用它们之前,您需要计算出最后一个坐标的绝对值。

    示例:

    <svg width="200" height="200" viewBox="0 0 20 20">
      <path transform="translate(10,10)"
            d="M -10,0
               C -10,-5.5 -5.5,-10 0,-10
               C 5.5,-10 10,-5.5 10,0"/>
    </svg>
    
    <svg width="200" height="200" viewBox="0 0 20 20">
      <path transform="translate(10,10)" fill="red"
            d="M -10,0
               C -10,-5.5 -5.5,-10 0,-10"/>
      <path transform="translate(10,10)" fill="green"
            d="M 0,-10
               C 5.5,-10 10,-5.5 10,0"/>
    </svg>

    【讨论】:

    • 我在问这个问题之前已经这样做了,但是没有用。
    • 那我想你一定是做错了。我添加了一个演示来演示。
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多