Макеты Cytoscape - Обработка заблокированных узлов - PullRequest
0 голосов
/ 08 июля 2019

Я использую vue-cytoscape для визуализации графика и навигации по древовидной структуре данных.

Моя цель - расширить родительские узлы и сохранить их положение на графике. Я хотел бы просто добавить новые дочерние узлы.

Мой подход заключается в блокировке текущих узлов, добавлении дочерних узлов и разблокировке узлов.

this.cy.nodes().lock()
for(let d of data){
  this.cy.add(d)
}
this.cy.elements().layout(this.config.layout).run()
setTimeout(() => {this.cy.nodes().unlock()}, 2000) // Give some time for the layout to render before unlocking nodes.

Проблема в том, что макеты не учитывают заблокированное состояние узлов. Только новые узлы перемещаются, и это нормально. Но макет не соблюдается. У меня сложилось впечатление, что компоновка вычисляет новую позицию для всех узлов, но затем перемещает только разблокированные узлы.

Согласно этой проблеме GitHub , некоторые алгоритмы компоновки должны обрабатывать заблокированные узлы. Я использую следующие макеты, и ни один из них не рассматривает заблокированные узлы.

  • Cola
  • Fcose
  • Dagre
  • avsdf
  • сетка
  • концентрические

1 Ответ

1 голос
/ 09 июля 2019

Пожалуйста, попробуйте вызвать функцию макета только для добавленных узлов:

var eles = cy.add(data);   // refer to http://js.cytoscape.org/#cy.add for adding nodes
eles.layout(this.config.layout).run();

Если вы не хотите, чтобы узлы перемещались при вызове функции макета, вы можете исключить их из рендеринга. При вызове cy.add () функция возвращает объект с каждым добавленным элементом внутри (см. Var eles = ... в коде).

...