Я работаю над компоновкой принудительного графа с некоторыми дополнительными функциями: выбираемые ссылки/узлы, всплывающие подсказки, эффект «рыбий глаз» и, что важно для моего вопроса, масштабирование и панорамирование.
Теперь масштабирование работает очень хорошо:
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");
в методе перерисовки, чтобы в основном инвертировать масштабирование определенных элементов на лету. Однако моя проблема заключается в том (помимо того, что это уродливый хак), что ширина моих ребер динамически генерируется при рисовании графика (в соответствии с некоторыми свойствами графика...), поэтому этот метод "инверсии" не работает...
scale()
на меньшее значение для отдельных фигур SVG? - person A.M.K   schedule 16.10.2012