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

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

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

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

Пусть, например, требуется переопределить стандартную команду ШТРИХ путем добавления некоторого сообщения и последующего вызова команды КШТРИХ. Для этого в файл 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.