在 HTML Canvas 中绘制线条以围绕形状进行路由

Posted

技术标签:

【中文标题】在 HTML Canvas 中绘制线条以围绕形状进行路由【英文标题】:Draw line to route around shapes in HTML Canvas 【发布时间】:2013-07-31 04:09:16 【问题描述】:

我正在使用 KineticJS 构建组织结构图;主要要求之一是能够拥有足够智能的线条,不会被它们连接的形状重叠。我有一种算法可以检测两个形状之间的最短路径,但我仍然不知道如何将它们围绕任何形状路由。

到目前为止,我想出的最佳解决方案是在线上的每个点上使用 getIntersection() 以确保没有任何点包含的不仅仅是线;但是在这样做之后(这本身感觉有点浪费),我仍然不确定绕过障碍物的最佳方式是什么。

如果有另一个可以轻松完成此任务的库,我对切换库的想法持开放态度,或者如果需要的话,甚至可以回到纯原生 JS 实现。

【问题讨论】:

【参考方案1】:

要使用您当前的解决方案,您需要在绘制连接器时可以使用的每个形状之间创建垂直和水平“排水沟”。

将这些排水沟想象成连接线穿过的导管。

您的排水沟中可能会有多个重叠的连接器。

您可以对连接器进行颜色编码,以便用户识别。

或者:

这个画布图表库是由 *** 的频繁贡献者 Simon Sarris 创建的:

http://www.nwoods.com/company/aboutus.htm

或者:

JSPlumb 是一个基于 javascript 的 diagamming 库

http://jsplumbtoolkit.com/jquery/demo.html

【讨论】:

Hmm...GoJS 似乎完全符合我的要求,但它不是开源的。真可惜,因为这是我公司正在寻找的东西。同时,JSPlumb 也不错,但我没有看到任何迹象表明它包含智能线路路由,这是有问题的。我已经考虑过排水沟解决方案,这似乎是合乎逻辑的;你认为让线路穿过它们的最佳方式是什么?

以上是关于在 HTML Canvas 中绘制线条以围绕形状进行路由的主要内容,如果未能解决你的问题,请参考以下文章

Canvas在Flyme主题的应用实践

在 HTML5 Canvas 上绘制形状...带视频

canvas绘制线条怎么改变线条长度

canvas路径

简单的 Qt 小部件来绘制线条和形状(如 tkinter 画布)?

HTML5 Canvas基本绘制线条教程