LoginSignup
3

posted at

updated at

ezdxfを使ってみよう#6~DXF読込基本編~

CADの拡張子の一つDXFを扱うezdxfによるDXFの読み込みについてまとめます。
ここでは図形情報をエクセルに収集する方法をまとめます。
本章も冗長に行きます。

前章はこちら:#5~実践!自動作図編~

1.前提確認
2.ライブラリのインポート
3.DXFの読み込み
4.図形のデータ取得
5.Pandasでデータフレーム化
6.Excelに保存・内容の確認
7.まとめ

前提確認

今回DXFはこちらのフリーの図枠を使用します。
採用理由は直線・円弧・文字列があるためです。
DXFからこれらの図形の属性情報(長さ・レイヤー・色など)をタイプ別で取得し、エクセルに整理することを本章の目標とします。
frame.jpg
●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シート
01.jpg
■文字列:textシート
02.jpg
■円弧:arcシート
03.jpg
※円は要素がないので割愛(対照実験として)
シートが作成され、データは無しです。

整然とした様に荘厳な美を感じます(?)
DXFをExcelで直開いた時の絶望と言ったら…。

まとめ

今回作成されたエクセルは以後「エクセルの表を読み込ませてezdxfで自動作図する」ステップで重要なフォーマットになります。
このフォーマット作図編で紹介したコードに対応させれば、Excelから可読的にDXFを作図することができるようになります。

また、この章のコードだけでもDXFをExcelに変換するソフトウェアの作成が可能です。Google colaboratoryに入れておくと便利です。

更に冗長になりそうなので、今回はここまでにします。
次回は他の要素やレイヤーなどの詳細な情報の取得についてまとめます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3