2017-01-30 1 views
0

Я пытаюсь сделать приложение javascript, используя пружинный и raphael. На самом деле я раздвоенный демо-raphael.html (доступный от официальной пружинистой коды) https://github.com/dhotson/springy/blob/master/demo-raphael.htmlКак полностью удалить край от springy.js и raphael?

Что я пытаюсь сделать, это есть 2 основных узлы А и В и 10 других узлов (C, D, E, ...). тезисы 10 узлов могут быть подключены к A или B. (но не оба в одно и то же время) Если я действительно поставлю флажок, некоторые узлы могут изменить свое соединение и перейти на другой главный узел.

Так что я работаю, за исключением того, что она между A и C не удаляется. Когда флажок обновлен, я запускаю:

Я полагаю, что A подключен к C, и я хочу отключить его и подключить B к C. Давайте назовем EC этим ребром. Так что я запустить

graph_removeEdge(EC); 
delete EC; 
EC = graph.newEdge(C, B, {color: '#00A0B0'}); 

код, кажется, работает, потому что B и C соединены, и А и С не больше. НО Я все еще вижу старую картинку линии между A и C (она больше не будет двигаться, но она все еще там)

Как это можно удалить?

Я также пытался не удалять и создавать этот край ЕС, но пытаюсь обновить его с изменением целевого узла, но ничего не произойдет. код:

EC.target = B; 

еще один вопрос, как я могу поставить максимальное расстояние между точками А и В. Потому что они могут быть очень близки.

Большое вам спасибо за помощь.

ответ

0

Хорошо, у меня проблема: springy создает узел и край, но также создает путь raphael, связанный с этим краем. Так этот путь должен быть удален перед уничтожением края

EC.connection.fg.remove(); 
graph_removeEdge(EC); 

Примечания: Второй вопрос о вводе максимального расстояния между точками А и В: это не может быть сделано без изменения в springuy библиотеки, потому что нет никакой связи между А и В, поэтому мы не можем установить расстояние. Единственное решение - добавить флаг для каждого узла, а затем узлы с этим флагом будут распределены. Конечно, это должно быть реализовано путем изменения в springuy.js, возможно, в этой функции:

Layout.ForceDirected.prototype.tick = function(timestep) { 
    this.attractToCentre(); 
    this.applyHookesLaw(); 
    this.applyCoulombsLaw(); 
    this.applyDistanceToFlaggedNode(); // <--- your new function 
    this.updateVelocity(timestep); 
    this.updatePosition(timestep); 
}; 
Смежные вопросы