使用ezdxf访问DXF中的INSERT / Block内容

时间:2017-08-16 21:07:10

标签: python dxf

我尝试使用python 2.7和ezdxf模块将DXF文件的内容绘制到图像中。

我实现读取和绘制LINE,POLYLINE,CIRCLE,但我不知道如何处理INSERT元素。 我想这个INSERT元素(或相关块)包含其他元素,LINE,POLYLINE等等......对吗?

以下是我访问基本DXF元素的方法:

dwg = ezdxf.readfile(filename)
modelspace = dwg.modelspace()
for e in modelspace:
   analyseElement(e)

def analyseElement(e):
   if e.dxftype() == 'LINE':
       print("DXF LINE FOUND:")
       p1=e.dxf.start
       p2=e.dxf.end
      [...]

我可以希望从INSERT内容中探索和提取基本元素吗? 谢谢大家!

1 个答案:

答案 0 :(得分:2)

BLOCK是一个可重复使用的实体集合,可以像模型空间一样用于搜索或添加DXF实体。

INSERT实体是块引用,它确定插入的块实体的位置,大小和旋转。 INSERT可以有其他ATTRIB实体,它们是由标记(名称)引用的文本值。

BLOCK定义存储在Drawing.blocks属性中:

# iterate over all existing block definitions
for block in dwg.blocks:
    for e in block:
        analyseElement(e)

INSERT实体存储在模型空间或另一个块定义中:

for insert in modelspace.query('INSERT'):
    block = dwg.blocks[insert.dxf.name]
    for e in block:
         analyseElement(e)

搜索特定的INSERT实体:

for insert in modelspace.query('INSERT[name=="MyBlock"]'):
    ...