CADの拡張子の一つDXFを扱うezdxfによるDXFの読み込みについてまとめます。
ここでは図形情報をエクセルに収集する方法をまとめます。
本章も冗長に行きます。
1.前提確認
2.ライブラリのインポート
3.DXFの読み込み
4.図形のデータ取得
5.Pandasでデータフレーム化
6.Excelに保存・内容の確認
7.まとめ
前提確認
今回DXFはこちらのフリーの図枠を使用します。
採用理由は直線・円弧・文字列があるためです。
DXFからこれらの図形の属性情報(長さ・レイヤー・色など)をタイプ別で取得し、エクセルに整理することを本章の目標とします。
●DXFダウンロード先
AutoCAD操作説明書 [ 初心者のためのAutoCAD(オートキャド)使い方情報サイト]様
ライブラリのインポート
まずはライブラリのインポートから。
データ分析ライブラリのpandasが必要となります、pandasの詳細は後述します。
import ezdxf
import pandas as pd #"as pd" が一般的
DXFの読み込み
DXFの内容を変数dxfに格納します
dxf = ezdxf.readfile('R12-A3ap100.dxf') #読込dxfのpath
図形のデータ取得
各要素をリストで変数に格納します、こちらが基本形になります。
lines = doc.query("LINE") #docから線要素を全て取り出す
lines = [entity.dxfattribs() for entity in lines] #内包表記でリスト化しつつ、図形の属性を抽出します。
#以下リスト内包表記に組み込んで上記を1行で表現します
circles = [entity.dxfattribs() for entity in doc.query('CIRCLE')]
arcs = [entity.dxfattribs() for entity in doc.query('ARC')]
texts = [entity.dxfattribs() for entity in doc.query('TEXT')]
参考:要素の抽出方法について→公式ドキュメント(英語)
なお、公式ドキュメントに、
All DXF names have to be uppercase.
とありますので、query内の図形タイプは全て大文字で記載します。(線="LINE",円弧="ARC"など)
このqueryの詳細な機能は次章に紹介します。
参考:queryの書き方→公式ドキュメント(英語)
Pandasでデータフレーム化
データ分析ライブラリPandas(=pd) で取得したentity情報のリストをデータフレーム化して、エクセル保存の前準備をします。
私はデータ収集なども行っておりますのでPandasに馴染みがありますが、ここでは「エクセルに変換するライブラリ」 と割り切って問題ありません。
#データフレーム変数 = pd.DataFrame(要素リスト)
df_line = pd.DataFrame(lines)
df_circle = pd.DataFrame(circles)
df_arc = pd.DataFrame(arcs)
df_text = pd.DataFrame(texts)
下記のように一連の作業を1行にしてしまっても良いと思います。
ちょっと何やってるかわからない感じになりますが、図形1種に1変数のみ使用という感じなので、アリだと思います。
df_text = pd.DataFrame([entity.dxfattribs() for entity in doc.query('TEXT')])
なお、私はやりません(;^ω^)
データ収集の時と使い方を統一しておきたいだけで、可読性以外の問題はありません。
Excelに保存・内容の確認
Pandas.ExcelWriterで1つのブックへ、各要素をシート別に保存します。
with pd.ExcelWriter('dxf_excel.xlsx') as writer: #保存するブック名を指定
df_line.to_excel(writer, sheet_name='line') #データフレームとシート名をそれぞれ指定
df_text.to_excel(writer, sheet_name='text')
df_circle.to_excel(writer, sheet_name='circle')
df_arc.to_excel(writer, sheet_name='arc')
これでExcelのエクスポートは完了です。
早速Excelを開いてみましょう。各要素がシートごとに整理されているのがわかると思います。
■線:lineシート
■文字列:textシート
■円弧:arcシート
※円は要素がないので割愛(対照実験として)
シートが作成され、データは無しです。
整然とした様に荘厳な美を感じます(?)
DXFをExcelで直開いた時の絶望と言ったら…。
まとめ
今回作成されたエクセルは以後「エクセルの表を読み込ませてezdxfで自動作図する」ステップで重要なフォーマットになります。
このフォーマット作図編で紹介したコードに対応させれば、Excelから可読的にDXFを作図することができるようになります。
また、この章のコードだけでもDXFをExcelに変換するソフトウェアの作成が可能です。Google colaboratoryに入れておくと便利です。
更に冗長になりそうなので、今回はここまでにします。
次回は他の要素やレイヤーなどの詳細な情報の取得についてまとめます。