跳到主要內容
Hai 二次開發工作室

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 文件建議的起步方式:

  1. 開著 Recorder,在軟體裡手動做一次要自動化的步驟,用到的指令會寫進 Recorder 檔
  2. 想好要讓使用者輸入什麼
  3. 從文件的範例裡找最接近的一個複製來改
  4. 把 Recorder 檔的內容複製到程式裡,當成要執行的動作
  5. 把輸入變數和動作組起來,載入軟體

文件中的基本範例 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:巨集只剩一個檔案、沒有任何說明,還能維護嗎?

可以先盤點。依巨集的實際操作與檔案內容整理出功能清單,再判斷修正、改版或重新整理哪一種比較划算。如果只剩編譯過的檔案,無法直接修改,要依操作行為重新製作。

LINE諮詢開發需求