在SVG中引用点数据
我有绘制多段线的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
<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 ... "/>
出于以下原因,我希望避免在属性中指定点:
引用其他地方定义的文本。这也可以用于点吗?您可以使用()元素:
但是,在普通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>