明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 163|回复: 7

ARX获取鼠标上下左右实体并且生成最小矩形

[复制链接]
发表于 2024-4-21 00:20 | 显示全部楼层 |阅读模式
本帖最后由 520key 于 2024-4-21 11:41 编辑

请教一下大佬们,从鼠标位置往上下左右各画一条射线,在不遍历所有实体的情况下怎么能取出与这四条射线相交的最近点,并生成最小矩形,在Jig模式下又不能使用acedSSGet选择器,这个问题困扰了很久,有哪个大佬做过类似的,能不能指点一下呀?
发表于 2024-4-21 09:04 | 显示全部楼层
难道你在做获取鼠标封闭区?bo算法?
 楼主| 发表于 2024-4-21 11:41 | 显示全部楼层
你有种再说一遍 发表于 2024-4-21 09:04
难道你在做获取鼠标封闭区?bo算法?

是的,CAD的BO只能识别封闭的矩形,不能识别没有封闭的
发表于 2024-4-21 19:38 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-4-21 19:53 编辑

我不知道你的水平去到哪里...
1,每个扫描线和每个图元遍历时间复杂度O(m*n),这是难以接受的.你需要降到O(m*log(n))或者O(m).
2,怎么降低呢?构造有序结构,"跳过前面,末尾break",你可以清晰感觉只需要判断中间了.
3,怎么构造这个有序结构呢?有很多方法,四叉树,包围盒有序数组都可以,图元包围盒中心点y排序,然后break是不是可以横向扫描了.x排序就是竖向了.二分法四分法可以快速找到扫描线起始点和结束点.
4,批量bo概念还可以参考此处:
http://bbs.mjtd.com/thread-189551-1-1.html
5,想要速度快,无非就是开图时候并行构造索引,数据库图元加入事件上面也加一个构造,这样用户边画边构造.使用时候就是立马能够获取全图封闭区.
 楼主| 发表于 2024-4-22 17:48 | 显示全部楼层
你有种再说一遍 发表于 2024-4-21 19:38
我不知道你的水平去到哪里...
1,每个扫描线和每个图元遍历时间复杂度O(m*n),这是难以接受的.你需要降到O(m ...

我还是个菜鸟水平,没能到达大佬的这种高境界,经过群里的其他大佬指点,在调用命令的时候通过多线程遍历所有对象,将所有对象按四叉树进行分割打上标记,再鼠标移动时通过鼠标点进行四叉树查找,找到鼠标一定范围内的所有对象,在鼠标位置按上下左右四个方向作4条射线,将查找到的对象与四条射线求交点,取离鼠标点最近的点组成一个矩形,大致的思路是这样的
发表于 2024-4-22 18:02 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-4-22 18:39 编辑
520key 发表于 2024-4-22 17:48
我还是个菜鸟水平,没能到达大佬的这种高境界,经过群里的其他大佬指点,在调用命令的时候通过多线程遍历 ...

既然你知道四叉树了,那么四叉树并不是好方法,我只是引入这个操作让你感受时间复杂度,上下左右射线也不是流程里面的.
先做做思维导图,然后分析时间复杂度,把流程完备.先去掌握关键一步,再去细化.
批量bo既然是批量,就是因为它肯定不是需要时候才给你准备数据,而是一开始就准备好数据,等你需要用的时候直接用.
鼠标和四叉树只是快速鼠标点在哪个封闭区里面.
那么分析全部封闭区这个才是你要掌握的.
 楼主| 发表于 2024-4-23 13:42 | 显示全部楼层
你有种再说一遍 发表于 2024-4-22 18:02
既然你知道四叉树了,那么四叉树并不是好方法,我只是引入这个操作让你感受时间复杂度,上下左右射线也不是 ...

按大佬的意思是,提前将所有封闭区域都计算好,鼠标移动的时候只需要将鼠标点位置对应的矩形拿出来就可以了?
发表于 2024-4-23 17:35 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-4-23 17:39 编辑
520key 发表于 2024-4-23 13:42
按大佬的意思是,提前将所有封闭区域都计算好,鼠标移动的时候只需要将鼠标点位置对应的矩形拿出来就可以 ...

是啊,获取封闭区和取封闭区其实是两个动作.


我是从数据库原理上面获得这个操作的:插入时候维护索引顺序,而不是每次需要才排序.毕竟取是频繁的.

进而延伸,批量bo是开图一次性完成,然后不断画图时候维护.因为我们难以保存封闭区资料,所以并行重新构造速度也很快,所以不在乎开图构造那点时间.

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-7 08:18 , Processed in 0.215601 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表