D3 селективный зум

Я работаю над макетом принудительно ориентированного графа с некоторыми дополнительными функциями: выбираемые ссылки / узлы, всплывающие подсказки, эффект «рыбий глаз» и, что важно для моего вопроса, масштабирование и панорамирование.

Теперь масштабирование работает очень хорошо, например так:

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");

в методе перерисовки, чтобы в принципе инвертировать масштабирование определенных элементов на лету. Моя проблема, однако (помимо того, что это уродливый хак), что мои ширины ребер динамически генерируются при рисовании графа (согласно некоторым свойствам графа ...), так что это 'инверсия» метод не работает ...

Ответы на вопрос(2)

Ваш ответ на вопрос