Создание команд, использующих AutoLISP, является более совершенным способом использования функции настройки AutoCAD.
Переменные AutoLISP и выражения можно использовать для создания макросов, выполняющих сложные задачи. Для эффективного использования AutoLISP в макросах следует поместить код AutoLISP в отдельный файл MNL. AutoCAD загружает файл MNL при загрузке файла НПИ с тем же именем из той же папки.
"Справка""Дополнительные ресурсы""Документация для разработчиков"MNL-файлы загружаются в память вместе с файлами меню, носящими то же имя.
Можно указать дополнительные файлы AutoLISP для загрузки в редактор настройки пользовательского интерфейса. Создание команд, использующих AutoLISP, является более совершенным способом использования функции настройки AutoCAD. Рекомендуется внимательно изучить рассматриваемые ниже примеры, а также сведения, приведенные в справочнике по AutoLISP и в руководстве разработчика AutoLISP.Для программного выполнения макроса раскрывающегося меню используйте следующий синтаксис.
(menucmd "Gгруппа_меню.element_ID=|")
Использование такого синтаксиса имеет эффект только в том случае, если макрос меню является частью меню, находящегося в троке меню AutoCAD и готового к использованию. Дополнительную информацию о синтаксисе см. в документации Справка по AutoLISP
Приложение, использующее заданные настройки для вставки блока, приводит следующие команды: [Set WINWID][Set WALLTHK][Insert Window]
^C^C^P(setq WINWID (getreal "Задайте ширину окна: ")) ^P
^C^C^P(setq WALLTHK (getreal "Задайте толщину стен: ")) ^P
^C^C_INSERT window XScale !WINWID YScale !WALLTHK
Здесь производится вставка блока “Window“, масштаб которого по оси X равен текущей ширине окна, а по оси Y - текущей толщине стены. В этом примере фактические значения извлекаются из заданных пользователем символов AutoLISP WINWID и WALLTHK. Поскольку возможность поворота зависит от пользователя, данное окно может быть повернуто на стене.
При использовании следующих команд регулировку размера ручек можно выполнять сразу.
^P(setvar "gripsize"(1+ (getvar "gripsize")))(redraw)(princ)
^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