如何定义自己的右键单击或左键双击反应器
本帖最后由 夏生生 于 2021-12-3 11:37 编辑哪位大侠可以指导一下,谢谢。我又如下代码:
(defun c:temp ( / loop gr)
(setq loop t)
(prompt "\n输入m,c,l:")
(while loop
(setq gr (grread T 15 2))
(cond ((or (equal gr (list 2(ascii "m"))) (equal gr (list 2(ascii "M"))))
(setq loop nil)
(command "move")
)
((or (equal gr (list 2(ascii "c"))) (equal gr (list 2(ascii "C"))))
(setq loop nil)
(command "copy")
)
((or (equal gr (list 2(ascii "l"))) (equal gr (list 2(ascii "L"))))
(setq loop nil)
(command "line")
)
)
)
)如何在autocad命令行无命令输入且有选择或无选择的情况下,右键,自动执行temp命令,也就是自定义一个永久右键反应器,在其它的插件定义了右键反应器的情况下,要关闭其它的右键反应器。
另:左键双击空白处也可以
(defun temp(x y)(alert "ok"))
(defun c:test()
(vlr-remove-all :vlr-mouse-reactor);删除鼠标反应器
(vlr-mouse-reactor "右键单击" '((:vlr-beginRightClick . temp)))
(vlr-mouse-reactor "左键双击" '((:vlr-beginDoubleClick . temp)))
) 本帖最后由 夏生生 于 2021-12-3 17:50 编辑
xtjd 发表于 2021-12-3 14:44
(defun temp(x y)(alert "ok"))
(defun c:test()
(vlr-remove-all :vlr-mouse-reactor);删除鼠标反应器 ...
您的第一步是禁用所有鼠标反应器吧?如何禁用我想禁用的呢?而且这个temp不能定义成命令是吗?谢谢 xtjd 发表于 2021-12-3 14:44
(defun temp(x y)(alert "ok"))
(defun c:test()
(vlr-remove-all :vlr-mouse-reactor);删除鼠标反应器 ...
看了你明经第一个主题是2006年。 老lsper了啊 yanshengjiang 发表于 2021-12-3 23:28
看了你明经第一个主题是2006年。 老lsper了啊
我是老新手 xtjd 发表于 2021-12-3 11:12
(defun temp(x y)(alert "ok"))
(defun c:test()
(vlr-remove-all :vlr-mouse-reactor);删除鼠标反应器 ...
朋友,请问能深入指导一下吗?谢谢。我的初衷是加载代码,建立A反应器,屏蔽其它右键反应器,右键调用自己的代码B,当代码B执行的时候,屏蔽A反应器,代码B执行完毕,停止屏蔽A反应器,以便下次右键的时候执行该反应器。能力有限,把自己绕晕了。下面的代码,右键的时候,可以在右键所在点画一个point,但是画完以后autocad自带的右键反应器又启动了。
;;;建立反应器对象
(vlr-remove-all :vlr-mouse-reactor) ;_删除反应器
(if (null **val**)
(setq **val** (vlr-mouse-reactor
"beginRightClick"
'((:vlr-beginRightClick . xxRightClickcallback))
)
)
)
;;;定义回调函数
(defun xxRightClickcallback (obj point)
(if xxRightClickcall
(xxRightClickcall point)
)
)
;;;定义反应器
(defun xxRightClickcall (point / pt)
(setq pt (car point))
(vla-addPoint (vla-get-modelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3D-Point pt))
) 夏生生 发表于 2021-12-6 11:57
朋友,请问能深入指导一下吗?谢谢。我的初衷是加载代码,建立A反应器,屏蔽其它右键反应器,右键调用自 ...
右键很特殊,不好整,下面代码你研究看看
(defun vlrremove(x y)(vlr-remove beginRightClick))
(defun vlradd(x y)(vlr-add beginRightClick))
(defun c:nothing nil (princ))
(defun addpt(pt)
(vla-addPoint (vla-get-modelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3D-Point pt))
(vla-sendcommand(vla-get-ActiveDocument(vlax-get-acad-object))"nothing")
)
(defun c:test()
(vlr-remove-all :vlr-mouse-reactor);删除鼠标反应器
(setq beginRightClick(vlr-mouse-reactor "右键单击" '((:vlr-beginRightClick . temp))))
(setq commandWillStart(VLR-Command-Reactor nil '(
(:VLR-commandWillStart . vlrremove)
(:VLR-commandCancelled . vlradd)
(:VLR-commandEnded . vlradd)
)
)
)
) xtjd 发表于 2021-12-6 16:25
右键很特殊,不好整,下面代码你研究看看
(defun vlrremove(x y)(vlr-remove beginRightClick))
(defun ...
谢谢,我研究研究 (defun temp(x y)(addpt pt(car y))) 个人建议
占用一个【F*】功能键用于反应器的启停
按一次停止系统启用自定义
再按一次则反向操作
我自己用的是【F7】启停双击反应器
另外
最好不要用右键反应器
可以的话用空白双击代替右键
页:
[1]
2