Я использую 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
- сетка
- концентрические