我不确定使用当前的 SVG 标准是否可以解决我遇到的问题,但我想无论如何我都会在这里问是否有人知道答案
我有一个不断变化的 svg 路径(通过在 d3 中制作的节点周围形成一个外壳定义的顶点,强制驱动,因此节点不断移动,边界外壳移动以容纳节点)
因为我无法预测顶点,也不知道文本将是什么(因为它取决于在那种情况下节点的分组,它会发生变化)我所能做的就是盲目地将文本路径上的文本应用于路径。问题是有时文本不能很好地显示。
问题 1:颠倒的文本 - 我不介意文本在路径上的位置,但令人讨厌的是它经常颠倒
例如(图片):
[NB 问题 2 分支到SVG 文本路径渲染中,如答案中所建议的那样,在带有尖角的文本路径上严重破坏了单词]
问题 2:分解的文本 - 当一个角形成时,文本有分裂的趋势。向上。我不认为我使用 dy 将文本推到边界之外有帮助(路径实际上对节点很紧,我应用 40 笔画宽度来提供一些填充:dy 将文本推到该笔画之外)
例如(图片):
关于我能做些什么来解决这个问题的任何想法?
- 克里斯
svg 代码供参考:
问题1:
<g id="hull_elements">
<path class="boundary" id="Secure" d="M219.31353652066463,309.7274362305448L199.3259715998452,277.60331505353355L54.5215284230899,92.9756148805194L29.418010605669316,64.72387260525474Z" style="fill: #b0c4de; stroke: #b0c4de; stroke-width: 40px; stroke-linejoin: round;"></path>
<path class="boundary" id="DMZ" d="M234.7675515627913,79.25604751762172L122.76947855325542,190.1418483839412L271.90702281166267,76.40758102069142Z" style="fill: #b0c4de; stroke: #b0c4de; stroke-width: 40px; stroke-linejoin: round;"></path>
</g>
<g id="hull_text">
<text dy="30"><textPath startOffset="0" text-anchor="start" method="align" spacing="auto" xlink:href="#Secure">Secure</textPath></text>
<text dy="30"><textPath startOffset="0" text-anchor="start" method="align" spacing="auto" xlink:href="#DMZ">DMZ</textPath></text>
</g>
问题2:
<g id="hull_elements"><path class="boundary" id="Secure" d="M30.716331539726912,88.02778447495649L66.8405337274694,100.01086904278971L251.78816229874747,53.214214251587265L277.8704519199028,25.642491075146587Z" style="fill: #b0c4de; stroke: #b0c4de; stroke-width: 40px; stroke-linejoin: round;"></path>
<path class="boundary" id="DMZ" d="M177.8575710153683,149.56053657599713L251.04637461899244,245.55658992744486L277.76418020025847,271.7261370009561L159.53295211932644,118.0340968521715Z" style="fill: #b0c4de; stroke: #b0c4de; stroke-width: 40px; stroke-linejoin: round;"></path>
</g>
<g id="hull_text">
<text dy="30"><textPath startOffset="0" text-anchor="start" method="align" spacing="auto" xlink:href="#Secure">Secure</textPath></text>
<text dy="30"><textPath startOffset="0" text-anchor="start" method="align" spacing="auto" xlink:href="#DMZ">DMZ</textPath></text>
</g>
jsfiddle 可以显示这一点(移动节点以查看问题) http://jsfiddle.net/zuzzy/GC2C2/
[编辑添加问题2分支的NB-zuzzy]