以下の内容はhttps://lipoyang.hatenablog.com/entry/2024/09/02/141048より取得しました。


DXFのスプラインをポリラインに変換するPythonスクリプト

問題

Autodesk Fusionで、スプライン曲線を含むスケッチをDXF形式で保存して、Inkscapeで開くとスプライン曲線が表示されない。

原因

Autodesk Fusionでは、5次のスプラインを用いて滑らかな曲線を実現している。一方、他の多くのソフトでは3次のスプラインしかサポートしていないため、Fusionから書き出したDXFを他のソフトで表示すると、スプラインが消える可能性がある。

解決方法

  1. 下絵を取り込んで手作業でトレースする
  2. スプラインをポリラインに変換する

ここでは、2 の方法をとる。具体的な手段としては、

  1. AutoCAD の SPLINEDIT コマンドを使うAutoCAD持ってない
  2. Fusionのアドインである DXF Spline To Polyline を使う → 試したがうまくいかない
  3. オンラインの変換ツールを使う → 試したがうまくいかない
  4. PythonでDXFファイルを変換するスクリプトを書く → 成功

ひとまず 4 の方法を採用することにする。

実装

まず、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)

Inkscapeで読み込むとなぜか隅に点のようなものが表示されるが、「グループ解除」を2回実行してから点だけ削除する。(暫定措置)




以上の内容はhttps://lipoyang.hatenablog.com/entry/2024/09/02/141048より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14