CAD 図面は Python で読める!AI と組み合わせて積算をラクにする方法

「CADの図面から長さや面積を拾う作業、もっとラクにならないかな?」——積算や設計まわりの業務をしていると、そんなふうに思うこと、ありますよね。実は、CADの図面データはPythonというプログラミング言語でけっこう簡単に読み取れるんです。この記事では、CAD図面をPythonで読み取る仕組みと、AIと組み合わせたときの可能性をカジュアルに紹介します。

そもそもCADのデータって何が入ってるの?

CADの図面は、見た目は「絵」ですが、中身は線や円、文字といった部品(要素)のデータの集まりです。それぞれの線には「始点と終点の座標」「どのレイヤー(層)に属しているか」「何色か」といった情報がくっついています。

つまり、プログラムでこの情報を読み出せば、「このレイヤーの線を全部足したら何mになるか」といった計算を自動でできるわけです。

PythonでCADを読むための道具

DXFファイルなら「ezdxf」

CADのデータ形式にはいくつか種類がありますが、Pythonで扱いやすいのがDXF形式です。DXFは多くのCADソフトで保存・書き出しができる形式で、「ezdxf」という無料のライブラリを使うと中身を読み取れます。

DWGファイルはひと手間かかる

よく使われるDWG形式は仕様が公開されていないため、Pythonで直接読むのは少しハードルが高めです。CADソフトや無料の変換ツールでいったんDXFに変換してから読む、という流れが一般的です。

PDFの図面も実は読める

CADから書き出したPDFの多くは、線の情報をそのまま持っています。「PyMuPDF」というライブラリを使うと、PDFの中の線や図形の座標を取り出せます。CADデータが手元になくても、PDFから数量を拾える可能性があるんです。

実際のコードはこんな感じ

たとえば、DXF図面の直線をレイヤーごとに集計するなら、こんな短いコードで済みます。

import ezdxf
from collections import defaultdict

doc = ezdxf.readfile("plan.dxf")
msp = doc.modelspace()

totals = defaultdict(float)
for line in msp.query("LINE"):
    length = line.dxf.start.distance(line.dxf.end)
    totals[line.dxf.layer] += length

for layer, total in totals.items():
    print(f"{layer}: {total:.0f}")

これだけで「レイヤーごとの線の長さの合計」が出せます。図面の単位(mmなど)に合わせて換算すれば、そのまま数量の拾い出しに使えますね。

Pythonだけだと難しいところ

とはいえ、Pythonで読めるのは「線の座標」や「レイヤー名」といった機械的な情報だけです。困るのは、こんなケースです。

  • レイヤー分けがきちんとされていない図面
  • 同じ種類の部材なのに、図面によって描き方がバラバラ
  • どの線が何の部材なのかを、凡例や注記を読まないと判断できない

こういった「図面の意味を読み取る」部分は、プログラムだけで対応しようとするとルールがどんどん複雑になってしまいます。

そこでAIの出番

ここで役立つのが生成AIです。Pythonが線や座標を正確に読み取り、AIが「この線は何の部材か」を判断するという分担にすると、お互いの得意を活かせます。

  • Python:座標の取得、長さ・面積の計算など「正確さ」が必要な部分
  • AI:凡例や注記の解釈、部材の分類など「判断」が必要な部分

計算はPythonに任せるので、AIが数字を間違えるリスクも減らせます。最後に人が結果をチェックすれば、精度と効率のバランスがとれた積算フローになりますよ。

まとめ

CAD図面はPythonで読み取れて、DXFならezdxf、PDFならPyMuPDFといった無料の道具で数量の拾い出しを自動化できます。さらにAIと組み合わせれば、図面の「意味」まで踏み込んだ処理も見えてきます。「うちの図面でもPythonやAIで読めるかな?」と気になったら、hello-opensky までお気軽にご相談ください。