如何在 cytoscape 中创建从某些节点到 canvas 边界的直线?

How to create straight lines from certain nodes to a border of the canvas in cytoscape?

我在中间栏有一篇文章,两侧有两张用 "ancestors" 和 "descendants" 的 cytoscape 生成的图表。

我想展示"ancestors"上一代文章中的一个"edges"到中间的文章,也就是cytoscape图的边界。

这是现在的样子:

它应该是这样的:

Cytoscape 为我们提供了一些神奇的工具,但它不应该与 html 元素一起使用来显示层次结构。

解决这个问题?主要方法应该是 single/multiple instance dagre graph with images-layout 和某种形式的 qTip HTML:

Layout with images

Dagre layout

Multiple instances

qTip with HTML/Ajax

//instead of qTip you can also use popper.js with tippy

使用这些工具,您应该尝试逐步构建图形:

  • 获取 运行
  • 的所有扩展名
  • 用你的数据构建一个 dagre 图(布局:根是文章,顶层树是祖先,底层树是 children)
  • 将图像添加到图表中
  • 为您的根添加一个 qTip

我不确定在 Cytoscape.js div 之上添加另一个 HTML 内容是否是个好主意。我也不知道您是否有一个或两个 Cytoscape.js 个实例(每个图表一个)。

在任何情况下,您都有以下选择:添加一个虚拟节点并使其样式透明以使其不可见。然后将它放在文章的一侧,并从 order-by-length 添加一条边到这个虚拟节点。您可以锁定此节点并使其不可抓取,这样用户将无法与其交互。

这种方法的一个主要问题是,某些布局不遵守 lock 状态,因此虚拟节点会在布局上四处移动。但是您可以在布局停止时将它们带回来。

另一种选择是在 Cytoscape.js canvas 之上添加另一个 canvas,然后自己绘制边缘。