Использование AutoLISP в макросах

Создание команд, использующих AutoLISP, является более совершенным способом использования функции адаптации.

Переменные AutoLISP и выражения можно использовать для создания макросов, выполняющих сложные задачи. Когда программа загружает файл CUI/CUIx, она также загружает файл MNL с тем же именем и в той же папке. Размещение кода AutoLISP в файле MNL является эффективным способом загрузки пользовательских команд, которые можно использовать в макросах.

Прим.: Только для Windows: можно указать дополнительные файлы AutoLISP для загрузки в редактор адаптации интерфейса пользователя (АПИ). Создание команд, использующих AutoLISP, является более совершенным способом использования функции адаптации. MNL-файлы загружаются в память вместе с файлами меню, носящими то же имя.

Примеры

Установленные значения

В данном примере рассматриваются три макроса команд, используемые для вставки блока.

Макрос команды запрашивает ширину окна.

^C^C^P(setq WINWID (getreal "\nEnter window width: ")) ^P

Макрос команды запрашивает толщину стены.

^C^C^P(setq WALLTHK (getreal "\nEnter wall thickness: ")) ^P

Макрос команды вставляет блок с именем "окно" и выдается запрос о точке вставки и угле поворота.

^C^C_INSERT window XScale !WINWID YScale !WALLTHK

Ось X блока — для текущей ширины окна, а ось Y — для текущей толщины стены.

Изменение размера ручек

В этом примере рассматриваются два макроса команд, которые увеличивают или уменьшают текущее значение системной переменной GRIPSIZE.

Макрос команды увеличивает значение системной переменной GRIPSIZE на 1.

^P(setvar "gripsize"(1+ (getvar "gripsize")))(redraw)(princ)

Макрос команды уменьшает значение системной переменной GRIPSIZE на 1.

^P(setvar "gripsize"(1- (getvar "gripsize")))(redraw)(princ)

Для добавления проверки корректности к этим макросам команд значение системной переменной GRIPSIZE не может быть меньше 0 и больше 255.

Подсказка для пользовательского ввода

В следующем примере рассматривается запрос на задание двух точек и рисование полилинии в виде прямоугольника, в углах которой находятся указанные точки.

^P(setq a (getpoint "Enter first corner: "));\+
(setq b (getpoint "Enter opposite corner: "));\+ 
pline !a (list (car a)(cadr b)) !b (list (car b)(cadr a)) c;^P
Вызов макроса, назначенного элементу раскрывающегося меню (только для Windows)

Используя следующий синтаксис, можно программно выполнить макрос элемента раскрывающегося меню:

(menucmd "Gcustomizationgroup.element_ID=|")

Использование такого синтаксиса имеет эффект только в том случае, если макрос элемента является частью меню, находящегося в строке меню программы и готового к использованию.