明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 707|回复: 7

[讨论] 高版本CAD中空白处双击执行自定义LISP函数的问题

[复制链接]
发表于 2023-5-15 20:28 | 显示全部楼层 |阅读模式



本人不懂反应器,在这个网站找到一段代码,可以实现在CAD中空白处双击执行自定义LISP函数,如下完整代码。自定义的函数是TEMP, 这个代码在ACAD2014中执行的很完美,但是在ACAD2021中有问题,有点时候成功有的时候不成功。那位大师给看看。谢谢


;;; 加载双击反应器
(vl-load-com)

(if (not *dblclkReactor*);;0 = 打开反应器
(setq *dblclkReactor*(VLR-Mouse-Reactor nil'((:VLR-beginDoubleClick . dblclkedit)))))

(defun dblclkedit(reactorObject point)
  (if dblclk-edit(dblclk-edit point))
)
;;; 自定义双击反应器Double Click Reactor
(defun dblclk-edit (dblclk_point / owner dblclk_etype p)
  (setq owner (nentselp (setq p (trans (car dblclk_point) 0 1))));;指定点来选择对象
  (if (and (= owner nil) (= 0 (getvar 'cmdactive))) ;_有活动命令时不起作用
      (vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) (strcat (rtos (car p) 2 3) "," (rtos (cadr p) 2 3) " temp "))
  )
)
(defun c:temp() (alert "ok") (princ))



如上图,在ACAD2021中空白处双击了5-6次,最后成功了一次,且还输出 “命令: 3811.357,1315.803 未知命令“357,1315.803”。按 F1 查看帮助。”
发表于 2023-5-18 01:54 | 显示全部楼层
(vl-load-com)

(if (not *dblclkReactor*);;0 = 打开反应器
(setq *dblclkReactor*(VLR-Mouse-Reactor nil'((:VLR-beginDoubleClick . dblclkedit)))))

(defun dblclkedit(reactorObject point)
  (if dblclk-edit(dblclk-edit point))
)
;;; 自定义双击反应器Double Click Reactor
(defun dblclk-edit (dblclk_point / owner dblclk_etype p)
  (setq owner (nentselp (setq p (trans (car dblclk_point) 0 1))));;指定点来选择对象
  (if (and (= owner nil) (= 0 (getvar 'cmdactive))) ;_有活动命令时不起作用
      (if (> (atof (getvar "acadver")) 19.2)
          (vlax-invoke-method (vlax-get-or-create-object "WScript.Shell") 'SendKeys "temp " )
          (vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) (strcat (rtos (car p) 2 3) "," (rtos (cadr p) 2 3) " temp "))
      )
  )
)
(defun c:temp() (alert "ok") (princ))

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
vpddup + 1 + 10 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2023-5-16 00:22 | 显示全部楼层
还有这种高端操作,是不是可以鼠标手势不同命令
 楼主| 发表于 2023-5-16 19:33 | 显示全部楼层
坐等大师过来指导下!
 楼主| 发表于 2023-5-18 18:42 | 显示全部楼层
好用,非常感谢,牛!
发表于 2023-5-23 07:27 来自手机 | 显示全部楼层
xiaoyingzi 发表于 2023-5-18 01:54
(vl-load-com)

(if (not *dblclkReactor*);;0 = 打开反应器

大佬怎么实现框选后双击执行呢,直接双击容易误操作
发表于 2023-5-23 07:29 来自手机 | 显示全部楼层
xiaoyingzi 发表于 2023-5-18 01:54
(vl-load-com)

(if (not *dblclkReactor*);;0 = 打开反应器

大佬怎么实现框选后双击执行呢,直接双击容易误操作
发表于 2023-11-1 09:18 | 显示全部楼层
xiaoyingzi 发表于 2023-5-18 01:54
(vl-load-com)

(if (not *dblclkReactor*);;0 = 打开反应器

希望在布局视口激活的情况下
双击空白返回到布局
但无法实现意图

(defun c:temp()
        (if (and
                                (/= "MODEL" (strcase (getvar "ctab")))
                                (/= 1 (getvar "cvport"))
                )
                (vla-put-mspace (vla-get-activedocument (vlax-get-acad-object)) :vlax-false)
        )
(princ)
)
以上单独执行没问题
空白双击不起作用
应该是“返回布局后又进入了视口”
请问可有解决办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 02:13 , Processed in 0.372298 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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