菜卷鱼 发表于 2015-10-30 14:54:00

属性块的反应器问题,求指点

想做一个块属性反应器,本来是想用在动态块上,通过更改块的文字属性引发动态属性的改变
但是一用到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)
    )
)

mmmmmm 发表于 2015-10-30 20:35:00

你这样设计的逻辑应该有问题,因为修改属性本身就是会触发:vlr-subObjModified事件,所以程序是进行不下去的。
建议你尝试把反应器直接绑定到属性本身上,同时尽量不要链接块的:vlr-subObjModified,试试直接连接到动态控制参数本身上。

菜卷鱼 发表于 2015-10-31 08:21:00


ok,谢谢指导。

guankuiwu 发表于 2022-7-28 17:29:00

请问这个解决了么?

菜卷鱼 发表于 2022-7-28 17:43:00


这个问题这么多年了。。。
没有直接解决,因为之前是 文字属性与动态属性相互驱动,所以矛盾了,会报错,所以方向错了
后来我改成了属性文字单向驱动动态属性,成功用了一段时间
最后发现没必要,直接做一个对话框,抓取动态属性值,在对话框里改动态属性就行

guankuiwu 发表于 2022-7-28 18:18:00

那这样把属性修改做成反应器了

guankuiwu 发表于 2022-7-30 17:21:00


厉害。思路不错!
页: [1]
查看完整版本: 属性块的反应器问题,求指点