18
19

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を使ってみよう#1~図面作成と設定編~

Last updated at Posted at 2022-04-15

CADの拡張子の一つであるDXFを扱えるezdxfというpythonライブラリを使って、dxfの自動作図を研究します。
自分のプログラミングノートを兼ねて、シリーズでまとめていきます。
この章ではまず簡単なdxfデータを作成し、初期設定の確認をします。

次章はこちら:#2~図面描画編~

  1. ezdxfのインストール
  2. 自動作図は最短5行!
  3. エディター内でdxfを即確認できる
  4. 便利なsetupを設定
  5. setupの中身を確認

開発環境
windows 10(64bit)
Python 3.8.10
ezdxf 0.17.2

ezdxfのインストール

pip install ezdxf
pip install ezdxf 

Excelに記録した座標を読み込んでの作図や、dxfを読み込んでExcelにまとめるなどをするには、openpyxlやpandasなどのライブラリを用いるようになっていきます。

自動作図は最短5行!

線を一本作図した図面を作成します。(図形の書き方の詳細は次章:#2~図面描画編~でまとめています)

ezdxf.new
import ezdxf 
#新規のdxfを作成してバージョンを定義する
doc = ezdxf.new('R2010')
#モデルスペースを変数に定義する
msp = doc.modelspace() 
#モデルスペースに線を挿入
msp.add_line((0, 0), (10, 0))
#dxfを現在のディレクトリに保存
doc.saveas('図面1.dxf')

線が一本入ったdxfが作られました。これがezdxfの作図の基本形になります。
ezdxfの作図の基本形
参考:公式ドキュメント

エディター内でdxfを即確認できる

pythonで生成したdxfを毎回CADで読み込んで確認していては時間がかかります。
ezdxfのアドオンを利用してエディター上で即確認できるようにしましょう。
ライブラリのインポート部分と最下層の#追記部分を貼り付けるだけです。上の線一本コードを例に記載します。
アドオンはmatplotlibというグラフなどを作成するライブラリでdxfを画像化データを生成する仕組みです。
この記事でアップする画像はこの画像データを主とします。

ezdxf.addons.drawing
#追記部分
import matplotlib.pyplot as plt
import ezdxf
from ezdxf import recover
from ezdxf.addons.drawing import RenderContext, Frontend
from ezdxf.addons.drawing.matplotlib import MatplotlibBackend
#作図部分
doc = ezdxf.new('R2010')
msp = doc.modelspace()
msp.add_line((0, 0), (10, 0))
doc.saveas('図面1.dxf') #dxfの保存 確認だけなら不要
#追記部分
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ctx = RenderContext(doc)
out = MatplotlibBackend(ax)
Frontend(ctx, out).draw_layout(msp, finalize=True)
fig.show()

dxfデータのグラフ化を画像化したような感じなので、うまく表現されない部分もあります(寸法線など)参考:公式ドキュメント

便利なsetupを設定

通常ezdxfで文字列のフォントや線種を選択するには、まず個別にフォントなどを登録する作業が発生します。これを毎回やるのは非常に面倒ですし、コードの煩雑化を招きます。
ezdxfデフォルトのフォント・線種・寸法線の規格をプリセットすることにより、それらの作業の省力化を図れます。
新規のdxf作成時のコードに下記のように引数に"setup=True"を渡します。setupの中身は下記の通りで、リストで個別指定も可能です。

  • linetypes(線種)
  • styles(フォント)
  • dimstyles(寸法線)
  • visualstyles(表示スタイル(3D))
setup
doc = ezdxf.new("R2010", setup=True)#全部指定
doc = ezdxf.new("R2010", setup=['linetypes', 'styles'])#個別指定

setupの中身を確認

上記の作図基本形コードをもとに、pythonらしく各要素をリストに格納しforループで回して作図してみます。

linetypes 線種は21種類

linetypes一覧 ・ByBlock(ブロックの設定に従う) ・ByLayer(レイヤーの設定に従う) ・Continuous ・CENTER ・CENTERX2 ・CENTER2 ・DASHED ・DASHEDX2 ・DASHED2 ・PHANTOM ・PHANTOMX2 PHANTOM2 ・DASHDOT ・DASHDOTX2 ・DASHDOT2 ・DOT ・DOTX2 ・DOT2 ・DIVIDE ・DIVIDEX2 ・DIVIDE2
linetypes
linetypes =['ByBlock', 'ByLayer', 'Continuous', 'CENTER', 'CENTERX2', 'CENTER2', 'DASHED',
            'DASHEDX2', 'DASHED2', 'PHANTOM', 'PHANTOMX2' 'PHANTOM2', 'DASHDOT', 'DASHDOTX2', 
            'DASHDOT2', 'DOT', 'DOTX2', 'DOT2', 'DIVIDE', 'DIVIDEX2', 'DIVIDE2']

doc = ezdxf.new("R2010", setup=True)
msp = doc.modelspace() 

for i,linetype in enumerate(linetypes):
  msp.add_text(str(i+1)+" " + linetype, dxfattribs={'layer':'TEXTLAYER','style': j,'height':10}).set_pos((0, -20*i))
  msp.add_line(start=[100, -20*i+5], end=[500,-20*i+5], dxfattribs={'layer':'TEXTLAYER','linetype': linetype})

linetype

自動作図っぽくなってきましたね!なお線種はご使用のCADソフトに依存する場合があります。参考:公式ドキュメント

styles フォントは26種類(※日本語は別途追加の必要あり)

styles一覧 ・Standard ・OpenSans-Light ・OpenSans-Light-Italic ・OpenSans ・OpenSans-Italic ・OpenSans-SemiBold ・OpenSans-SemiBoldItalic ・OpenSans-Bold ・OpenSans ・BoldItalic ・OpenSans-ExtraBold ・OpenSans-ExtraBoldItalic ・OpenSansCondensed-Bold ・OpenSansCondensed-Light ・OpenSansCondensed-Italic ・LiberationSans ・LiberationSans-Bold ・LiberationSans-BoldItalic ・LiberationSans-Italic ・LiberationSerif ・LiberationSerif-Bold ・LiberationSerif-BoldItalic ・LiberationSerif-Italic ・LiberationMono ・LiberationMono-Bold ・LiberationMono-BoldItalic ・LiberationMono-Italic
styles =['Standard', 'OpenSans-Light', 'OpenSans-Light-Italic', 'OpenSans', 'OpenSans-Italic',
             'OpenSans-SemiBold', 'OpenSans-SemiBoldItalic', 'OpenSans-Bold', 'OpenSans-BoldItalic',
             'OpenSans-ExtraBold', 'OpenSans-ExtraBoldItalic', 'OpenSansCondensed-Bold', 'OpenSansCondensed-Light',
             'OpenSansCondensed-Italic', 'LiberationSans', 'LiberationSans-Bold', 'LiberationSans-BoldItalic',
             'LiberationSans-Italic', 'LiberationSerif', 'LiberationSerif-Bold', 'LiberationSerif-BoldItalic',
             'LiberationSerif-Italic', 'LiberationMono', 'LiberationMono-Bold', 'LiberationMono-BoldItalic', 'LiberationMono-Italic']

doc = ezdxf.new("R2010", setup=True  ,units=True)
msp = doc.modelspace() 

for i,style in enumerate(styles):
  msp.add_text("style "+str(i+1)+" " + style, dxfattribs={'layer': 'TEXTLAYER','style': style,'height':15}).set_pos((0, -20*i))

styles

参考:公式ドキュメント
なお、フォントの追加方法はこちら#3:フォントの追加

dimstyles 寸法線は12種類

dimstyles一覧 ・Standard ・EZDXF ・EZ_M_100_H25_CM ・EZ_M_50_H25_CM ・EZ_M_25_H25_CM ・EZ_M_20_H25_CM ・EZ_M_10_H25_CM ・EZ_M_5_H25_CM ・EZ_M_1_H25_CM ・EZ_RADIUS ・EZ_RADIUS_INSIDE ・EZ_CURVED
dimstyles
dimstyles =['Standard', 'EZDXF', 'EZ_M_100_H25_CM', 'EZ_M_50_H25_CM', 'EZ_M_25_H25_CM', 'EZ_M_20_H25_CM', 'EZ_M_10_H25_CM', 'EZ_M_5_H25_CM', 'EZ_M_1_H25_CM', 'EZ_RADIUS', 'EZ_RADIUS_INSIDE', 'EZ_CURVED']

doc = ezdxf.new("R2010", setup=True)
msp = doc.modelspace() 

for i,dimstyle in enumerate(dimstyles):
  msp.add_text(str(i+1)+" " + dimstyle, dxfattribs={'layer':'TEXTLAYER','style': dimstyle,'height':0.1}).set_pos((-2, -0.5*i))
  msp.add_line(start=[0, -0.5*i+0.1], end=[1,-0.5*i+0.1], dxfattribs={'layer':'TEXTLAYER'})

  dim = msp.add_linear_dim(
    base=(1,  -0.5*i+0.1),  # location of the dimension line
    p1=(0,  -0.5*i+0.1),  # 1st measurement point
    p2=(1,  -0.5*i+0.1),  # 2nd measurement point
    dimstyle=dimstyle,  # default dimension style
  )
  dim.render()

image.png

visualstyles 表示スタイルは25種類

visualstyles一覧 ・OpenSans-Light ・OpenSans-Light-Italic ・OpenSans ・OpenSans-Italic ・OpenSans-SemiBold ・OpenSans-SemiBoldItalic ・OpenSans-Bold ・OpenSans-BoldItalic ・OpenSans-ExtraBold ・OpenSans-ExtraBoldItalic ・OpenSansCondensed-Bold ・OpenSansCondensed-Light ・OpenSansCondensed-Italic ・LiberationSans ・LiberationSans-Bold ・LiberationSans-BoldItalic ・LiberationSans-Italic ・LiberationSerif ・LiberationSerif-Bold ・LiberationSerif-BoldItalic ・LiberationSerif-Italic ・LiberationMono ・LiberationMono-Bold ・LiberationMono-BoldItalic ・LiberationMono-Italic

※当方3D-CAD非所持のため確認不可です。紹介まで…。

#1まとめ

今章は図面データの作成と、setupの設定をまとめました。
次章は図形描画をまとめたいと思います。

18
19
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
18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?