2013-06-16 3 views
0

Я использую схему направленности силы в D3 с возможностью ее приостановки. Тем не менее, я хочу, чтобы макет вводил узлы, даже если остальная часть графика оставалась статической. Я попытался применение алгоритма силы к входящим узлам следующим образом:Применить силу для ввода узлов только в d3.js

nnodes = vis.selectAll(".node") 
    .data(updatedData.nodes) 
nlinks = vis.selectAll(".link") 
    .data(updatedData.links) 

// apply graphics to entering nodes and links 

force 
    .nodes(nnodes.enter()) 
    .links(nlinks.enter()) 
    .start() 
force.on("tick", tick) 

, где tick множества узлов и позиция ссылки правильно при нанесении на полный график или когда пользователь перетаскивают узлы.

Однако, с приведенным выше кодом, новые узлы не перемещаются за пределы своих исходных позиций.

Могу ли я каким-либо образом применить алгоритм силы для ввода только узлов?

ответ

2

Схема установки вычисляет позиции узлов, принимая во внимание все узлы и ссылки. Вы не можете применить его только к частям графика. Итак, вам нужно изменить узлы и ссылки для существующего силового макета вместо того, чтобы давать ему только новые. Чтобы сделать узлы, которые уже существуют, там, где они есть, попробуйте установить для них свойство fixed.

Ваш код будет выглядеть примерно так:

nodes.forEach(function(n) { n.fixed = true; }); 

// update graphics 

newNodes.forEach(function(n) { nodes.push(n); }); 
// add new links similarly 

force.start(); 
+0

Это делает мой план более трудным, что я думал. Правильно ли я понимаю, что методы «узлы» и «ссылки» по силе в основном просто говорят d3, какую переменную хранят узлы/ссылки, а не обязательно, какие узлы должны быть затронуты силой? В какой-то степени это имеет смысл, я думаю, так как другие узлы, вероятно, должны проявлять свою силу, как обычно, просто не перемещаться, то есть быть «фиксированными». – notan3xit

+0

Нет, 'nodes' и' links' сообщают D3, на что должна действовать сила. Это не то же самое, что нарисованные узлы/ссылки - это позаботится отдельно. –