0

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

这是一个屏幕截图:

具有格式布局的绘图文件

例如,TITLE 是作为绘图格式布局一部分的标题,DESC 是与 TITLE 内容“BASE”相关联的文本标记。如何提取带有 TITLE 内容的 DESC (&TITLE)。

我尝试在记事本中查看 dxf 文件,但没有这些标签条目。有没有办法不仅提取文本,还提取相关标签?

4

2 回答 2

3

正如名称ezdxf已经说过的那样,ezdxf 与 DXF 文件一起使用,而不是与 DWG 或 DRW 文件一起使用,与 DXF 不同,DWG 是一种未记录的二进制编码的 AutoCAD 文件格式。

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

场景 1,附加到块引用 INSERT 的 ATTRIB:

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.text)
for text in msp.query('TEXT')
    print("TEXT content: {}".format(text.dxf.text)

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

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))                
于 2019-03-02T03:35:34.180 回答
1

对于那些不熟悉 ezdxf 的人(比如我),我花了一段时间才意识到在上面的场景 2 中,自 ezdxfVersion 0.10 于 2019-09-01 发布以来,MTEXT 中的 .get_text() 方法已被替换为 .text 。

因此,我不得不在上面的场景 2 中替换以下代码:

# search for MTEXT entities
for mtext in msp.query('MTEXT')
print("MTEXT content: {}".format(mtext.get_text())

具有以下内容:

# search for MTEXT entities
for mtext in msp.query('MTEXT')
print("MTEXT content: {}".format(mtext.text)

除此之外,来自 mozman 的代码可以很好地提取与布局(msp 或 psp)中的文本相关的标签。

于 2021-10-10T21:28:56.810 回答