使用 AutoLISP 设定 MODEMACRO 值

注: AutoLISP 在 AutoCAD LT 中不可用,并且 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 表达式。

,