s1os5210 发表于 2024-3-5 18:17:23

highflybird 发表于 2024-3-5 12:30
判断点在一个矩形形 是容易的。 如图图框是一个图块,那么就获得它的最大点,最小点,从而获得它的矩形,如 ...

没有理解你说的,如果能够获取到图框的最大点最小点,那不是先要选中图框?如果都选中了,那就不需要去通过点查找了。

s1os5210 发表于 2024-3-5 18:19:28

xyp1964 发表于 2024-3-5 13:38
;; 大概的意思

先谢过,不过你好像理解错我的的意思了,你的操作正是我想避免的。我是通过一点选中其中的一个图框,其他的不能被选进来

你有种再说一遍 发表于 2024-3-5 18:29:55

本帖最后由 你有种再说一遍 于 2024-3-5 18:48 编辑

想通过一点选中图框?就算暴力算法也没多慢吧.
遍历全部图框块,获取包围盒,点在包围盒内.
包围盒就是矩形,所以特别快.
if(rect.Min.X<pt.X && pt.X<rect.Max.X
    && rect.Min.Y<pt.Y && pt.Y<rect.Max.Y)
这样速度已经非常块了,一个dwg算你一万张图?那也飞一般速度...不需要做什么四叉树降低复杂度了.

飞雪神光 发表于 2024-3-5 19:09:05

liuhe 发表于 2024-3-5 09:38
一般是范围屏幕当前显示尺寸

有一种可能 他放大屏幕 导致 图框在屏幕外 需要zoom

飞雪神光 发表于 2024-3-5 19:21:09

s1os5210 发表于 2024-3-5 18:10
果然牛,思路非常棒。但是会有小问题,如果两个图框离的非常近,第2点的距离就很难把握,会出现误选。总 ...

两点是水平或对角的两点 用来搜索 还有一个计算点击点是否在块的包围盒内 防止误选 逐渐扩大范围并zoom 为处理图框不在屏幕内的情况 如图框必然在屏幕内就直接用屏幕对角点即可

s1os5210 发表于 2024-3-5 20:48:14

飞雪神光 发表于 2024-3-5 19:21
两点是水平或对角的两点 用来搜索 还有一个计算点击点是否在块的包围盒内 防止误选 逐渐扩大范围并zoom...

感谢,不过zoom会有卡顿。十分不舒服。现在的解决办法是设置SELECTIONOFFSCREEN变量。缺点是低版本不支持。现在的解决办法是先判断版本,低于2018设置zoom,高版本用SELECTIONOFFSCREEN变量

飞雪神光 发表于 2024-3-5 22:23:20

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=186350&highlight=%C6%C1%C4%BB%CD%E2
可以参考一下这个 我用了 频率大的时候 感觉卡顿

xyp1964 发表于 2024-3-5 23:13:35



试试 ssnamex

自贡黄明儒 发表于 2024-3-6 07:12:38

还是7楼highflybird大师说得对
1 第一步,图框块(setq ss "X" '((0 . "insert")(2 . "GB_L,GB_H,tk_,tk_h"))))
2 第二步,图框块包围盒
3 第三步,判断P在哪个包围盒中
页: 1 [2]
查看完整版本: 通过一点寻找被包围的块