8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-10-13

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に入れておくと便利です。

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

8
6
0

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
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?