Функция S::STARTUP: выполнение после завершения инициализации чертежа
 
 
 

Для выполнения операций по настройке после инициализации чертежа можно написать функцию S::STARTUP.

Все автоматически загружаемые файлы LISP (acad.lsp, acaddoc.lsp и MNL) размещаются в памяти до завершения полной инициализации чертежа. Обычно это не создает проблем, за исключением тех случаев, когда используется функция command; надежная работоспособность данной функции возможна только после завершения инициализации чертежа.

Если пользовательская функция S::STARTUP содержится в файлахacad.lsp,acaddoc.lsp , или MNL, то она выполняется при каждом создании нового или открытии имеющегося чертежа. Таким образом, для выполнения операций по настройке можно написать функцию S::STARTUP и поместить ее в автоматически загружаемый LISP-файл.

Пусть, например, требуется переопределить стандартную команду ШТРИХ таким образом, чтобы при вводе ее имени вызывалась команда КШТРИХ и выдавалось соответствующее сообщение. Для этого в файл acaddoc.lsp нужно добавить следующий код:

(defun C:ШТРИХ ( ) 
  (alert "Вызывается команда КШТРИХ!")
  (princ "\nДля вызова встроенной команды ШТРИХ введите ВСТРШТРИХ.\n")
  (command "КШТРИХ")
  (princ)
) 
(defun C:ВСТРШТРИХ ( ) 
  (command ".ШТРИХ")
  (princ)
) 
(defun-q S::STARTUP ( ) 
  (command "нетком" "штрих") 
  (princ "\nПереопределение ШТРИХ на КШТРИХ!\n")
)

Перед завершением инициализации чертежа с помощью функции defun задаются новые описания команд ШТРИХ и ВСТРШТРИХ. После завершения инициализации чертежа вызывается функция S::STARTUP, которая отключает стандартное описание команды ШТРИХ.

ПримечаниеДля того чтобы функция S::STARTUP не переопределяла функции с таким же именем из других файлов, ее следует определить с помощью функции defun-q, а не defun.

Так как функция с именем S::STARTUP может быть определена в различных файлах (acad.lsp, acaddoc.lsp, файлах MNL или любых других файлах AutoLISP), то определенную ранее функцию S::STARTUP можно переопределить. В следующем примере приводится способ определения данной функции, позволяющий избежать подобных ситуаций.

(defun-q MYSTARTUP ( )

... автоматически выполняемая функция ...

)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))

В результате такого определения код предыдущей загруженной функции S::STARTUP добавляется к коду новой функции S::STARTUP. Этот способ определения можно использовать независимо от ранее существовавшей функции S::STARTUP.