我正在做一个项目,我想在一些 SVG 元素周围画一条线,以便选择区域内的对象。
这是我现在的截图。我已经使用 Paint 添加了线条,以便完全清楚我想要实现的目标。我想选择绘制的圆圈内的两个 rect
。
我看到了一些必须解决的步骤:
- 在
mousedown
处创建一个path
元素并记录鼠标移动直到mouseup
- 关闭
路径
,以防用户没有画圆 - 查找完全或部分在圆圈内的 svg 元素
您看到了哪些方法,您对如何着手有什么建议吗?
最佳答案
我会执行以下步骤:
- 获取手绘形式的 aabb(或最小/最大框),
- 找到其 aabb 与自由形式的重叠的所有元素并将其保存在列表中,
- 得到手绘形式的凸包,
- 测试列表元素中的每个或部分顶点是否位于凸包内
根据您是否测试所有顶点是否位于凸包内,您可以确定元素是完全位于手绘图内还是仅与其重叠。
不幸的是,我对 d3.js 不是很熟悉,只是猜测它提供了在多边形内获得凸包、aabb 和测试点的方法。可能它甚至使您能够进行 aabb 查询以在第 2 步中找到重叠的 aabb。
祝你好运......
关于javascript - 通过在它们周围徒手绘制来选择 SVG 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15092686/