lipoyangのアイコン画像
lipoyang 2025年01月17日作成 (2025年01月17日更新) © MIT
セットアップや使用方法 セットアップや使用方法 閲覧数 70
lipoyang 2025年01月17日作成 (2025年01月17日更新) © MIT セットアップや使用方法 セットアップや使用方法 閲覧数 70

PythonでDXFのスプラインをポリラインに変換

問題

Autodesk Fusionで設計した3Dモデルから、レーザー加工機用のデータを作成し、アクリルやMDFなどの板から部品を切り出すことも多いでしょう。この場合、Autodesk FusionのスケッチをDXF形式で保存することと思います。ところが、スプライン曲線を含むスケッチをDXF形式で保存して、Inkscape等で開くとスプライン曲線が表示されないことがあります。

原因

Autodesk Fusionでは、5次のスプラインを用いて滑らかな曲線を実現しています。一方、他の多くのソフトでは3次のスプラインしかサポートしていません。そのため、Fusionから書き出したDXFファイルを他のソフトで読み込むと、スプライン曲線が表示されないことがあります。

解決方法

スプラインをポリラインに変換することで解決できます。ポリラインとは連続した線分の集まりです。曲線を細かい線分の集まりによって近似します。線分の数がじゅうぶん多ければ、ほぼ滑らかな曲線に見えます。レーザー加工の場合、デザインにもよるでしょうが、線分の数は100もあればじゅうぶんなように感じます。

PythonでDXFファイルを変換するスクリプトを作成しました。

まず、ezdxfライブラリをインストールします。

pip install ezdxf

Pythonスクリプトを以下に示します。

import ezdxf # スプラインをポリラインに変換 # input_file : 入力ファイル名 (DXF) # output_file : 出力ファイル名 (DXF) # segments : 線分の数 def spline_to_polyline(input_file: str, output_file: str, segments: int = 100): # DXFファイルを読み込み、モデル空間を取得 doc = ezdxf.readfile(input_file) msp = doc.modelspace() # モデル空間に含まれる各々のスプライン要素をポリライン要素に変換 for spline in msp.query("SPLINE"): # スプラインを、指定した数の線分で近似し、その頂点を取得 points = spline.construction_tool().approximate(segments) # 取得した頂点から新しいポリラインを作成してモデル空間に追加 msp.add_lwpolyline(points, format="xy", close=False) # 元のスプラインを削除 msp.delete_entity(spline) # DXFファイルに保存 doc.saveas(output_file) print(f"スプラインがポリラインに変換され、{output_file}に保存されました。") # 使い方 input_dxf = "input.dxf" output_dxf = "output.dxf" spline_to_polyline(input_dxf, output_dxf)
1
lipoyangのアイコン画像
奈良県在住の組込み系なんでも屋。 そんなことよりハンダ付けしようぜ!
ログインしてコメントを投稿する