從 Python ezdxf 原始碼產生、重新產生及驗證 2D DXF 圖面。適用於 DXF 檔案、gen_dxf() 原始碼、2D 輪廓、外形、模板、墊片、面板、平面圖案、雷射/電漿/水刀切割佈局,以及 CAD 幾何的 2D 圖面匯出。
DXF 產生與驗證
來源:維護於 earthtojake/text-to-cad。
使用已安裝的本機技能檔案作為執行階段的真實來源;
儲存庫連結僅供來源追溯與版本審查。
目的
根據自然語言需求或 CAD 幾何建立或修改 2D DXF 圖面,產生驗證過的 .dxf 成品,並回傳檢查結果。DXF 原始碼為定義 gen_dxf() 並回傳 ezdxf 文件的 Python 檔案;CLI 負責輸出路徑。
支援兩種原始碼形式:
- 獨立繪圖:僅定義
gen_dxf()的 Python 原始碼。適用於純 2D 輸出 — 墊片、面板、模板、切割佈局 — 背後無 3D 模型。 - CAD 投影:在同時定義
gen_step()的 CAD 產生器原始碼中加入gen_dxf()。適用於 DXF 為 3D 零件的圖面或輪廓時;先使用$cad建立並驗證 STEP 幾何,然後在同一個原始檔中加入投影。
使用此技能的時機
當使用者要求 DXF 檔案、2D 圖面、輪廓、外形、模板、墊片、面板、平面圖案,或雷射、電漿、水刀、CNC 雕刻的切割佈局時,使用此技能。
對於 DXF 所衍生的 3D 零件或組立件,使用 $cad。對於 SendCutSend 特定的上傳預檢,使用 $sendcutsend。
預設值
除非使用者另有指定,否則使用以下預設值:
- 單位:公釐;在文件上明確設定(
doc.units = ezdxf.units.MM)。 - 幾何位於模型空間,比例為 1:1。
- 切割輪廓為封閉聚合線或封閉線/弧迴圈;開放輪廓僅用於雕刻或參考幾何。
- 對於 CAD 支援的零件,建議從同一個產生器腳本中的實際 STEP/實體拓撲推導 DXF 切割輪廓:建立 3D 形狀,選取/投影實際的平面面,將其展開為平面座標,並從這些投影的面邊線發出封閉輪廓。僅在沒有可靠的 3D 拓撲可投影時,才使用手繪參數化輪廓。
- 圖層承載意圖:將切割幾何與彎曲/摺線放在不同圖層,並在彎曲圖層名稱中包含「bend」,以便下游工具將其分類為彎曲而非切割。
- DXF 圖層是繪圖結構,而非 STEP 零件/組立件結構。
工具
啟動器位於 DXF 技能目錄中:
python scripts/dxf targets... [flags]
使用作用中的專案 Python 直譯器;將 python 視為直譯器佔位符,並使用 --help 取得完整介面。目標路徑從指令的當前工作目錄解析;從擁有成品的目錄執行,並使用相對於當前工作目錄的目標路徑。除非使用者另有要求,否則將 DXF 輸出及其 Python 產生器放在同一個目錄中,並使用相同的基底名稱。
DXF 目標是定義以下內容的 Python 原始碼:
def gen_dxf():
...
return document
純產生的 Python 目標會寫入同名的 .dxf 輸出。僅在單一純產生的 Python 目標上使用 -o/--output,或使用 SOURCE.py=OUTPUT.dxf 位置配對來指定每個目標的自訂輸出。請勿將輸出路徑放在 gen_dxf() 的回傳值中。
scripts/dxf 是產生器;它不會檢查現有的 .dxf 檔案。對於現有 DXF 的檢查,請使用 ezdxf 進行實體/圖層檢查,並使用 $cad-viewer 進行視覺審查。
工作流程
- 將需求轉換為簡短摘要:外形尺寸、孔與槽、圖層、單位、輸出路徑及驗證目標。
- 對於 CAD 投影,先使用
$cad產生並驗證 STEP 幾何,然後在同一個原始碼中加入或更新gen_dxf()。在可能的情況下,從記憶體中的 STEP/實體拓撲推導 DXF,而非重複幾何公式,使 DXF 保持為所匯出零件的直接投影/展開。 - 編寫或編輯 Python 原始碼,使用有意義的尺寸作為命名參數。
- 僅對明確的 Python 原始碼目標執行
scripts/dxf;請勿執行目錄範圍的產生。
python scripts/dxf path/to/source.py
python scripts/dxf path/to/source.py -o path/to/output.dxf
python scripts/dxf path/to/a.py=out/a.dxf path/to/b.py=out/b.dxf
- 確定性地驗證產生的 DXF,然後交接並回報。
驗證
使用有目標的 ezdxf 檢查來驗證產生的檔案,而非目視:按類型和圖層的實體計數、切割輪廓的封閉標誌、繪圖範圍,以及使用者指定的每個尺寸。
import ezdxf
doc = ezdxf.readfile("path/to/output.dxf")
msp = doc.modelspace()
profiles = [e for e in msp.query("LWPOLYLINE") if e.closed]
holes = msp.query('CIRCLE[layer=="0"]')
僅回報實際執行的檢查。
交接
在建立或修改 .dxf 成品後,當 $cad-viewer 技能已安裝時,您必須一律將明確的檔案路徑交接給 $cad-viewer,並在最終回應中包含其即時檢視器連結。如果 $cad-viewer 不可用或啟動失敗,請回報該情況,並依賴 ezdxf 檢查,而非默默省略交接。
最終回應應包含產生的檔案、回傳的檢視器連結、實際執行的驗證,以及假設。






