Автоматизация проектирования
AutoLISP, DIESEL, Visual LISP и .NET: чем отличаются языки автоматизации AutoCAD и какой выбрать
# AutoLISP, DIESEL, Visual LISP и .NET: чем отличаются языки автоматизации AutoCAD и какой выбрать
Архитектор, который рисует руками всё подряд — нумерацию точек полигона, вынос координат, заполнение спецификаций, переименование блоков, простановку отметок — за день успевает в 3–5 раз меньше, чем коллега со скриптами. Поэтому на проектах ЛЭНДПРОДЖЕКТ значимая часть рутинных операций в AutoCAD автоматизирована: где-то это AutoLISP, где-то DIESEL-выражения в строках состояния, где-то — .NET-плагин, который AutoCAD вызывает по сетевому JSON-мостику.
Если вы только подступаетесь к автоматизации AutoCAD, легко запутаться: AutoLISP, Visual LISP, DIESEL, VBA, .NET, ObjectARX, plus всякие MIF/MID/DCL — что из этого «язык», что «формат данных», а что «среда»? В этой статье разложим по полочкам: чем отличаются макроязыки и среды программирования AutoCAD, что выбирать под конкретную задачу и где здесь место AI-агентов вроде Claude.
Зачем вообще автоматизировать AutoCAD
В архитектурно-проектной практике каждый разработанный лист РД содержит десятки повторяющихся операций. Часть из них — не «творчество», а механика:
- расставить, пронумеровать и привязать координатные точки на генплане посёлка;
- сгенерировать ведомость деталей и материалов из блоков;
- заменить штамп на 200 листах, обновив ФИО ГИПа и шифр;
- посчитать площади помещений и записать их в атрибуты;
- собрать сводную таблицу окон и дверей по типам;
- проверить, что ни один элемент не лежит на слое «0»;
- экспортировать DWG в PDF с правильными пресетами печати.
Любая из этих задач, повторённая 50 раз вручную, — это часы потерянного времени и риск ошибки. Тот же объём, выполненный скриптом, занимает секунды и не ошибается. Поэтому в бюро, которое делает рабочую документацию серьёзно, автоматизация — не «фишка для гиков», а часть себестоимости.
Вопрос только в том, на чём писать.
Карта инструментов автоматизации AutoCAD
В AutoCAD исторически сложилось несколько слоёв автоматизации, каждый со своей нишей:
| Инструмент | Уровень | Скорость разработки | Возможности | Когда использовать |
|---|---|---|---|---|
| Скрипты `.scr` | Командная строка | Мгновенно | Минимальные | Простая последовательность команд |
| DIESEL | Строковые выражения | Быстро | Только текст и условия | Динамические подписи, статус-бар, поля |
| AutoLISP | Скриптовый язык | Средне | Высокие | Универсальный язык автоматизации |
| Visual LISP (VLISP) | Расширенный LISP | Средне | Очень высокие | Большие проекты, ActiveX, интеграции |
| VBA / VB6 | Объектная модель | Средне | Высокие | Совместимость со старыми проектами |
| .NET (ObjectARX-managed) | Полноценный API | Долго | Максимальные | Профессиональные плагины, GUI |
| ObjectARX (C++) | Низкоуровневый API | Очень долго | Максимальные | Системные расширения, высокая производительность |
| DCL | Описание диалогов | Быстро | Только формы | Окна для AutoLISP-приложений |
Дополнительно существуют форматы данных, которые иногда путают с языками: MIF/MID — это формат экспорта из MapInfo для GIS-данных, к программированию AutoCAD напрямую не относится; DXF — текстовое представление DWG для обмена; DWS — стандарты слоёв и стилей. Это не языки, это форматы.
Разберёмся подробнее с тем, что реально используется в продакшене проектного бюро.
DIESEL: маленький язык для динамических строк
DIESEL (Direct Interpretively Evaluated String Expression Language) — самый простой из «языков» AutoCAD. По сути это макроязык для вычислений внутри строк. Он не умеет ничего «делать» с чертежом — он только формирует текст.
Где DIESEL живёт:
- в строке состояния AutoCAD (`MODEMACRO`);
- в подписях полей (Field) — динамические поля типа «Дата», «Слой», «Имя файла»;
- в макросах меню и тулбаров — там, где надо подставить значение системной переменной в команду;
- в подписях видовых экранов листа.
Пример выражения DIESEL для отображения текущего слоя в строке состояния:
```
$(getvar,clayer)
```
Или более сложное условие — показать имя файла, если активен пространственный лист:
```
$(if,$(=,$(getvar,cvport),1),Лист: $(getvar,ctab),Модель)
```
DIESEL — это «клей». Когда нужно, чтобы поле в основной надписи штампа автоматически отображало масштаб видового экрана или имя текущего листа — задействуют именно его. Писать на DIESEL калькулятор площадей или нумератор точек — нельзя: язык не имеет циклов, переменных, функций для работы с примитивами чертежа. Только строки.
Когда выбирать DIESEL:
- Нужно: поле, которое реагирует на системную переменную или контекст чертежа.
- Не нужно: что-то делать с примитивами, читать данные из файлов, рисовать.
AutoLISP: рабочая лошадка автоматизации проектных бюро
AutoLISP — это диалект LISP, встроенный в AutoCAD ещё в 1986 году. Он остаётся главным языком автоматизации для проектировщиков и инженеров, потому что:
- интерпретируется встроенным движком — не нужны компиляторы, IDE и установка SDK;
- умеет всё: создавать примитивы, читать атрибуты, работать с базой блоков, диалогами (через DCL), файлами, выборками, преобразованиями координат;
- скрипты `.lsp` — это просто текстовые файлы, которые загружаются командой `APPLOAD` или автостартом;
- сообщество за 40 лет накопило тысячи готовых утилит.
Минимальный пример — функция, которая выводит в командную строку количество выбранных объектов:
```lisp
(defun c:CountSel ( / ss)
(princ "\nВыберите объекты: ")
(setq ss (ssget))
(if ss
(princ (strcat "\nВыбрано: " (itoa (sslength ss)) " объектов."))
(princ "\nНичего не выбрано.")
)
(princ)
)
```
После загрузки этого файла в AutoCAD команда `COUNTSEL` уже доступна.
В реальной практике ЛЭНДПРОДЖЕКТ AutoLISP-скрипты решают такие задачи:
- нумерация точек полигона на генплане с автоматической простановкой координат и подписей;
- замена текста штампа на пакете DWG-файлов (в связке с `accoreconsole`);
- сбор данных из атрибутов блоков в таблицу спецификаций;
- проверка чертежа на соответствие стандарту слоёв;
- пакетная конвертация старых файлов в актуальный шаблон оформления;
- макросы для типовых операций, которых нет в стандартных командах.
Один из наших скриптов — `ppt_modern.lsp` — добавляет в AutoCAD команды `PPT`, `PT`, `SPT`, `OPT`, `PMT2` для работы с координатными точками генплана. На крупных проектах посёлков это экономит десятки часов работы.
Главное преимущество AutoLISP перед более «продвинутыми» инструментами — низкий порог входа. Архитектор, который потратил выходные на изучение синтаксиса, через неделю уже пишет полезные команды. Visual Studio, .NET, проекты, dll, регистрация плагинов — всего этого не нужно.
Главный недостаток: код на AutoLISP с ростом сложности тяжело сопровождать. Когда скрипт достигает 1500–2000 строк, становится трудно отлаживать. Здесь уже стоит смотреть в сторону Visual LISP или .NET.
Visual LISP: AutoLISP «на стероидах»
Visual LISP (VLISP) — это надстройка над AutoLISP, появившаяся ещё во второй половине 1990-х. Она добавила:
- встроенную IDE с отладчиком, точками останова, инспектором переменных;
- доступ к ActiveX-объектам — то есть ко всему, что выставляет AutoCAD через COM;
- компиляцию `.lsp` в `.fas` (быстрее) и `.vlx` (закрытый бинарный пакет, удобно для распространения);
- расширенные возможности по работе с файлами, реестром, внешними процессами.
С точки зрения языка — это всё тот же LISP, только с большим количеством встроенных функций (`vla-…`, `vlax-…`, `vl-…`).
Пример — установка слоя через ActiveX, что AutoLISP «по-старому» сделать не может:
```lisp
(defun c:SetLayerColor ( / *acad* doc layers layer)
(vl-load-com)
(setq *acad* (vlax-get-acad-object))
(setq doc (vla-get-activedocument *acad*))
(setq layers (vla-get-layers doc))
(setq layer (vla-item layers "АР_Стены"))
(vla-put-color layer 5)
(princ)
)
```
Когда выбирать Visual LISP:
- скрипт работает в ActiveX-окружении — нужно вызывать другие приложения (Excel, Word) или работать с полями документа;
- нужен отладчик — пошаговое выполнение, watch-выражения;
- хотите распространять закрытый код в `.vlx`;
- AutoLISP-проект разросся и его нужно структурировать.
VLISP — это эволюционное продолжение AutoLISP, не отдельный язык. Любой проект на чистом AutoLISP можно постепенно переводить на VLISP-функции по мере усложнения.
VBA: совместимость со старым кодом
VBA в AutoCAD — это та же Visual Basic for Applications, что в Excel и Word, только подключённая к объектной модели AutoCAD. Сейчас Autodesk считает VBA устаревшим: с 2010-х годов поддержка не развивается, начиная с AutoCAD 2025 VBA уже не входит в стандартный установщик и устанавливается отдельным пакетом Enabler.
Тем не менее VBA до сих пор живёт во многих бюро по двум причинам:
- наработана большая база макросов с 2000-х, переписывать дорого;
- инженеры, которые умеют VBA в Excel, могут переиспользовать навык.
Объективно: если вы начинаете проект автоматизации с нуля в 2026 году — VBA брать не нужно. Берите AutoLISP для быстрых задач или .NET для серьёзных.
.NET (ObjectARX managed): профессиональный API
.NET-API в AutoCAD — это управляемая обёртка над низкоуровневым ObjectARX. Пишется на C# или VB.NET, компилируется в DLL, загружается командой `NETLOAD` или через автостарт.
Что даёт .NET по сравнению с AutoLISP:
- полная объектная модель AutoCAD: транзакции, базы данных, словари, расширенные данные (xdata);
- высокая производительность — обработка тысяч примитивов в секунду без падений по памяти;
- современные GUI — WPF, WinForms, кастомные палитры;
- интеграция с любыми внешними сервисами — REST API, базы данных, файловые мосты, AI-агенты;
- нормальная отладка через Visual Studio.
Минус: порог входа существенно выше. Нужно знать C#, разобраться с типизацией ObjectARX, понимать жизненный цикл транзакций и блокировок документа, настроить проект с правильными ссылками (`AcCoreMgd.dll`, `AcDbMgd.dll`, `AcMgd.dll`), уметь распространять и регистрировать плагин.
Реальный пример из практики ЛЭНДПРОДЖЕКТ — `AutoCADBridge.cs`. Это плагин, который превращает AutoCAD в сетевой сервис: процесс на рабочем ПК с AutoCAD опрашивает файл `command.json`, выполняет произвольные C# или AutoLISP-инструкции из него и пишет результат в `result.json`. Это позволяет нашему AI-агенту, работающему на удалённом сервере, удалённо управлять чертежом — открывать DWG, редактировать примитивы, экспортировать в PDF, не имея прямого доступа к AutoCAD.
Когда выбирать .NET:
- плагин для серийного использования (внутри бюро или коммерческий);
- сложный GUI с кастомными палитрами и интеграциями;
- большие объёмы данных и высокие требования к производительности;
- интеграция с внешними сервисами, базами, AI;
- продукт, который нужно сопровождать годами и развивать командой.
ObjectARX (C++): когда .NET недостаточно
ObjectARX — это нативный C++ SDK для AutoCAD. Его используют:
- разработчики коммерческих вертикальных приложений (Civil 3D, Plant 3D и аналоги);
- те, кому нужна максимальная производительность или прямой доступ к низкоуровневым структурам;
- разработчики, которые расширяют классы примитивов AutoCAD (custom entities).
В большинстве проектных бюро ObjectARX не нужен. .NET закрывает 99% задач, а оставшийся 1% — это нишевые продукты Autodesk-партнёров.
DCL: окна диалогов для AutoLISP
DCL (Dialog Control Language) — это не язык программирования, а декларативный язык описания диалоговых окон. Использовался вместе с AutoLISP/Visual LISP до появления нормальных GUI в .NET.
Пример простого DCL:
```
sample : dialog {
label = "Параметры скрипта";
: edit_box {
label = "Шаг точки:";
key = "step";
edit_width = 10;
}
ok_cancel;
}
```
Сегодня DCL живёт в legacy-скриптах. Для нового кода — либо принимать параметры через командную строку (DOSLib, getreal/getstring), либо переходить на .NET с WPF/WinForms.
А куда здесь нейросети?
В 2025–2026 годах в автоматизацию AutoCAD стремительно ворвались AI-агенты. Логика следующая:
- AutoLISP и DIESEL — это текстовые языки. Современные модели (Claude, GPT-4o) пишут на них чище, чем многие архитекторы, которые лиспом не занимаются профессионально;
- большие модели в курсе всей объектной модели AutoCAD .NET — тоже могут генерировать рабочий C#-плагин по описанию;
- через `AutoCADBridge` (наш .NET-плагин) можно дать AI-агенту прямой контроль над AutoCAD: «нумеруй точки полигона по часовой стрелке начиная с северо-западного угла» — агент пишет AutoLISP-скрипт, отправляет в bridge, получает результат и валидирует.
Это значит, что вместо того чтобы выбирать «один язык на всю жизнь», современный архитектор выбирает связку «AI-агент + язык-исполнитель»:
- для быстрых задач — Claude генерирует AutoLISP, инженер запускает в AutoCAD;
- для серийных — AI-агент работает через .NET-bridge непрерывно;
- для подписей и динамических полей — Claude знает синтаксис DIESEL.
ЛЭНДПРОДЖЕКТ применяет такой подход в производстве: AI-агент на базе Claude отвечает за рутинную автоматизацию — генерирует и тестирует скрипты, разбирает архивы DWG, переоформляет легаси-чертежи. Архитекторы получают вычитанные команды, которые нужно только загрузить.
Что выбрать: рекомендации по сценариям
«Хочу за пару дней начать автоматизировать рутину».
AutoLISP. Минимальный порог входа, тысячи примеров онлайн, любой современный AI-ассистент пишет на нём свободно. Этого хватит для 70% задач рядового архитектора.
«Нужна динамическая подпись на штампе или поле в основной надписи».
DIESEL. Никаких других вариантов не нужно — это его прямая ниша.
«Развиваю старый проект на AutoLISP, который вырос до 3000 строк».
Visual LISP. Подключите IDE с отладчиком, разнесите код по модулям, при необходимости собирайте в `.vlx`.
«Делаю плагин для всего бюро или на продажу».
.NET (C#). Это инвестиция, но окупится: сопровождать .NET-проект в долгую дешевле, чем скрипты-портянки. И GUI приличный.
«Хочу, чтобы AI-агент сам управлял AutoCAD».
Связка .NET-bridge + AutoLISP. Bridge выполняет команды, AutoLISP генерится моделью на лету, .NET занимается транспортом и валидацией.
«Унаследовал базу макросов VBA».
Поддерживайте, но не развивайте. Новые задачи — на AutoLISP или .NET. Postupенно мигрируйте критичный функционал.
Частые заблуждения
«LISP — устаревший язык, надо сразу учить .NET».
Нет. AutoLISP — это рабочий продакшен-инструмент 2026 года. Просто потому что он встроен, лёгкий, идеально подходит под нишевые задачи и его понимают LLM. Многие старшие архитекторы ЛЭНДПРОДЖЕКТ не знают C#, но эффективно пишут лисп.
«DIESEL и LISP — это одно и то же».
Совершенно разные вещи. DIESEL — это макрос строки. LISP — это полноценный язык со списками, функциями, условиями, циклами и доступом к чертежу.
«MIF/MID — это какой-то макроязык AutoCAD».
Нет. MIF/MID — это формат экспорта из MapInfo для GIS-данных. К программированию AutoCAD напрямую отношения не имеет, хотя некоторые проектировщики обрабатывают такие файлы для подложки генплана.
«Если использовать AI, то сами языки знать уже не надо».
Знать на уровне «прочитал код и понял, что он делает» — обязательно. AI-агент может сгенерировать рабочий скрипт, но за результат отвечает инженер. Он же отвечает за то, что скрипт не удалит важный слой и не превратит чертёж в кашу.
Заключение
Языки автоматизации AutoCAD — это спектр инструментов от простейших макросов DIESEL до полноценных .NET-плагинов с GUI. Не существует «правильного» одного языка: AutoLISP закрывает базовые потребности любого архитектора, DIESEL — динамические поля, Visual LISP — серьёзные проекты со сложной логикой, .NET — продукты для всего бюро. AI-агенты сегодня снимают порог входа в каждый из них: достаточно сформулировать задачу, и Claude или GPT сгенерирует рабочий скрипт.
ЛЭНДПРОДЖЕКТ ведёт автоматизацию AutoCAD на проектах посёлков, жилых комплексов, общественных зданий и интерьеров с 2014 года. Если у вас есть рутинная операция в AutoCAD, которую вы повторяете десятки раз в день, — мы можем оценить и автоматизировать её под ваш процесс. Напишите на mail@landproject.net, опишите задачу, получите расчёт.