我正在开发一个带有一些附加功能的强制导向图形布局:可选链接/节点、工具提示、鱼眼效果,以及——对我的问题很重要——缩放和平移。
现在,缩放效果很好,如下所示:
d3 ... .append('svg:g').call(d3.behavior.zoom().on("zoom", redraw))...
重绘功能看起来像这样......
function redraw() {
trans = d3.event.translate;
scale = d3.event.scale;
vis.attr("transform", "translate(" + trans + ")" + " scale(" + scale + ")");
}
但是,此方法会缩放整个 SVG 图形,包括字体大小、图形边缘、节点周围的线条笔划宽度等。
是否可以不缩放某些元素?到目前为止,我看到的唯一解决方案是写这样一行(从这里获取http://jsfiddle.net/56RDx/2/)
node.attr("font-size", (nodeFontSize / d3.event.scale) + "px");
在重绘方法中,基本上是在飞行中反转某些元素的缩放。然而,我的问题是(除了这是一个丑陋的黑客之外),我的边缘宽度是在图形绘制上动态生成的(根据一些图形属性......),所以这种“反转”方法不起作用......