Pythonのezdxfを使ってDXFファイルを読んでみる

2021/09/18 categories:Python| tags:Python|ezdxf|

Pythonのezdxfを使ってDXFデータを読み込んでみました。

テスト用のDXFデータ

Solid Edge 2D Drafting 2021を使用して簡単な絵を書いて、DXFデータとして保存したデータを使用しました。

DXFファイルを読み込む

readfileでファイル名を指定するとDXFデータを読み込み、ezdxf.document.Drawingのオブジェクトとして読み込めます。DXFを読み込むだけのコードは下記の通りです。

import ezdxf
dxf = ezdxf.readfile('Draft1.dxf')
print(dxf)

DXFファイルの全てのグラフィカルエンティティを取得

DXFのEntitySectionを全て取得するにはezdxf.document.Drawing.entitiesで取得できます。EntitySectionは線や文字などのグラフィカルなデータで、図面として描画されるデータらしいです。EntitySectionを5個だけ取得するコードは下記の通りです。

import ezdxf

dxf = ezdxf.readfile('Draft1.dxf')
entities = [ entity for entity in dxf.entities ]

for entity in entities[:5]:
    print( type(entity), entity )

結果は下記の通りです。

<class 'ezdxf.entities.line.Line'> LINE(#6F)
<class 'ezdxf.entities.line.Line'> LINE(#70)
<class 'ezdxf.entities.line.Line'> LINE(#71)
<class 'ezdxf.entities.line.Line'> LINE(#72)
<class 'ezdxf.entities.line.Line'> LINE(#73)

テキストを全て取得する

EntitySectionには以下のようなデータがあるようです。

この中から文字列に関係あると思うのはMTextとTextだと思うので、これらを下記のコードで全て取得します。

import ezdxf
from ezdxf.entities.mtext import MText
from ezdxf.entities.text import Text

dxf = ezdxf.readfile('Draft1.dxf')

for entity in dxf.entities:
    if type(entity) is MText or type(entity) is Text:
        print( entity.plain_text() )

実行結果は以下のように、DXFの全ての文字列が表示されます。

注記1.指示なきエッジ部は糸面取りのこと。
だれ側
あああ
DRAWN
CHECKED
ENG APPR
MGR APPR
UNLESS OTHERWISE SPECIFIED
DIMENSIONS ARE IN MILLIMETERS
ANGLES ±X.X°
2 PL ±X.XX 3 PL ±X.XXX
NAME
DATE
Solid Edge
TITLE
SIZE
A2
DWG NO
REV
SCALE:
WEIGHT:
REVISION HISTORY
REV
DESCRIPTION
DATE
APPROVED

同様に、ezdxfを使用すればDXFデータから色々なデータが取得できます。データの取得だけではなく、データの作成なども出来るようです。

Share post

Related Posts

コメント