Присвоение значений MODEMACRO в AutoLISP
 
 
 

Для установки значений переменной MODEMACRO может также быть использован AutoLISP.

Приведенные здесь образцы процедур можно скопировать в файл формата ASCII, который должен загружаться функцией AutoLISP load.

В следующей команде, написанной на AutoLISP, определяется выражение для MODEMACRO, которое несет в себе ту же информацию, что и стандартная строка состояния. Так как в AutoLISP нет возможности переносить строки, для объединения отдельных выражений в одну строку MODEMACRO используется функция AutoLISP strcat.

(defun C:ACADMODE ( )
			(setvar "modemacro"
				(strcat
				 "Слой $(substr,$(getvar,clayer),1,8)"
				 "$(if,$(getvar,orthomode), Орто)"
				 "$(if,$(getvar,snapmode), Шаг)"
				 "$(if,$(getvar,tabmode), Планшет)"
				 "$(if,$(=,$(getvar,tilemode),0),"
				 "$(if,$(=,$(getvar,cvport),1), P)"
				 ")"
			)
			)
)

Эту AutoLISP-процедуру можно записать в файл с именем acadmode.lsp. При его загрузке будет создаваться строка состояния, являющаяся аналогом стандартной строки. Данный пример не является особо полезным применением возможностей MODEMACRO; он включен в руководство лишь в иллюстративных целях.

В следующем образце файла acad.lsp используется функция S::STARTUP для присвоения переменной MODEMACRO значения, определяемого в файле mode1.lsp.

;;; Образец файла acad.lsp, использующий S::STARTUP для загрузки
;;; файла MODE1.LSP, где определяется строка для MODEMACRO
(defun S::STARTUP ( )
			(load "mode1")
			(princ)
)
;;; Далее могут определяться и загружаться другие ;;; AutoLISP-файлы 
;;; загружены здесь

Если загружен файл AutoLISP (mode1.lsp), системная переменная MODEMACRO используется для определения содержимого строки состояния, в которой отображается приведенная далее последовательность. L: первые восемь символов имени слоя, имя чертежа и часть пути, а также первая буква имени каждого текущего режима. Независимо от длины имени слоя, положение имени чертежа остается неизменным.

;;; MODE1.LSP
;;; 
(setvar "modemacro" 
  (strcat
	"L:$(substr,$(getvar,clayer),1,30)"
	"$(substr, ,1,$(-,30,$(strlen,$(getvar,clayer)))) "
;; ^^^^^^^^ Здесь записано 8 пробелов
	"<.."
	"$(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,$(getvar,tabmode), T, )"
	"$(if,$(and,"
	"$(=,$(getvar,tilemode),0),$(=,$(getvar,cvport),1)),P)"
  )
)

Запись выражений с отступами от начала строки улучшает понимание текста программы (в частности, DIESEL-строк и файлов AutoLISP).