關於使用 AutoLISP 來設定 MODEMACRO

使用 AutoLISP 設定 MODEMACRO 值

註: AutoLISP 無法在 AutoCAD LT for Mac OS 中使用,且 MODEMACRO 系統變數也無法在 Mac OS 中使用。

AutoLISP 可用於將字串指定至 MODEMACRO 系統變數,並顯示狀態列的結果。使用 AutoLISP 的 strcat 函數,將較短的組成字串組合成完整的 MODEMACRO 字串。

(defun C:ACADMODE()
  (setvar "modemacro"
    (strcat
        "Layer $(substr,$(getvar,clayer),1,8)"
        "$(if,$(getvar,orthomode), Ortho)"
        "$(if,$(getvar,snapmode), Snap)"
        "$(if,$(=,$(getvar,tilemode),0),"
        "$(if,$(=,$(getvar,cvport),1), P)"
        ")"
    )
  )
)

以下範例使用 S::STARTUP 函數來載入名為 mode1.lsp 的 AutoLISP 檔,並將字串設定為 MODEMACRO 系統變數。

;;; S::STARTUP loads the file MODE1.LSP which defines a MODEMACRO string
(defun S::STARTUP ( )
  (load "mode1")
 (princ)
)
;;; Additional AutoLISP files can also be defined or loaded here

當載入 AutoLISP 檔 mode1.lsp 後,會將 MODEMACRO 系統變數設定為在狀態列中顯示資訊。顯示的文字以 L: 開頭,後接目前圖層名稱的前八個字元、圖面名稱和路徑的一部份,以及每個目前作用中模式名稱的第一個字母。不論圖層名稱的長度為何,圖面名稱的位置都不會改變。

;;; MODE1.LSP
(setvar "modemacro" 
  (strcat
    "L:$(substr,$(getvar,clayer),1,30)"
    "$(substr,        ,1,$(-,30,$(strlen,$(getvar,clayer)))) "
    ;;            ^^^^^^^^ Note the 8 spaces here
    "<.."
      "$(if,$(eq,$(getvar,dwgname),UNNAMED),UNNAMED,"
        "$(substr,$(getvar,dwgname),"
          "$(if,$(>,$(strlen,$(getvar,dwgprefix)),29),"
            "$(-,$(strlen,$(getvar,dwgprefix)),29),1"
          "),"
          "$(strlen,$(getvar,dwgname))"
        ")"
      ")"
    ">"
    "$(if,$(getvar,orthomode), O, )"
    "$(if,$(getvar,snapmode), S, )"
    "$(if,$(and,"
    "$(=,$(getvar,tilemode),0),$(=,$(getvar,cvport),1)),P)"
  )
)

AutoLISP 常式也可使用 AutoLISP menucmd 函數來演算 DIESEL 表示式。