块中的属性对象ID
块中的属性对象ID。大家好,又是我,我正在尝试创建一个将属性链接到文本字段的标记系统,我有一个来自@Tharwat的例程,它在单击带有属性的目标块后创建一个文本+字段(它确实适用于默认ent。属性如块单位、颜色、层、名称等),但我的问题是属性定义。它有一个不同的ObjectId,由于Tharwat创建使用的例程(car(entsel),它将只返回块ObjectId,而不返回内部的属性ObjID。
属性ObjId 8796087888544
其他目标8796087888528
你知道这可行吗?
Tharwats例程
(vl-load-com)
(defun c:TAG (/ space ss pt)
(setq space (vla-get-modelspace
(vla-get-ActiveDocument (vlax-get-acad-object))
)
)
(if (and (setq ss (car (entsel "\n Select a BLOCK : ")))
(setq pt (getpoint "\n Specify TAG Location :"))
)
(vla-addMText
space
(vlax-3d-point pt)
4.
(strcat "%<\\AcObjProp Object(%<\\_ObjId "
(itoa (vla-get-ObjectID (vlax-ename->vla-object ss)))
">%).TextString \\f \"%tc1\">%"
)
)
(princ)
)
(princ)
)
:
你好
将函数entsel替换为entsel,并在要求选择块时拾取属性本身。 它现在使用大BUT,因此属性需要可见,对吗?
谢谢Tharwat
不客气。
当然,它应该是可见的,因为用户输入功能要求您选择屏幕上可用/可见的对象。 如果属性不可见,可以通过其创建顺序获取属性,但这取决于您知道创建时的数字。
或使用“.”对于属性值,它几乎不可见,然后使用Tharwat的方法。
任何关于“如果属性不可见,则可以通过其创建顺序获取属性,但这取决于您知道创建时的数字”的快速片段 如果你看这个,当它循环时,你会得到每个属性,这样你就可以改变一个属性,知道你需要经过foreach多少次,使用另一个If来改变属性值和可见性状态。
(setq y (getint "attribute counter"))
(setq x 1)
(foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 0 )) 'getattributes)
(if (= x y)(vla-put-textstring att newstr1))
(setq x (+ x 1))
)
好的,将其视为求解。我找到了一个解决办法。
我没有使用属性,而是为设备和阀门创建了一个自定义属性。
再次感谢你。
页:
[1]