明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1716|回复: 13

[提问] 如何定义自己的右键单击或左键双击反应器

[复制链接]
发表于 2021-12-3 11:12:23 | 显示全部楼层 |阅读模式
50明经币
本帖最后由 夏生生 于 2021-12-3 11:37 编辑

哪位大侠可以指导一下,谢谢。我又如下代码:
  1. (defun c:temp ( / loop gr)
  2.   (setq loop t)
  3.   (prompt "\n输入m,c,l:")
  4.   (while loop
  5.     (setq gr (grread T 15 2))
  6.     (cond ((or (equal gr (list 2(ascii "m"))) (equal gr (list 2(ascii "M"))))
  7.       (setq loop nil)
  8.      (command "move")
  9.      )
  10.      ((or (equal gr (list 2(ascii "c"))) (equal gr (list 2(ascii "C"))))
  11.       (setq loop nil)
  12.       (command "copy")
  13.      )
  14.      ((or (equal gr (list 2(ascii "l"))) (equal gr (list 2(ascii "L"))))
  15.       (setq loop nil)
  16.       (command "line")
  17.      )
  18.      )
  19.   )
  20. )
如何在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 11:12:24 | 显示全部楼层
(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)))  
)

评分

参与人数 1明经币 +1 收起 理由
夏生生 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-12-3 17:48:52 | 显示全部楼层
本帖最后由 夏生生 于 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不能定义成命令是吗?谢谢
回复

使用道具 举报

发表于 2021-12-3 23:28:12 | 显示全部楼层
xtjd 发表于 2021-12-3 14:44
(defun temp(x y)(alert "ok"))
(defun c:test()
  (vlr-remove-all :vlr-mouse-reactor);删除鼠标反应器 ...

看了你明经第一个主题是2006年。 老lsper了啊
回复

使用道具 举报

 楼主| 发表于 2021-12-4 10:37:38 | 显示全部楼层
yanshengjiang 发表于 2021-12-3 23:28
看了你明经第一个主题是2006年。 老lsper了啊

我是老新手
回复

使用道具 举报

 楼主| 发表于 2021-12-6 11:57:12 | 显示全部楼层
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自带的右键反应器又启动了。
  1. ;;;建立反应器对象
  2. (vlr-remove-all :vlr-mouse-reactor) ;_删除反应器
  3. (if (null **val**)
  4.   (setq        **val**        (vlr-mouse-reactor
  5.                   "beginRightClick"
  6.                   '((:vlr-beginRightClick . xxRightClickcallback))
  7.                 )
  8.   )
  9. )
  10. ;;;定义回调函数
  11. (defun xxRightClickcallback (obj point)
  12.   (if xxRightClickcall
  13.     (xxRightClickcall point)
  14.   )
  15. )
  16. ;;;定义反应器
  17. (defun xxRightClickcall        (point / pt)
  18.   (setq pt (car point))
  19.   (vla-addPoint (vla-get-modelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3D-Point pt))
  20. )
回复

使用道具 举报

发表于 2021-12-6 16:25:05 | 显示全部楼层
夏生生 发表于 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)
                                                   )
                          )
        )
)

评分

参与人数 1明经币 +1 收起 理由
夏生生 + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-12-6 16:33:04 | 显示全部楼层
xtjd 发表于 2021-12-6 16:25
右键很特殊,不好整,下面代码你研究看看
(defun vlrremove(x y)(vlr-remove beginRightClick))
(defun ...

谢谢,我研究研究

点评

(defun temp(x y)(addpt pt(car y)))  发表于 2021-12-6 16:51
缺的代码补上  发表于 2021-12-6 16:51
回复

使用道具 举报

发表于 2021-12-6 16:51:00 | 显示全部楼层
(defun temp(x y)(addpt pt(car y)))
回复

使用道具 举报

发表于 2021-12-6 18:57:09 | 显示全部楼层
个人建议
占用一个【F*】功能键用于反应器的启停
按一次停止系统启用自定义
再按一次则反向操作
我自己用的是【F7】启停双击反应器

另外
最好不要用右键反应器
可以的话用空白双击代替右键

评分

参与人数 1明经币 +1 收起 理由
夏生生 + 1 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 11:41 , Processed in 0.194860 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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