УДК 004.438AutoCAD
ББК 32.973.39
П49
Полещук Н. Н.
П49 Программирование для AutoCAD 2013–2015. – М.: ДМК Пресс, 2015. – 462 с.: ил.
ISBN 978-5-97060-066-5
Данная книга рассказывает об особенностях программирования для новых
версий AutoCAD (2013–2015). В ней разъясняется процесс написания программного
кода на четырех языках: C++, C#, LISP, VBA. Рассмотрены среды разработки
Microsoft Visual Studio 2010–2013, Microsoft Visual Basic 7.1, а также библиотеки
ObjectARX 2013–2015, AutoCAD .NET API 2013–2015. Описан механизм проектирования
интеллектуальных объектов (custom objects), которые становятся новыми
примитивами AutoCAD.
Методически книга может использоваться и при работе с предыдущими версиями
AutoCAD.
Издание предназначено для опытных пользователей AutoCAD, желающих автоматизировать
свою работу, студентов, а также для программистов, занимающихся
разработкой плагинов и внешних модулей.
УДК 004.438AutoCAD
ББК 32.973.39
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев
авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность
технических ошибок все равно существует, издательство не может гарантировать абсолютную
точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности
за возможные ошибки, связанные с использованием книги.
© Полещук Н. Н., 2015
ISBN 978-5-97060-066-5
© Оформление, издание, ДМК Пресс, 2015
Стр.3
Содержание
Предисловие .................................................................10
Глава 1. Языки программирования и объектная модель ........12
Обзор средств разработки ..................................................................... 13
Об объектной модели AutoCAD ............................................................... 14
Объекты и коллекции ...................................................................... 14
Интерфейсы ................................................................................... 19
Свойства ........................................................................................ 19
Методы .......................................................................................... 19
События ......................................................................................... 19
Простой пример использования объектной модели ....................... 19
Особенности программирования для AutoCAD 2015 ............................... 20
Доверенные каталоги ............................................................................. 20
О совместимости ................................................................................... 21
Глава 2. C++ и ObjectARX ..................................................24
Структура пакета ObjectARX .................................................................... 26
Интеграция справочной системы ObjectARX с Visual Studio ............. 27
Настройка проекта в среде Visual Studio ................................................. 27
Создание проекта в Visual Studio 2010 (AutoCAD 2013–2014) .......... 27
Настройка свойств проекта ............................................................ 30
Создание проекта в Visual Studio 2012 (AutoCAD 2015) ................... 36
Пример простого приложения ........................................................ 37
Мастера ObjectARX ................................................................................. 43
Установка мастеров ObjectARX ....................................................... 44
Виды ARX-приложений, создаваемых с помощью мастера
ObjectARX ....................................................................................... 46
Поддержка разных версий AutoCAD ........................................................ 52
Создание команд и функций ................................................................... 53
Структура файла acrxEntryPoint.cpp ................................................ 53
Пример создания команды USERMSG ............................................ 57
Пример создания LISP-функции callmymsg .................................... 57
Контекст ......................................................................................... 58
Загрузка и выгрузка ARX-приложений .................................................... 58
Библиотеки ............................................................................................ 59
Поставляемые примеры ......................................................................... 60
Стр.4
4
Содержание
Использование отладчика ...................................................................... 61
Выполнение команд AutoCAD ................................................................. 63
Примеры использования acedCommand и acedCmd ....................... 64
Особенности AutoCAD 2015 ............................................................ 68
Пример использования acedCommandS ......................................... 68
Пример использования acedCommandC ......................................... 69
Структура resbuf и буфер результатов .................................................... 70
Построение примитивов ......................................................................... 72
Использование DXF-кодов .............................................................. 73
Доступ к базе чертежа ............................................................................ 74
Использование классов примитивов ...................................................... 77
Передача данных между ARX и LISP ........................................................ 82
Геометрические вычисления ................................................................... 83
Работа с Windows API .............................................................................. 88
Окно MessageBox ........................................................................... 88
Пояснение к использованию acedGetArgs ...................................... 91
Использование MFC ............................................................................... 92
Индикатор в строке состояния ....................................................... 93
Модальные диалоговые окна .......................................................... 95
Немодальные диалоговые окна .................................................... 104
Отступление о DCL-окнах ..................................................................... 108
ObjectDBX ............................................................................................. 110
.NET и управляемый код ....................................................................... 111
Поддержка управляемого кода ..................................................... 111
Глава 3. Интеллектуальные объекты ................................116
Особенности DBX-приложений ............................................................. 117
Прокси-объекты ................................................................................... 117
Заготовка DBX-приложения с помощью мастера .................................. 120
Структура файла acrxEntryPoint.cpp .............................................. 120
Заготовка класса нового объекта ................................................. 121
Некоторые особенности заготовки класса объекта ...................... 124
Доработка проекта Custdbx .................................................................. 127
Новый вариант файла Ship.h......................................................... 129
Конструкторы ............................................................................... 131
Метод storePoints ......................................................................... 132
Метод subWorldDraw ..................................................................... 133
Метод subExplode ......................................................................... 134
Метод subTransformBy .................................................................. 135
Метод dwgOutFields ...................................................................... 136
Стр.5
Содержание
5
Метод dwgInFields ........................................................................ 137
Метод dxfOutFields ....................................................................... 138
Метод dxfInFields .......................................................................... 139
Метод subGetGripPoints ................................................................ 141
Метод subMoveGripPointsAt .......................................................... 142
Метод subList ............................................................................... 143
Настройки Custdbx перед построением ........................................ 144
ARX-проект Custarx ............................................................................... 145
Команда CSHIP ............................................................................. 146
Класс ShipJig ................................................................................ 148
Глава 4. .NET и плагины (C#) ...........................................153
Платформа .NET Framework .................................................................. 154
.NET-приложения ................................................................................. 155
Операции с реестром ................................................................... 155
Конфигурационный файл acad.exe.config ..................................... 163
Документация к AutoCAD .NET API ........................................................ 165
Каркас приложения с использованием мастера Autodesk ..................... 167
Новый проект ............................................................................... 167
Шаблоны команд и LISP-функций ................................................. 169
Прежде чем приступить к написанию плагина «с нуля», без мастера ..... 171
Создание проекта «с нуля» без использования мастера Autodesk ......... 173
Создание проекта ........................................................................ 173
Ресурсы для локализации ............................................................ 175
Написание кода ............................................................................ 181
Результаты ................................................................................... 188
Локальная и удаленная отладка ............................................................ 189
Общая идея .................................................................................. 190
Настройка .................................................................................... 191
Запуск .......................................................................................... 193
Единый код для разных версий ............................................................. 194
Работа с Database: с использованием транзакций и без них ................. 197
Редактирование базы данных чертежа без использования
транзакции ................................................................................... 197
Редактирование базы данных чертежа с использованием
транзакции ................................................................................... 203
О блокировке документа ....................................................................... 207
Интерфейс IDisposable ......................................................................... 207
Работа со стилями ................................................................................ 209
Размерный стиль .......................................................................... 209
Стр.6
6
Содержание
Стиль мультивыносок ................................................................... 227
Стиль мультилиний ....................................................................... 235
Стиль точек .................................................................................. 238
Стиль таблиц ................................................................................ 239
Текстовый стиль ........................................................................... 266
Особенности программного запуска команд в AutoCAD 2015 ............... 271
Пример использования Command ................................................ 271
Пример использования CommandAsync ....................................... 271
Графический интерфейс. Windows Forms и WPF .................................... 273
Windows Forms ...................................................................................... 274
Модальное окно ........................................................................... 274
Немодальное окно ........................................................................ 276
«Прозрачное» добавление стандартным классам AutoCAD
недостающего им функционала ............................................................ 277
Размещение плагинов. Доверенные каталоги ....................................... 281
Программная загрузка и выгрузка плагинов AutoCAD ........................... 282
Использование AcCoreConsole ............................................................. 284
Глава 5. AutoLISP и DCL ..................................................285
Интерпретатор LISP .............................................................................. 286
Программа и комментарии ................................................................... 288
Символы............................................................................................... 288
Загрузка программы ............................................................................ 291
Перечень основных функций ................................................................ 292
Зарезервированные символы .............................................................. 311
Примеры программ .............................................................................. 313
Среда разработки приложений ............................................................. 314
Обзор меню.................................................................................. 316
Панели инструментов Visual LISP .................................................. 329
Написание и проверка синтаксиса программ в текстовом
редакторе среды Visual LISP ......................................................... 330
Разработка приложений на языке LISP ................................................. 331
Средства отладки программ ......................................................... 331
Сообщения о неверном типе ........................................................ 333
Проекты и FAS-приложения .......................................................... 334
VLX-приложения ........................................................................... 337
Выполнение команд AutoCAD из программы пользователя ................... 342
Программа рисования штампа чертежа........................................ 343
Особенности программного выполнения команд
в AutoCAD 2015 ............................................................................. 346
Стр.7
Содержание
7
Оформление функций пользователя в виде новых команд AutoCAD ...... 347
Работа с примитивами.......................................................................... 348
Доступ к табличным данным и неграфическим объектам ...................... 350
Расширенные данные ........................................................................... 351
Другие способы хранения данных......................................................... 354
ActiveX .................................................................................................. 355
Функции, реализующие ActiveX .................................................... 355
Новые типы данных ...................................................................... 356
Работа с документами и примитивами ......................................... 357
Работа с меню .............................................................................. 360
Реакторы ...................................................................................... 362
Применение COM ................................................................................. 369
Создание документа Word ............................................................ 370
Пример формирования документа ............................................... 378
Язык DCL .............................................................................................. 380
Директивы .................................................................................... 381
Директива описания диалога ....................................................... 384
Элементы диалога ................................................................................ 387
Типы элементов ............................................................................ 387
Элементы с кнопкой выхода ......................................................... 388
Атрибуты элементов ..................................................................... 388
Открытие и закрытие диалоговых окон ................................................. 391
Функция load_dialog ..................................................................... 391
Функция unload_dialog .................................................................. 391
Функция new_dialog ...................................................................... 392
Функция start_dialog ..................................................................... 392
Функция done_dialog .................................................................... 393
Функция term_dialog ..................................................................... 393
Пример вызова диалогового окна ................................................ 393
Функции, работающие с элементами диалога ...................................... 394
Функция action_tile ....................................................................... 394
Функция mode_tile ........................................................................ 395
Функция set_tile ............................................................................ 396
Функция get_tile ............................................................................ 400
Функция get_attr ........................................................................... 400
Функция client_data_tile ................................................................ 401
Переменные действия .................................................................. 401
Функции, работающие со списками ...................................................... 402
Функция start_list .......................................................................... 402
Функция add_list ........................................................................... 403
Стр.8
8
Содержание
Функция end_list ........................................................................... 403
Функции, работающие с графическими элементами ............................ 403
Функция start_image ..................................................................... 403
Функция end_image ...................................................................... 404
Функция fill_image ........................................................................ 404
Функция slide_image ..................................................................... 405
Функция vector_image................................................................... 405
Функция dimx_tile ......................................................................... 405
Функция dimy_tile ......................................................................... 406
Дополнительные приемы программирования диалоговых окон ............ 406
Временный выход из диалогового окна ........................................ 406
Вложенные диалоговые окна ........................................................ 408
Применение паролей ................................................................... 409
Интеграция приложений ....................................................................... 410
Глава 6. VBA .................................................................411
Выполнение отдельных выражений VBA................................................ 412
Использование ActiveX ......................................................................... 412
Среда VBA ............................................................................................ 413
Меню ............................................................................................ 413
Панели инструментов ................................................................... 414
Проекты и их элементы ......................................................................... 415
Макросы....................................................................................... 417
Модули и процедуры .................................................................... 419
Формы ......................................................................................... 419
Типы данных ......................................................................................... 422
Обычные типы .............................................................................. 422
Массивы ...................................................................................... 423
Специальные типы ....................................................................... 423
Область видимости ...................................................................... 424
Константы и перечисления ........................................................... 425
Простой макрос .................................................................................... 425
Выполнение команд AutoCAD ............................................................... 428
Создание формы .................................................................................. 431
Элементы управления .................................................................. 431
Отображение и скрытие диалогового окна ................................... 433
Пример приложения с модальным диалоговым окном .......................... 433
Модуль программного кода .......................................................... 433
Типы процедур ............................................................................. 435
Добавление программного кода работы с формой ....................... 435
Стр.9
Содержание
9
Сжатие приложения.............................................................................. 436
Защита приложения ............................................................................. 436
Автоматическая загрузка приложений .................................................. 439
Обработка ошибок ................................................................................ 439
Оператор On Error ........................................................................ 440
Объект Err .................................................................................... 440
Отладка ................................................................................................ 441
Передача данных между VBA и LISP-средой ......................................... 443
Работа с документами .......................................................................... 444
Имена открытых чертежей ............................................................ 444
Доступ к неактивному документу .................................................. 445
Расширенные данные и словари .................................................. 446
Работа с меню ...................................................................................... 446
Получение наименований меню ................................................... 447
Динамическое изменение контекстного меню .............................. 448
Применение Windows API ...................................................................... 449
Литература..................................................................451
Алфавитный указатель ..................................................453
Стр.10