明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2097|回复: 2

请解答几个关于反应器的疑问。

[复制链接]
发表于 2011-11-3 18:02:51 | 显示全部楼层 |阅读模式
如下是一个书本上的例子,就是鼠标点选画圆,然后当改变圆的半径的时候,就显示出改变的圆的半径值。
由于初学,有以下几个疑问麻烦解答:
1、反应器是否类似于中断触发的原理?关于反应器部分的程序代码是否必须在test()函数中?在CAD中调用test命令画了圆之后,按道理test函数中的所有程序包括反应器部分都应该执行完了啊,为何改变这个圆的半径时仍然会触发调用print-radius这个函数?

2、回调函数中的三个形参notifier-object、reactor-object和parameter-list是从哪儿获得值呢?



  1. (defun c:tg ()
  2.   (vl-load-com)
  3. ;下面为画圆程序
  4.   (setq mycircle
  5.    (
  6.     progn
  7.      (setq ctrpt (getpoint "\n point:")
  8.        radius (distance ctrpt (getpoint ctrpt "\nRadius:"))
  9.      )
  10.      (vla-addCircle
  11.      (vla-get-ModelSpace
  12.      (vla-get-ActiveDocument (vlax-get-acad-object))
  13.      )
  14.      (vlax-3d-point ctrpt)
  15.      radius
  16.      )
  17.    )
  18.   )
  19. ;下面为修改圆半径的反应器
  20. (setq circleReactor
  21.     (vlr-object-reactor
  22.     (list mycircle)
  23.     "Circle Reactor"
  24.     '((:vlr-modified . print-radius))
  25.     )
  26. )
  27. )
  28. (defun print-radius (notifier-object reactor-object parameter-list)   ;回调函数
  29.   (cond
  30.   (
  31.    (vlax-property-available-p
  32.    notifier-object
  33.    "Radius"
  34.    )
  35.    (princ "The radius is ")
  36.    (princ (vla-get-radius notifier-object))
  37.   )
  38.   )
  39. )

发表于 2011-12-6 08:57:43 | 显示全部楼层
1、反应器给我感觉就像vba里的触发事件,什么什么change,什么的。
2、形参是反应器给的,形式是固定的,我感觉就类似于vba里的触发事件里自带的定义变量
以上是我对反应器的浅显的看法。
发表于 2011-12-6 12:50:05 | 显示全部楼层
反应器分很多种,比如命令反应器、对象反应器、图形反应器、编辑反应器等等,反应器的回调函数形参都是CAD自动提供的,这个很有用,可以让我们了解很多信息,比如命令反应器的形参让我们知道刚才执行的命令名称,对象反应器的OWNERS形参可以让我们知道是哪个图元触发的反应器。像你例子中的圆改变了半径,这个可以用对象反应器触发,也可以在命令反应器中触发,反应器触发后就会执行回调函数,函数名称无关,自己定义。说的可能比较粗浅也含糊,建议你好好看看cad提供的花园小径的反应器教程,那个解释的很透彻。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-23 12:03 , Processed in 0.192219 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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