【问题标题】:pyautocad loop through attributespyautocad 循环遍历属性
【发布时间】:2023-01-11 04:32:19
【问题描述】:

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

Name Att Value Att
WEE A011
NDT (Null)
for Atributi in acad.ActiveDocument.ModelSpace:
    name = Atributi.EntityName
    if name == 'AcDbBlockReference':
        isciAtribute = Atributi.HasAttributes
        if isciAtribute and Atributi.Name == blokZvar:
#            print(Atributi.Name) 
           
            for att in Atributi.GetAttributes():
                 if att.TagString == 'WEE' and att.TextString == 'A011':
                     if att.TagString == 'NDT':
                         att.TextString = '*'
                         att.Update()
#                         print(" {}: {}".format(att.TagString, att.TextString))

我是 python 和 pyautocad 的新手,所以非常感谢帮助。

我曾尝试更改 WEE 中的值并在那里取得了成功,但我无法根据先前的值更改同一块内的另一个属性值。

【问题讨论】:

    标签: python autocad bricscad zwcad


    【解决方案1】:

    问题出在这里:

                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' 然后将布尔“标志”变量设置为 true,以便我们稍后知道条件已满足。

    2. else if att.TagString == 'NDT' then set 将属性引用对象赋值给一个单独的变量,这样我们就可以在循环外对其进行操作。

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2014-01-26
      • 2018-04-13
      • 1970-01-01
      • 2012-12-27
      相关资源
      最近更新 更多