- 积分
- 10875
- 明经币
- 个
- 注册时间
- 2015-8-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 你有种再说一遍 于 2024-9-13 06:06 编辑
cad.net/Arx 修复自带命令的缺陷
都是lisp难以实现的,嘿嘿.
# 拷贝中断
问题链接:
https://www.cnblogs.com/JJBox/p/11464977.html
copy拷贝多图元的时候多次按esc会中断拷贝,并导致这些中断的图元无法显示.
可以看到我之前居然是去补锅,而不是阻止事件发生.
两种做法:
1,自己写一个copy命令,因为c#/Arx运行期间没有判断esc输入,自然就能避免这个问题.
2,通过命令事件处理(推荐)
copy命令前,设置flag=true,阻塞esc按键.
copy命令后,设置flag=flase,放行esc按键.
键盘钩子一直检测flag,为true就禁止esc的回调,就能否决输入.
好处就是不用重写copy命令,方便多了.
我需要判断lisp是否运行,因为我是利用命令事件vote原生命令,然后发送自己命令实现替换.
若lisp调用了该原生命令,那么将造成错误.
例如:(command "Line" pt1 pt2 "")
我重写的命令参数没有提供两点,而是提供了一点,别人的lisp工具就会造成参数缺失.
并且这个命令是常驻的,所以需要:
1,运行期间需要判断lisp是否运行,否则不替换.
2,如果运行lisp期间也允许替换,需要设置一个环境变量,使得别人lisp不替换.
http://bbs.mjtd.com/thread-188274-1-1.html
它这里也问了耶,但是没有答案.
# 复制视口冻结信息丢失
问题链接:
https://www.cnblogs.com/JJBox/p/11531115.html
想覆盖掉官方的ctrl+c/v,那么利用IFox剪贴板,
复制时候把冻结图层的信息存入配置[临时文件的dwg路径,视口句柄,图层集合...],
粘贴按照配置取出来并且设置就好了嘛.
IFox剪贴板:
http://bbs.mjtd.com/thread-191093-1-1.html
# 无级缩放
鼠标中键在缩放到某些程度,需要加zoom窗口范围去刷新缓存层,那么我们为什么不用鼠标钩子去获取这个阈值(或者命令历史最后一行的提示),然后发送命令进行zoom窗口捏.
# 输入法自动切换
原始来自于福萝卜的赫思工具箱,我加入了状态机,因为写得很完美了,甚至不想介绍了.你们要的键盘钩子可以从这里开始学习.
https://gitee.com/inspirefunctio ... B3%95/IMEControl.cs
福萝卜明经的账号是:
http://bbs.mjtd.com/thread-97618-1-1.html
# 新建图纸致命错误
通过ctrl+n新建图纸偶尔发现出错,尤其是op重置配置之后,利用子类化拦截之后发现的注册表问题.
继续研究之下,会发现是com的注册表丢失了,修补方案就是还原咯.
https://www.cnblogs.com/JJBox/p/14187031.html
# 取消标注关联(这个lisp可以干)
在布局的视口上面使用1:1大小的标注,此时开启关联标注(setvar 'dimassoc 2)进行标注时,cad会自动换算视口比例到标注图元的线性比例,也就是一个1:1的万能标注.
但是由于移动视口或者图元移动,关联会跑位,造成错误尺寸(巨大无比的数值).
为了阻止错误发生,就需要取消关联,用命令DDA可以手选标注并取消关联.不过,手选太麻烦了,可以通过数据库图元生成事件来获取标注.
这样标注之后,事件就自动取消它的关联.
取消标注关联:
c#是entity.GetPersistentRectorIds()反应器id,遍历内部删除关联反应器就可以了.
Arx版:https://www.cnblogs.com/edata/p/10731436.html
# 填充卡顿
http://bbs.mjtd.com/thread-190975-1-1.html
(好像没完,但是我没想到还有什么命令缺陷) |
|