- 积分
- 1627
- 明经币
- 个
- 注册时间
- 2003-4-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
如何在一个对象反应器的回调函数中,禁用该反应器,也就是不让该反应器继续关注事件...[br]问题是这样子的...
我有一个图框,也就是自己写的一个块,该图框呢,有一个比例尺,也就是该块的一个属性,我现在要实现的功能就是当我缩小或者放大该块参照后,这个块参照的属性(也就是比例尺)也马上随着比例尺的改变而改变,相关代码如下...- (command "insert" "tk_room" (getpoint) 1.0 1.0 0) (setq cur_blk_ref (entlast))
- (setq cur_reactor (vlr-object-reactor (list (vlax-ename->vla-object cur_blk_ref)) "tk_reactor"
- '((:vlr-modified . taoyi:cb_mod))))
- ;;;让反应器持久...
- (vlr-pers cur_reactor)
- ;;;下面是定义的回调函数,用来响应修改事件...
- (defun taoyi:cb_mod(vla_obj vlr_obj par_lst / cur_xs new_scale)
- (setq new_scale (vla-get-xscalefactor vla_obj))
- ;;先禁用这个反应器...要不然会内部出错,
- ;;;但出乎我的意料,结果是,禁用了,该反应器还是会继续监视:vlr-modified事件...
- (vlr-remove vlr_obj)
- ;;;当执行下面这个函数(该函数taoyi:mod_att没有问题)时,就会出现内存的错误,cad直接致命错误...
- ;;;上面应该禁用反应器了,并且用vlr-added-p检查,确实为nil了,但是为什么修改是,还是会出错,实在不懂...
- (taoyi:mod_att (vlax-vla-object->ename vla_obj) "att_blc" (strcat "1:" (rtos (* new_scale 200) 2 0)))
- ;;;再激活这个反应器...
- (vlr-add vlr_obj)
- (princ "\n触发器反应,修改了比例尺..")
- )
出现这个问题,我估计是监视的这个对象在修改块参照的属性时,又触发了这个:vlr-modified事件,所以致命错误...
我记得我以前实现这个功能了,好久没有用,不知道怎么搞了,想了两天,还是不行,还用过vlr-owner-remove函数去掉过监视的vla对象,还是不行,于是开始怀疑是不是在回调函数中不能vlr-remove反应器对象啊,唉,不知道以前是怎么搞的,应该不是用vlr-acdb-reactor添加的反应器...
请高手们帮我想想,我该怎么实现该功能,只要缩放,该图框(块参照)的比例尺(块参照的属性)就自动根据缩放比例变化,
是vlr-remove对象反应器呢,
还是用别的反应器类型...
|
|