2017-08-16 395 views
0

我想使用python 2.7和ezdxf模块将DXF文件的内容绘制到图像上。使用ezdxf访问DXF中的INSERT/Block内容

我实现了读取和绘制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 
     [...] 

我希望能探索并从插入内容提取物基本要素是什么? 谢谢大家!

回答

2

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

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

块定义存储在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"]'): 
    ... 
+0

它的工作奇妙!感谢mozman的帮助和这个优秀的ezdxf :) – technico