概要 - AutoLISP を使用して MODEMACRO を設定する

AutoLISP を使用してシステム変数 MODEMACRO を設定します。

注: AutoLISP は、AutoCAD LT では使用できません。またシステム変数 MODEMACRO は Mac OS ではサポートされません。

AutoLISP を使用して、システム変数 MODEMACRO に文字列を割り当て、その結果をステータス バーに表示することができます。短い文字列を構成要素にして完全な MODEMACRO 文字列を組み立てるためには、AutoLISP の strcat 関数を使用します。

(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: で始まり、その後に現在の画層名の最初の 8 文字、図面名とパスの一部、そして現在のアクティブなモードそれぞれの名前の最初の 1 文字となります。図面名の位置は、画層名の長さに関係なく一定です。

;;; 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 の menucmd 関数を使用すると、AutoLISP ルーチンで DIESEL 式を評価することもできます。