ezdxf如何在块布局中提取与文本关联的标签

时间:2019-03-01 20:17:00

标签: python cad dxf dxflib

如何从dxf块布局中提取与文本值关联的标签。

这是屏幕截图:

drawing file with a format layout

例如,TITLE是图形格式布局一部分的标头,DESC是与TITLE内容“ BASE”关联的文本标签。如何提取带有TITLE内容的DESC(&TITLE)。

我尝试在记事本中查看dxf文件,但没有这些标签条目。有没有一种方法不仅可以提取文本,还可以提取关联的标签?

1 个答案:

答案 0 :(得分:1)

正如 ezdxf 名称所说,ezdxf适用于DXF文件,而不适用DWG或DRW文件,与DXF不同,DWG是未记录的二进制编码AutoCAD文件格式。

也许您可以将文件导出为DXF文件以使用ezdxf进行处理:

方案1,ATTRIB附加到块引用INSERT:

doc = ezdxf.readfile('YourFile.dxf')
msp = doc.modelspace()
# block reference attributes (tags) are stored in the INSERT entity
for insert in msp.query('INSERT')
    print(str(insert))
    for attrib in insert.attribs():
        print("Tag: {}, Value: {}".format(attrib.dxf.tag, attrib.dxf.text))

方案2,ATTRIB,MTEXT或TEXT作为模型空间或图纸空间中的独立实体:

msp = doc.modelspace()
# or getting paperspace:
# psp = doc.layout('TabName')
# search for ATTRIB entities
for attrib in msp.query('ATTRIB')
    print("Tag: {}, Value: {}".format(attrib.dxf.tag, attrib.dxf.text))
# search for MTEXT entities
for mtext in msp.query('MTEXT')
    print("MTEXT content: {}".format(mtext.get_text())
for text in msp.query('TEXT')
    print("TEXT content: {}".format(text.dxf.text)

场景3,位于块定义中的实体:

for block in doc.blocks:
    print('searching in BLOCK definition {}'.format(block.name))
    # search for ATTRIB entities (or MTEXT and TEXT see above)
    for attrib in block.query('ATTRIB')
        print("Tag: {}, Value: {}".format(attrib.dxf.tag, attrib.dxf.text))
    # or like scenarion 1, search for INSERT with attached ATTRIB
    for insert in block.query('INSERT'):
        for attrib in insert.attribs()
            print("Tag: {}, Value: {}".format(attrib.dxf.tag, attrib.dxf.text))