属性块的反应器问题,求指点
想做一个块属性反应器,本来是想用在动态块上,通过更改块的文字属性引发动态属性的改变但是一用到vla-getattributes 就报错了,所以后面的东西就整不下去了,
报错内容是;错误:Automation 错误。 对象已打开进行通知;
求指点啊!(defun c:ff ( )
(setq ss(ssget))
(setq circleReactor (vlr-object-reactor (mapcar 'vlax-ename->vla-object (sslist ss))
"getattributes" '((:vlr-subObjModified . b_drive))))
(prin1)
)
(defun b_drive (v r e )
(setq a v)
(setq attlist (vlax-safearray->list
(vlax-variant-value (vla-getattributes a)))) ;;;;;;;;;;;;到这来就报错了
(foreach att attlist
(setq att_txt (vla-get-textstring att))
(setq tag_text (vla-get-TagString att))
(setq stag (cons tag_text att_txt))
(setq attxtlist (cons stag attxtlist))
(reverse attxtlist)
)
)
你这样设计的逻辑应该有问题,因为修改属性本身就是会触发:vlr-subObjModified事件,所以程序是进行不下去的。
建议你尝试把反应器直接绑定到属性本身上,同时尽量不要链接块的:vlr-subObjModified,试试直接连接到动态控制参数本身上。
ok,谢谢指导。 请问这个解决了么?
这个问题这么多年了。。。
没有直接解决,因为之前是 文字属性与动态属性相互驱动,所以矛盾了,会报错,所以方向错了
后来我改成了属性文字单向驱动动态属性,成功用了一段时间
最后发现没必要,直接做一个对话框,抓取动态属性值,在对话框里改动态属性就行 那这样把属性修改做成反应器了
厉害。思路不错!
页:
[1]