构造对象反应器对象 (vlr-object-reactor owners data callbacks)反应器对象将被添加到图形数据库,但并不是永久反应器。 参数 owners VLA 对象的 AutoLISP 表,标识要观察的图形对象。 data 任意要与反应器对象关联的 AutoLISP 数据。如果没有数据则为 nil。 callbacks 表,其中包含下列格式的点对: (event-name . callback_function) 在这里,event-name 是表 “Object 事件”中的符号之一,callback_function 为符号,代表事件发生时要调用的函数。每个回调函数都接受如下三个参数: owner 应用事件的 VLA 对象的所有者。 reactor_object 调用回调函数的 VLR 对象。 list 与特定事件相关联的其他数据元素。该表针对特定事件的内容见表 “Object 事件回调数据”。 返回值 reactor_object 参数。
Object 事件 | 名称 | 事件 | :vlr-cancelled
| 对对象的修改已经取消。
| :vlr-copied
| 对象已被复制。
| :vlr-erased
| 对象的删除标志已被设置。
| :vlr-unerased
| 对象的删除标志已被重置。
| :vlr-goodbye
| 即将从内存中删除对象。
| :vlr-openedForModify
| 即将修改对象。
| :vlr-modified
| 对象已被修改。如果取消修改,还将激发 :vlr-cancelled and :vlr-modifyUndone。
| :vlr-subObjModified
| 对象的子图元已被修改。在修改多段线或网格顶点时触发该事件,块参照拥有的属性也会触发该事件。
| :vlr-modifyUndone
| 对对象的修改已被放弃。
| :vlr-modifiedXData
| 对象的扩展图元数据已被修改。
| :vlr-unappended
| 已从图形数据库中拆离对象。
| :vlr-reappended
| 对象已被重新附着到图形数据库。
| :vlr-objectClosed
| 对对象的修改已经完成。
|
[td]Object events callback data | 名称 | 表长度 | 参数 | :vlr-cancelled :vlr-erased, :vlr-unerased :vlr-goodbye :vlr-openedForModify :vlr-modified :vlr-modifyUndone :vlr-modifiedXData :vlr-unappended :vlr-reappended :vlr-objectClosed
| 0
|
| :vlr-copied
| 1
| 由复制操作创建的对象 (ename)。
| :vlr-subObjModified
| 1
| 已被修改的子对象 (ename)。
|
你看下上面的帮助,vlr-modified 的回调函数参数列表 参数是0,你不用管了
你的代码改成:
注意,你上面的代码里面的 myCircle是要监视的圆的VLA对象,你要把它改成你自己的,参数PARAM-LIST是回调固定要求的,传递参数的,需要它的时候你就用,长度多少上面表对每个事件有说明,你的vlr:modify 这个参数没值,长度是0.
 - (defun c:tt ()
- (vl-load-com)
- (defun print-radius (notifier-object reactor-object parameter-list)
- (cond ((vlax-property-available-p notifier-object "Radius")
- (princ "The radius is ")
- (princ (vla-get-radius notifier-object))
- )
- )
- )
- (if (setq myCircle (car (entsel "\n拾取圆:")))
- (progn (setq circleReactor
- (vlr-object-reactor
- (list (vlax-ename->vla-object myCircle))
- "Circle Reactor"
- '((:vlr-modified . print-radius))
- )
- )
- )
- )
- )
你执行上面的代码,拾取圆。 然后你修改圆的时候,半径就给你打印了。 |