Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SVG中引用点数据_Svg - Fatal编程技术网

在SVG中引用点数据

在SVG中引用点数据,svg,Svg,我有绘制多段线的SVG,类似于: <polyline points="500 10 500 20 500 30 500 40 500 50 500 60 500 70 500 80 500 90 500 101 500 111 500 121 500 131 500 141 500 151 500 161 500 171 500 181 500 191 500 202 500 212 500 222 500 232 500 242 500 252 5

我有绘制多段线的SVG,类似于:

<polyline points="500 10 500 20 500 30 500 40 500
    50 500 60 500 70 500 80 500 90 500
    101 500 111 500 121 500 131 500 141 500
    151 500 161 500 171 500 181 500 191 500
    202 500 212 500 222 500 232 500 242 500
    252 500 262 500 272 500 282 500 292 500
    303 500 313 500 323 500 33 ... "/>

出于以下原因,我希望避免在属性中指定点:

  • 点的数量可能会非常大(1000个数字),并且将它们放在属性中会使SVG难以读取和处理

  • 这组点在同一个SVG中使用了多次,我希望避免在绘制的每一条直线上重复它

  • 我知道,对于文本,您可以使用
    引用其他地方定义的文本。这也可以用于点吗?

    您可以使用()元素:

    
    
    但是,在普通SVG中,无法从属性中移动点数据。您必须使用其他一些技术,JavaScript、XSLT或其他预处理或后处理来实现这一点

    编辑:孩子们,不要在家里尝试,但可以使用XML实体将点存储在其他地方:

    <!DOCTYPE svg [
     <!ENTITY points "[your points go here]">
    ]>
    <svg>
      <polyline points="&points;" />
    </svg>
    
    
    

    然而,我强烈反对这种解决方案,因为它是可以预见的,处理软件会因此而阻塞。我想浏览器可以很好地使用它(只要它不是HTML5上下文),但是像Inkscape、AdobeIllustrator、Batik等其他浏览器可能不会很好地使用它。

    我还没有听说过在SVG中实现这一点的方法

    我会考虑编写一个脚本来生成SVG代码,而不是手动执行类似的操作。这样,您就可以在SVG中添加更多的结构。SVG实际上是生成的,而不是手工编码的


    在您的示例中,似乎只需要两个循环就可以了。

    在您的示例中,a可能更可读、更紧凑?看到您的示例,我会想到
    h
    v
    命令(以及它们的绝对对应项
    h
    v
    )。

    我想这是我从SVG中得到的最好的命令。点必须保留在属性中,但至少我可以在元素之间共享该属性。是的,完全正确。您可以使用XML技术(google的“XML实体定义”)将这些点存储在其他地方,但我想,您至少会遇到一个处理查看器的问题。在HTML5中,你无法做到这一点。
    <!DOCTYPE svg [
     <!ENTITY points "[your points go here]">
    ]>
    <svg>
      <polyline points="&points;" />
    </svg>