如何访问pyautocad中的块引用属性

时间:2018-04-12 17:11:46

标签: python autocad

如果AutoCAD图纸中的物料清单(BOM)位于“块参考”中,要使用pyautocad读取BOM,我们可以使用以下代码读取它。

from pyautocad import Autocad

acad = Autocad()
for obj in acad.iter_objects(['Block']):
        if obj.HasAttributes:
            obj.GetAttributes()

但是它引起了例外 comtypes \ automation.py,第457行,_get_value typ = _vartype_to_ctype [self.vt& ~VT_ARRAY] KeyError:9

如何使用pyautocad在AutoCAD中阅读BoM。

1 个答案:

答案 0 :(得分:1)

根据pyautocad存储库中记录的问题,https://github.com/reclosedev/pyautocad/issues/6 comtypes存在与访问数组相关的问题。 因此,为了读取块引用,我们必须使用win32com,如下所示:

import win32com.client
acad = win32com.client.Dispatch("AutoCAD.Application")

# iterate through all objects (entities) in the currently opened drawing
# and if its a BlockReference, display its attributes.
for entity in acad.ActiveDocument.ModelSpace:
    name = entity.EntityName
    if name == 'AcDbBlockReference':
        HasAttributes = entity.HasAttributes
        if HasAttributes:
            for attrib in entity.GetAttributes():
                print("  {}: {}".format(attrib.TagString, attrib.TextString))

有关详细信息,请参阅https://gist.github.com/thengineer/7157510