如何完全去除 springy.js 和 raphael 的边缘?
How to fully remove edge from springy.js and raphael?
我正在尝试使用 springy 和 raphael 做一个 javascript 应用程序。
事实上,我分叉了 demo-raphael.html (可从官方弹性代码获得)
https://github.com/dhotson/springy/blob/master/demo-raphael.html
我想要做的是拥有 2 个主节点 A 和 B 以及 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 不再连接。
但我仍然可以看到 A 和 C 之间的线的旧图片(它不再移动,但它仍然存在)
我怎样才能删除它?
我也尝试过不删除和创建这个 EC 边缘,而是尝试通过更改他的目标节点来更新它,但没有任何反应。
代码:
EC.target = B;
还有一个问题是如何设置 A 和 B 之间的最大距离。
因为它们可以非常接近。
非常感谢您的帮助。
好的,我遇到了问题:
springy 正在创建节点和边,但它也创建了与该边关联的拉斐尔路径。
所以在破坏边缘之前必须删除这条路径
EC.connection.fg.remove();
graph_removeEdge(EC);
注意:第二个关于A和B之间设置最大距离的问题:在springuy库中不修改是不行的,因为A和B之间没有link,所以我们不能设置a距离。
唯一的解决办法就是给每个节点加一个flag,有这个flag的节点才会被分发。当然,这个要在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);
};
我正在尝试使用 springy 和 raphael 做一个 javascript 应用程序。 事实上,我分叉了 demo-raphael.html (可从官方弹性代码获得) https://github.com/dhotson/springy/blob/master/demo-raphael.html
我想要做的是拥有 2 个主节点 A 和 B 以及 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 不再连接。 但我仍然可以看到 A 和 C 之间的线的旧图片(它不再移动,但它仍然存在)
我怎样才能删除它?
我也尝试过不删除和创建这个 EC 边缘,而是尝试通过更改他的目标节点来更新它,但没有任何反应。 代码:
EC.target = B;
还有一个问题是如何设置 A 和 B 之间的最大距离。 因为它们可以非常接近。
非常感谢您的帮助。
好的,我遇到了问题: springy 正在创建节点和边,但它也创建了与该边关联的拉斐尔路径。 所以在破坏边缘之前必须删除这条路径
EC.connection.fg.remove();
graph_removeEdge(EC);
注意:第二个关于A和B之间设置最大距离的问题:在springuy库中不修改是不行的,因为A和B之间没有link,所以我们不能设置a距离。 唯一的解决办法就是给每个节点加一个flag,有这个flag的节点才会被分发。当然,这个要在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);
};