Creo Elements/Direct
Creo Elements/Direct Modeling 巨集設定:Lisp 載入、自動載入與出錯檢查
Creo Elements/Direct Modeling(舊稱 CoCreate、OneSpace Designer)的巨集, 有時是前人留下、全公司都在用,但沒人知道怎麼設定的工具。這篇依 PTC 的 Integration Kit 文件, 整理巨集的載入、自動載入、共用與出錯時的檢查方式。
不確定公司用的是 Creo Elements/Direct 還是 Creo Parametric,先看怎麼確認自己用的是哪一套。 PTC 的 Creo Elements/Direct Modeling 說明沒有繁體中文版,本篇的選單名稱以英文版為準。
本文目錄(7 節)
Creo Elements/Direct 的巨集能做什麼
PTC 文件說,Creo Elements/Direct Modeling 的指令、對話框與介面控制都是在 Lisp 層撰寫, Integration Kit 提供進入這一層的方式。巨集可以做的事例如:
- 把多個固定步驟串成一個指令,例如出圖、存檔、輸出
- 建立自己的對話框,選取零件、輸入數值後一次完成
- 批次填寫或讀取零件屬性,例如料號、材質
- 整理 BOM、依規則命名與分資料夾
做好的巨集會跟原生指令一樣在軟體裡操作,使用的人不需要懂程式。
巨集怎麼載入:指令輸入區用 (load)
Creo Elements/Direct Modeling 的指令輸入區(提示文字是 Enter Command)可以直接輸入 Lisp。 Lisp 原始檔的慣例是以 .lsp 結尾,載入時輸入,例如:
(load "C:/tools/macros/my_tool.lsp")
- 路徑用正斜線
/:PTC 文件的範例,包括 Windows 的安裝路徑C:/Program Files/PTC/…,都是這樣寫 - (load) 只載入到目前這次開啟的軟體,下次開啟不會自動載入;要每次自動載入,見下面的自訂檔
- 載入後,巨集提供的指令或對話框就能使用;Dialog Generator 做的對話框也可以在輸入區直接輸入名稱呼叫
第一個自訂指令:Recorder 與 sd-defdialog
Integration Kit 文件建議的起步方式:
- 開著 Recorder,在軟體裡手動做一次要自動化的步驟,用到的指令會寫進 Recorder 檔
- 想好要讓使用者輸入什麼
- 從文件的範例裡找最接近的一個複製來改
- 把 Recorder 檔的內容複製到程式裡,當成要執行的動作
- 把輸入變數和動作組起來,載入軟體
文件中的基本範例 my_extrude 用 sd-defdialog 定義一個對話框:輸入零件、工作平面與距離(預設 42), 按 OK 時用 sd-call-cmds 執行 extrude。對話框可以從 toolbox 的按鈕或自訂的 ribbon 分頁執行, 也可以在輸入區直接輸入 my_extrude 呼叫。18.0 起,要出現在 toolbox 的對話框必須在定義裡加:toolbox-button t。完整程式碼見 PTC 的Creating a User Defined Command。
每次開啟都自動載入:sd_customize 與四層自訂目錄
要讓巨集每次開啟都能用,把 (load …) 寫進自訂檔。主自訂檔是 sd_customize(沒有副檔名,不是 .lsp),啟動時會讀取以下四層目錄裡的 sd_customize(英文版、20.9 的說明):
| 層級 | 自訂目錄 |
|---|---|
| SD(原廠) | 安裝目錄/personality/sd_customize |
| Corp(全公司) | 系統變數 SDCORPCUSTOMIZEDIR 指定的資料夾 |
| Site(站點) | 系統變數 SDSITECUSTOMIZEDIR 指定的資料夾 |
| User(個人) | 預設 $ProfileDir/PTC/Creo Elements Direct Modeling 20.9.0.0/20.9(依版本不同);有設 SDUSERCUSTOMIZEDIR 時用它 |
- Corp 和 Site 是選用的,沒設系統變數就不會讀
- 德、義、法、西、日文版的原廠目錄是 personality 下的語言子資料夾
- 在個人層的 sd_customize 加一行
(load …)指向巨集檔,之後每次開啟都會載入 - 自訂檔的 Lisp 寫錯(例如少了右括號、字串沒有收尾),啟動時會出現 LISP error,檢查方式見下面的表;修改前先備份
要確認實際用到哪些資料夾:File > Settings > UI,在 Customizations 分頁按 Show Directories, 會在輸出對話框顯示自訂目錄與位置。要看啟動時從哪個目錄載入了哪些自訂檔,用 -v 參數啟動,主控台視窗會列出。
全公司共用:SDSITECUSTOMIZEDIR
- 把 sd_customize 與巨集放在共用資料夾,每台電腦把系統變數 SDSITECUSTOMIZEDIR 設成那個資料夾, 大家啟動時都會讀同一處;更新時換共用資料夾裡的檔案
- 個人層(User)的設定可以覆蓋 Site、Corp、SD 層,同事各自改過的設定,可能讓共用版看起來沒生效
- 使用者在畫面上調整介面時自動產生的自訂檔,可以複製到 Site 或 Corp 目錄給大家共用
- 不同版本並存時,可以把系統變數 SDVERSIONDEPCUSTOMIZEDIRS 設為 1,Site 目錄就改讀 $SDSITECUSTOMIZEDIR/20.9 這種依版本分的子資料夾(資料夾必須先建立)
- 保留一份簡單的清單:每個巨集做什麼、誰負責、最後修改日期
- 升級軟體版本前,先挑一台電腦把在用的巨集都跑過一次
升級或換電腦後巨集出錯,先檢查這些
Lisp 自訂從 SolidDesigner Rev.4 的 Integration Kit 就有。下表是 PTC 文件列出、會讓舊程式出錯的情況:
| 症狀 | 原因(PTC 文件) | 怎麼處理 |
|---|---|---|
| 啟動時出現 LISP error | 自訂檔(例如 sd_avail_cmds.cmd、toolbar 與 popup menu 檔)加了有語法錯誤的 Lisp,例如少了右括號、字串沒有收尾;或可用指令定義的動作引用了某個 package 的符號,載入 sd_avail_cmds.cmd 時那個 package 還不存在 | 用 -v 啟動,主控台會列出從哪個目錄載入了哪些自訂檔。自訂檔平常用 safe-load 載入,出錯也會繼續啟動;把系統變數 SDDONTUSESAFELOAD 設成任意值,改用一般的 load,啟動會停在第一個錯誤,方便找;引用 package 符號的動作,PTC 的做法是用雙引號包起來 |
| Lisp 檔裡的中文變成亂碼 | 沒有 BOM 的 Lisp 檔用 legacy 編碼讀取,依執行的語言版本而定(英文版是 HP-Roman8,繁體中文是 Big5) | 存成含 BOM 的 UTF-8 或 UTF-16,或在 (load) 用 :external-format 指定編碼;legacy 編碼的檔案只放 ASCII 字元,除非能確定在哪個語言版本載入 |
| 自訂對話框在 toolbox 找不到(18.0 起) | 18.0 改成 Fluent UI,Dialog Generator 對話框加進 toolbox 的預設參數也跟著改了 | 要出現在 toolbox 的對話框,在 sd-defdialog 的定義加 :toolbox-button t |
| 指令找不到(20.9) | HELIX_ADD、HELIX_REM 改為 HELIX_DIA;GENERAL_SWEEP_ADD、GENERAL_SWEEP_REM 改為 GENERAL_SWEEP_DIA | 改用新指令,原本 ADD 的加 :add_material,REM 的加 :remove_material |
| 升級主版本後,編譯過的檔案不能用 | 編譯過的程式依軟體版本與 C++ 編譯器而定,只在同一個主版本內相容 | 要有原始 .lsp 才能重新編譯 |
| 個人設定弄亂,想回到預設 | — | File > Settings > UI,在 Customizations 分頁按 Reset Settings,個人介面與持續設定會還原成預設;軟體會不存檔直接關閉,先存好模型 |
另外兩個跟環境有關的檢查方向:
- 路徑:巨集裡指定的資料夾或伺服器位置,換電腦或換版本後不存在
- 載入順序:幾個巨集互相依賴,但載入的先後順序不對,用到的函式還沒定義
- 只剩編譯過的檔案:原廠的 Lisp 編譯會把可讀的程式轉成二進位碼,無法直接修改; 編譯檔只在同一個主版本內相容,換主版本要有原始 .lsp 才能重新編譯,原始碼遺失時只能依操作行為重新製作
各版的不相容變更,整理在CoCreate 舊巨集維護的盤點清單。
需要更進一步時
前人留下的巨集沒有文件、升級後大量出錯,或想把出圖、BOM、屬性填寫做成全公司共用的工具,見Creo Elements/Direct Modeling 巨集・二次開發與CoCreate 舊巨集維護。
參考資料:PTC Creo Elements/Direct Modeling 20.9 Integration Kit(英文)Introduction、The ME Macro Programmer's Introduction to Lisp、Creating a User Defined Command、Customization Guide for Administrators and Advanced Users、Unicode and String Processing、What's New、Command Syntax Changes and Enhancements、Advanced Topics; Creo Elements/Direct Modeling 20.9 說明Change UI settings; PTC 日本官方部落格2DCAD ME10・3DCAD ME30 から Creo 誕生までの歴史(Rev.4 起有 Integration Kit)。
常見問題
Q:CoCreate 時代留下的巨集,新版 Creo Elements/Direct 還能用嗎?
Lisp 自訂(Integration Kit)從 SolidDesigner Rev.4 就有,寫法一路沿用;但 PTC 文件列出幾個會讓舊程式出錯的變更,例如 18.0 起,要放進 toolbox 的對話框必須加 :toolbox-button t;20.9 把 HELIX_ADD 換成 HELIX_DIA。編譯過的檔案只在同一個主版本內相容,換主版本要有原始 .lsp 才能重新編譯。升級前先對照這些變更,再實際測試。
Q:Lisp 檔裡的中文變成亂碼怎麼辦?
沒有 BOM 的 Lisp 檔會用 legacy 編碼讀取,legacy 編碼依執行的語言版本而定,PTC 的對照表中英文版是 HP-Roman8、繁體中文是 Big5,同一個檔案換語言版本載入,中文就可能被解讀成別的字元。把檔案存成含 BOM 的 UTF-8 或 UTF-16,或在 (load) 用 :external-format 指定編碼;PTC 建議 legacy 編碼的檔案只放 ASCII 字元,除非能確定只在哪個語言版本載入。
Q:巨集只剩一個檔案、沒有任何說明,還能維護嗎?
可以先盤點。依巨集的實際操作與檔案內容整理出功能清單,再判斷修正、改版或重新整理哪一種比較划算。如果只剩編譯過的檔案,無法直接修改,要依操作行為重新製作。