編集履歴一覧に戻る
lipoyangのアイコン画像

lipoyang が 2025年01月17日13時05分51秒 に編集

コメント無し

本文の変更

## 問題

-

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

+

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

## 原因 Autodesk Fusionでは、5次のスプラインを用いて滑らかな曲線を実現しています。一方、他の多くのソフトでは3次のスプラインしかサポートしていません。そのため、Fusionから書き出したDXFファイルを他のソフトで読み込むと、スプライン曲線が表示されないことがあります。 ## 解決方法 スプラインをポリラインに変換することで解決できます。ポリラインとは連続した線分の集まりです。曲線を細かい線分の集まりによって近似します。線分の数がじゅうぶん多ければ、ほぼ滑らかな曲線に見えます。レーザー加工の場合、デザインにもよるでしょうが、線分の数は100もあればじゅうぶんなように感じます。 PythonでDXFファイルを変換するスクリプトを作成しました。 まず、ezdxfライブラリをインストールします。 ``` import ezdxf ``` Pythonスクリプトを以下に示します。 ``` python # スプラインをポリラインに変換 # 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) ```