AutoLISP를 사용하여 MODEMACRO 설정 정보

AutoLISP로 MODEMACRO 값을 설정합니다.

주: Mac OS용 AutoCAD LT에서는 AutoLISP를 사용할 수 없으며, 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:으로 시작하며 뒤에 현재 도면층 이름의 처음 8개의 문자, 도면 이름 및 경로 부분, 현재 활성 모드의 각 이름의 첫 번째 문자가 옵니다. 도면 이름의 위치는 도면층 이름의 길이와 관계없이 변하지 않고 일정합니다.

;;; 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 표현식을 계산할 수 있습니다.