明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6711|回复: 27

[求助]如何自定义双击反应器

  [复制链接]
发表于 2007-6-4 14:27:00 | 显示全部楼层 |阅读模式

我想写个反应器,在双击一个AutoCAD的实体后,不执行系统默认的命令,而是执行一段自定义的函数。

我在双击事件的反应器的回调函数里把AcDblClkEdit.arx卸载了,然后再执行自己定义的函数之后,再把AcDblClkEdit.arx加载,结果,自定义的函数是执行了,但是系统默认的命令也被执行,该怎么做才能不执行系统默认的命令???

谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2007-6-4 23:00:00 | 显示全部楼层
本帖最后由 作者 于 2007-6-4 23:02:58 编辑

兄弟用过fsxmzbbz坐标标注么?试试里面的双击反应器吧!
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=59742
在写fsxmzbbz时已将双击反应器做成了通用函数了
更多lisp源程序请参见:http://fsxm.bokee.com/
  1. (if (null *fsxm-DoubleClick-Reactor*)
  2.   (setq *fsxm-DoubleClick-Reactor*
  3.   (vlr-mouse-Reactor
  4.     "Fsxm.app"
  5.     '((:vlr-beginDoubleClick . fsxm-mouse-DoubleClick-callback))
  6.   )
  7.   )
  8. )
  9. (vl-catch-all-apply 'arxunload '("acdblclkedit.arx"))
  10. (vl-catch-all-apply 'arxload '("acdblclkedit.arx"))
  11. (defun Fsxm-Mouse-DoubleClick-Callback
  12.        (Reactor Point / selp_date strFun)
  13.   (setq DoubleClick_Point (trans (car Point) 0 1))
  14.   (if (setq selp_date (nentselp DoubleClick_Point))
  15.     (progn
  16.       (if (> (length selp_date) 2)
  17. (setq DoubleClick_en (last (last selp_date)))
  18. (setq DoubleClick_en (car selp_date))
  19.       )
  20.       (if (and (setq strFun (vlax-ldata-get
  21.          DoubleClick_en
  22.          "Fsxm-DoubleClick-Function"
  23.        )
  24.         )
  25.         (vl-symbol-value (read strFun))
  26.    )
  27. (progn
  28.    (vl-catch-all-apply 'arxunload '("acdblclkedit.arx"))
  29.    (sssetfirst nil)
  30.    (if (= (substr strFun 1 1) ":")
  31.      (vl-catch-all-apply
  32.        (read strFun)
  33.        (list DoubleClick_en DoubleClick_Point)
  34.      )
  35.      (vla-SendCommand
  36.        (vla-get-ActiveDocument (vlax-get-acad-object))
  37.        (strcat "("   strFun
  38.         " DoubleClick_en"  " DoubleClick_Point"
  39.         ") "
  40.        )
  41.      )
  42.    )
  43.    (vl-catch-all-apply 'arxload '("acdblclkedit.arx"))
  44. )
  45.       )
  46.     )
  47.   )
  48. )
  49. (defun Fsxm-Reactor-DoubleClick (en strFun)
  50.   (cond ((null strFun)
  51.   (vlax-ldata-delete en "Fsxm-DoubleClick-Function")
  52. )
  53. ((= (type strFun) 'str)
  54.   (vlax-ldata-put en "Fsxm-DoubleClick-Function" strFun)
  55. )
  56. (t
  57.   (vlax-ldata-get en "Fsxm-DoubleClick-Function" strFun)
  58. )
  59.   )
  60. )
  61. ;;;(setq en (car (entsel)))
  62. ;;;(Fsxm-Reactor-DoubleClick en "test")
  63. ;;;(defun test (DoubleClick_en DoubleClick_Point) .......
  64. ;;;适用于想轻松拥有双击时屏避系统自带编缉对话框,且调用自定义函数!
  65. ;;;如果你还不太会双击反应器或你需要一个通用而简单的调用过程我相信这就是你需要的!
  66. ;;;一个简单的调用,即可让你轻松拥有专业的双击效果!还不快试试!
  67. ;;;如果回调中没有交流函数可以用":"开头做函数名,这样回调时不会在命今行回显!
  68. 测试代码:
  69. (setq en (car (entsel)))
  70. (Fsxm-Reactor-DoubleClick en "test")
  71. (defun test (DoubleClick_en DoubleClick_Point)
  72.   (alert
  73.     (strcat "你双击的对像是:"
  74.      (VL-PRINC-TO-STRING DoubleClick_en)
  75.      "双击时的点是:"
  76.      (VL-PRINC-TO-STRING DoubleClick_Point)
  77.     )
  78.   )
  79. )
 楼主| 发表于 2007-6-5 09:14:00 | 显示全部楼层
本帖最后由 作者 于 2007-6-5 13:12:48 编辑

太感谢了,我就是看了你写的坐标标注,才想搞清这个是怎么实现的。

不用在2008里,双击时还是会执行系统默认的命令,我用的是2008英文版,如果去卸载acdblclkeditpe.arx后,也是正常的

2004和2006都是正常的,2002没试过。

感谢分享。

 楼主| 发表于 2007-6-5 09:22:00 | 显示全部楼层
试了一下,如果是属性块,当双击属性时,还是会跳出属性修改对话框,其他倒正常
发表于 2007-6-5 20:20:00 | 显示全部楼层

可能这样说:

属性不是insert中的对象,它只是与insert放在一起的组合。对属性不能当作insert一起处理.

试试将属性也附上:(Fsxm-Reactor-DoubleClick en  ...)

点评

这个反应器里有(setq en (car (entsel))) 这一句,不能对每个实体都能产生双击效果  发表于 2014-11-2 21:53
发表于 2009-4-28 16:25:00 | 显示全部楼层

感觉很近 可又遥不可及

怎样才能双击编辑标注啊?

发表于 2009-4-28 21:54:00 | 显示全部楼层
zml84说:fsxm 是好人。
发表于 2009-5-4 14:06:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-5-4 14:07:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-5-4 14:08:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 06:54 , Processed in 0.410640 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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