明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 405|回复: 0

[图形系统] 魔改系列-2关于选择集交互

[复制链接]
发表于 2024-1-23 00:52 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2024-1-23 03:05 编辑

需求是:选择中再选择,并且只能选择某几个.


c#提供的手选函数无法在选择了的时候再选择,因为已选择了再手选直接就是ok的...而清空缓冲区之后,亮显图元,则shift无法剔除亮显.
想必用过的人都有这个疑惑.


解决方案:
有图元在选择集缓冲区,无法触发选择函数,就利用预选函数提取之后清空缓冲区.
此时画面没图元亮显,显得怪怪的,就亮显提取的图元们(不重构选择集).
触发手选函数.
触发手选状态时,每次选择都过滤并加入队伍并亮显,并且循环(:S模式,S模式不需要确认,使得只有亮显图元,而不存在选择状态的图元们)
触发手选状态时,shift无法剔除亮显图元,表现为error,此时通过键盘钩子进行拦截shift键入,禁止回调就没错误产生了.
注意我要拦截的是shift键入,此时手选并没有接收到shift键入,但是钩子接收了,就可以切换flag=减选了,当手选完成之后,内容就是用来取消亮显的,求一个差集就行了.
shift抬起时候,flag=选中.
(结束了)


选择集的本质:
啊?其实可以自己实现一个两点矩形,然后通过选框范围,再触发四叉树选择.
选框还可以利用透明winform画一个颜色,并且才用滤镜算法...很麻烦吗?


以上问题,本人并没有敲过任何代码,纯属颅内编译,例如拦截顺序是否成功?不成功是否需要子类化?俺觉得问题不大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 02:17 , Processed in 0.214928 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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