pyautocadc循环遍历属性



我有许多具有属性的块。我正在尝试搜索WEE特定值中的属性,当我找到它时,我想将NDT更改为某个值。

名称属性 值属性
WEE A011
NDT ()

问题就在这里:

for att in Atributi.GetAttributes():
if att.TagString == 'WEE' and att.TextString == 'A011':
if att.TagString == 'NDT':

考虑到att.TagString不能同时等于WEENDT,因此第二个if语句的测试表达式永远无法验证,因为要达到它,att.TagString必须等于WEE

相反,一种可能的解决方案是对属性集进行迭代,并使用两个单独的if语句(或者更确切地说,if elif):

  1. if att.TagString == 'WEE' and att.TextString == 'A011'然后将布尔"flag"变量设置为true,这样我们以后就知道条件已经满足。

  2. 否则if att.TagString == 'NDT'将属性引用对象设置为一个单独的变量,这样我们就可以在循环之外对其进行操作。

由于我们不能依赖于在循环中遇到属性引用的顺序,因此如果仅满足其中一个条件,我们就不能退出循环,因此必须单独评估它们。

然后,在循环之外,您可以测试标志变量,如果为true,则修改第二个if语句分配的属性值。

例如:

for Atributi in acad.ActiveDocument.ModelSpace:
name = Atributi.EntityName
if name == 'AcDbBlockReference':
if Atributi.HasAttributes and Atributi.Name == blokZvar:
flg = False
for att in Atributi.GetAttributes():
if att.TagString == 'WEE' and att.TextString == 'A011':
flg = True
elif att.TagString == 'NDT':
atb = att
if flg and atb:
atb.TextString = '*'
atb.Update()

相关内容

  • 没有找到相关文章

最新更新