Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
274
Добавлен:
29.05.2015
Размер:
3.15 Mб
Скачать

MNL-файл и AutoLISP-функции для меню

Во время загрузки файла настройки AutoCAD производит поиск файла MNL с таким же именем. При обнаружении нужного файла производится его загрузка в память. Данный механизм позволяет обеспечить загрузку функций AutoLISP, необходимых для работы меню, в программе AutoCAD.

Данный механизм позволяет обеспечить загрузку функций AutoLISP в программе AutoCAD, необходимых для работы меню. Например, файл адаптации AutoCAD по умолчанию acad.cui зависит от содержимого файла acad.mnl. Этот файл содержит определения функций AutoLISP, вызываемых в макросах меню. MNL-файл загружается после файла acaddoc.lsp.

ПРИМЕЧАНИЕ Если файл настройки загружается с помощью функции command на языке AutoLISP, которая имеет формат (command "menu" "newmenu"), то соответствующий файл MNL загружается только после запуска всей процедуры AutoLISP.

В данном примере для выдачи сообщения использована функция princ. Первый вызов функции princ приводит к появлению в командной строке следующего сообщения:

Утилиты "Newmenu"… загружены.

Второй вызов princ используется для завершения функции AutoLISP. Без второго вызова princсообщение в командной строке появится дважды. Как уже упоминалось ранее, можно использовать аргумент при_ошибке при вызове функции load для повышения надежности процедур.

Предотвращение ошибок AutoLISP при выполнении файлов автозагрузки

Если в процессе выполнения AutoLISP-файла автозагрузки происходит ошибка, то оставшаяся часть файла игнорируется и не загружается.

Если файлы, указанные в файле загрузки, не существуют или отсутствуют по библиотечному пути AutoCAD, это обычно вызывает ошибки. Для предотвращения прерывания выполнения файла автозагрузки при возникновении ошибки можно использовать аргумент при_ошибке функции load. В следующем примере иллюстрируется использование данного аргумента:

(princ (load "mydocapp1" "\nФайл MYDOCAPP1.LSP не загружен.")) (princ (load "build" "\nФайл BUILD.LSP не загружен."))

(princ (load "counter" "\nФайл COUNTER.LSP не загружен.")) (princ)

214 | Глава 7 Введение в интерфейсы программирования

При успешном завершении функция load возвращает значение последнего выражения, содержащегося в файле. Обычно в этом качестве выступает либо имя самой последней определенной в файле функции, либо подсказка по использованию функции. В случае неуспешного выполнения функция возвращает значение аргумента при_ошибке. В предыдущем примере возвращаемое функцией load значение передается функции princ, в результате чего это значение отображается в командной строке.

Например, если ошибка возникает при загрузке файла AutoCAD mydocapp1.lsp, то с помощью функции princ будет отображено приведенное ниже сообщение, после чего AutoCAD продолжит загрузку оставшихся двух файлов:

Файл MYDOCAPP1.LSP не загружен.

В файлах acad.lsp, acaddoc.lsp и MNL-файлах функция command обязательно должна вызываться из конструкции defun. Для задания последовательности команд, выполняемой в момент запуска сеанса работы с чертежом, необходимо пользоваться функцией S::STARTUP.

См. также:

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

Функция 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 "Вызывается команда КШТРИХ!")

AutoLISP и Visual LISP | 215

Соседние файлы в папке Справочные материалы