Как программировать в автокаде
Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.
Предыстория
Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.
Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.
Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.
1. Подготовка необходимых инструментов
1.1. Собственно AutoCAD
Тут все понятно. Качайте с официального сайта Autodesk, ставьте, 30 дней наслаждайтесь прекрасным инструментом. Потом узнайте цену покупки и повесьтесь. Для разработчиков действует специальная программа ADN , по которой можно получать девелоперские лицензии на продукты Autodesk. Стоимость базовой версии подписки, как указано на сайте, составляет от 700 долларов в год.
1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD
Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:
Версия SDK и ссылка для загрузки | Совместимость с версиями AutoCAD |
---|---|
2011 | 2011, 2012 |
2010 | 2010, 2011, 2012 |
2009 | 2009 |
2008 x86 | 2008, 2009 x86 |
2008 x64 | 2008, 2009 x64 |
2007 | 2007, 2008, 2009 x86 |
2006 | 2006 |
2005 | 2005, 2006 |
2004 | 2004, 2005, 2006 |
2002 | 2002 |
2000i | 2000i, 2002 |
2000 | 2000, 2000i, 2002 |
R14 | R14 |
Лично меня в свое время очень заинтересовал вопрос обратной совместимости ObjectARX. Как-то раз заказчик спросил: «А с какими версиями AutoCAD сможет работать программа?», и мне пришлось изрядно времени потратить на поиски ответа. В целом, ответ звучит так: «Autodesk поддерживает обратную совместимость в течение трех лет ». Какие версии совместимы между собой, можно посмотреть под спойлером выше.
Пока задачи перекомпилировать программу с другими библиотеками у меня не возникало. Думаю, что это хорошо: перспектива создавать отдельную версию продукта для других выпусков AutoCAD не радует совершенно.
1.3. MS Visual Studio 2013 Express
Великолепная IDE! Больше про нее и говорить-то нечего. Ссылок для скачивания масса – например, вот.
Можно, конечно, использовать и более ранние версии. Я начинал работу над проектом в MS Visual Studio 2010, но потом решил перейти на более современный выпуск.
1.4. Поисковик, усидчивость, здравый смысл
- нет привычных всплывающих подсказок о назначении класса, свойства или метода;
- нет подробной справки.
В конце этой статьи приведен список ресурсов, на которых можно позадавать вопросы и, если повезет, получить на них ответы.
2. Создание проекта библиотеки
Вкратце продублирую основные этапы:
2.1. Создать проект «Библиотека классов» («Class Library»)
Эти DLL-файлы находятся в папке с именем inc- . Так, в моем случае я добавляю ссылки на библиотеки из папки C:\ObjectARX 2010\inc-win32.
у меня дома установлена 32-разрядная ОС, у заказчика – 64-разрядная. Пока серьезных проблем с совместимостью не возникало. Но однажды я все же напоролся на то, что у меня функция возвращала Int32 , а у заказчика – Int64 . Линковщик ОЧЕНЬ расстраивался. Нужно иметь эту особенность в виду.
Первое знакомство с API у меня заключалось в лихорадочных попытках скомпилировать хоть какой-нибудь из примеров, щедро разбросанных по Сети. И что сλка характерно, компилироваться они упорно не хотели, ругаясь на неизвестные пространства имен и классы. В попытках собрать свой первый проект я с горя включил в него чуть ли не все DLL-файлы, которые шли с ObjectARX. Плохой способ – так делать не надо.
Ну, это вопрос не ко мне. Я только могу сказать, что в начале примеров обычно идет перечисление используемых пространств имен – скажем, так:
То, что начинается со слова «Autodesk», – это и есть те дроиды пространства имен, которые мы ищем. Теперь осталось разыскать контейнеры, которые их содержат. Исчерпывающего перечня сопоставлений я найти не смог, поэтому все проверялось методом научного тыка. Если есть более правильный способ, было бы интересно его узнать…
А пока – вот список DLL-файлов, которые я использую в проекте, и содержащихся в них пространств имен:
Теперь в любом месте этого файла можно вместо Autodesk.AutoCAD.ApplicationServices.Application писать acadApp .
Есть смысл провернуть такую операцию с наиболее часто употребляемыми классами. Непременно так делайте, код будет компактнее и понятнее. Цинизм данного совета заключается в том, что к тому моменту, когда вы наконец поймете, какие же классы являются у вас наиболее часто употребляемыми, что-то менять будет уже сильно лень.
2.3. Написать код плагина
Все очень просто. Вначале мы указываем необходимые пространства имен. Нам потребуются два.
Таким образом, всего необходимо добавить три ссылки:
UPD. 09.04.2018. Важное дополнение от lasteran: В новых версиях (предположительно начиная с AutoCAD 2013) класс CommandMethod содержится не в AcDBMgd.dll, а в AcCoreMgd.dll, так что придётся добавить ссылку ещё и на эту библиотеку. Учтите это, если работаете с новой версией!
Затем мы объявляем класс Commands . Именно он и будет «отправной точкой» плагина. Наш класс унаследован от интерфейса IExtensionApplication , поэтому в нем могут быть реализованы методы Initialize и Terminate . Первый из них автоматически выполняется при загрузке плагина, второй – при выгрузке.
AutoCAD не предоставляет разработчику возможность выгрузить плагин после того, как он будет загружен. Поэтому реально метод Terminate будет вызываться только в одном случае – при закрытии самого AutoCAD.
Почитать поподробнее про методы Initialize и Terminate можно тут (rus) и там (англ.).
Чтобы «превратить» созданный метод в команду AutoCAD, применяется атрибут CommandMethod . В скобках после него указывается имя создаваемой команды, которое можно будет использовать непосредственно в среде AutoCAD.
После сборки этого проекта у нас получится готовый к употреблению плагин.
2.4. Загрузить созданный плагин
Нужно запустить AutoCAD и выполнить команду «NETLOAD»:
Затем в открывшемся окне указать путь к файлу плагина:
Если при загрузке плагина произошла критическая ошибка, она будет выведена в консоль AutoCAD:
если плагин не смог загрузиться из-за ошибки, то перед тестированием очередного (исправленного) варианта нужно закрыть и заново запустить AutoCAD. В противном случае он может отказаться загружать плагин, даже если ошибок в коде уже не будет.
Теперь, когда плагин загружен, можно выполнить нашу тестовую команду:
… и увидеть результат:
Работает. Теперь можно закрывать AutoCAD.
2.5. Отладить плагин (при необходимости)
Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.
LISP или AutoLISP это традиционный язык программирования для AutoCAD. С его помощью можно создавать свои программы в любой области проектирования. Создание таких программ избавляет пользователя от типовых, рутинных операций и существенно повышают производительность работы в AutoCAD.
В этом уроке мы рассмотрим пример простой программы на языке LISP. Подробно разберем ее программный код. В следующих уроках, двигаясь от простого к сложному, мы будем ее постепенно усложнять и модифицировать. Я надеюсь, что в результате, вы получите знания, которые сделают вашу работу в Автокад более эффективной.
Приставленные примеры предполагают, что у читателя уже есть начальные знания работы в AutoCAD.
Для выполнения примера нам понадобиться только программа AutoCAD. Специальная инсталляция AutoLISP не требуется. Он поставляется с каждой копией AutoCADа.
И первое с чего мы должны начать – это поставить перед собой задачу. И в качестве примера я предлагаю написать программу, которая попросит нас указать базовую точку р1. и после указания, построит куб со сторонами 200.
Программный код мы будем писать в редакторе «Visual Lisp». Чтобы его открыть, в начале нужно запустить AutoCAD.
Далее на ленте выбираем вкладку «Управление» и на панели «Приложение» щелкаем на пункте «Редактор Visual Lisp»
Создаем новый файл: щелкаем на кнопку обведенную красным .
И в открывшимся окне, набираем текст нашей программы или копируем его с сайта
Программный код на языке LISP:
В программном коде после «;» можно оставлять свои комментарии, которые в дальнейшем никак не влияют на выполнение команды.
Давая имя командам и файлам, стараемся присвоить им уникальные имена. Чтобы в дальнейшем избежать пересечения со стандартными командами или с командами созданными другими пользователями. Я назову наш файл и команду «mp_kub» (подразумевая my program Kub)
В конце сохраняем нашу программу в удобном для вас месте. Я сохраняю ее в папке «D:/MyLisp» под именем «mp_kub».
Теперь, чтобы использовать нашу программу в AutoCADе, ее предварительно нужно загрузить. Щелкаем по кнопке выделенной зеленым .
Если программа набрана без ошибок. Ниже в окне «Консоль Visual LISP» появиться надпись о том, что наша программа загружена.
Переходим в AutoCAD, вводим «mp_kub» в командную строку и нажимаем Enter.
Появится подсказка: «Укажите базовую точку :» Щелкните в любой точки рабочего окна AutoCAD и он нарисует куб.
ДОПОЛНИТЕЛЬНЫЕ ПОЯСНЕНИЯ .
Давайте более подробно разберем функции языка LISP, которые мы использовали в программном коде.
Создание функции пользователя с именем «mp_kub».
Префикс «с:» означает, что эту функцию можно будет использовать как стандартную команду AutoCAD. Достаточно ввести имя в командную строку AutoCADа.
( / p1 p2 p3 p4 p5 p6 p7 p8 ) – временные переменные, которые используются в выражениях.
Функция getpoint – даёт возможность пользователю указать точку при помощи мыши.
Результатом функции будут координаты точки указанные пользователем.
«\nУкажите базовую точку : » — текст приглашения.
Префикс «\n» означает переход на новую командную строку.
Функция присвоения (setq p1 ) позволяет сохранить в переменной p1.
Функция ( polar p1 0 200 ) вычисляет координаты точки отстоящей от точки р1 на расстояние 200 в направлении луча образующим с ось Х угол 0 радиан.
( setq p2 ) — Затем эти координаты присваиваются р2 .
Функция command выполняет стандартные функции AutoCADа. В нашем случаи проводит отрезки по точкам с координатами р1, р2, р3, р4, р1 .
«_line» — имя стандартной функции AutoCAD.
«» — имитирует нажатие клавиши .
Таким образом в этой статье мы узнали:
Как запускать редактор Visual Lisp.
Как создавать программу на языке Lisp.
Как загружать программу и как запускать ее на выполнение.
Чтобы лучше, понять, как работают функции, поэкспериментируйте с ними, поменяйте какие либо значения, посмотрите, как это повлияет на результат.
В дополнение к этому уроку смотрите видео: Пример простой программы на LISP.
В следующем уроке мы будем учится создавать кнопку для запуска своих программ.
Пишите в комментариях: все ли у вас получилось?; трудно ли было выполнить этот урок?; где у вас возникли трудности? Я с удовольствием отвечу на все ваши комментарии.
Любой чертеж может быть разбит на простейшие элементы, примитивы. В этом уроке мы познакомимся с примитивом, который называется «Прямоугольник».
И рассмотрим следующие вопросы:
Как нарисовать дугу в Автокаде.
Как нарисовать дугу в Автокаде? Для этого в программе Автокад существует несколько способов.
В этом уроке мы рассмотрим:
Как нарисовать круг в Автокаде.
Любой чертеж может быть разбит на простейшие элементы, примитивы. В этом уроке мы познакомимся с примитивом, который называется «Круг».
И рассмотрим следующие вопросы:
Автоматизация проектирования. Отвод.
В этой статье мы продолжим процесс автоматизации проектирования систем вентиляции.
Автоматизация проектирования.
Одним из эффективных способов автоматизации процесса проектирования в Автокад, может послужить создание своих программ на языке LISP.
Если в вашей работе есть типовые, часто встречающиеся операции, для них можно написать программу, которая будет выполняться их за считанные секунды, а Вам оставит больше время для творчества.
Примером автоматизации проектирования систем вентиляции, может послужить диалоговое окно, созданное в уроке: «Диалоговое окно Автокад». См. Рис. 1.
Рис. 1. Диалоговое окно.
Диалоговое окно позволяет выбрать форму сечения, изменить расход и размер сечения. При этом при любом изменении в отдельном поле рассчитывается скорость движения воздуха.
В предыдущей статье мы подробно, рассмотрели возможный вариант управления диалоговым окном из LISP программы. Но осталось еще несколько идей по усовершенствованию программы. Этим мы и займемся в этом уроке
Напомню, что при нажатии на кнопку ОК, наша диалоговое окно закрывалось, и программа просила указать две точки, по которым строилась мультилиния (круглый или прямоугольный воздуховод).
Рис. 2. Мультилиния.
В этом уроке мы научимся:
Пример LISP программы управления диалоговым окном в Автокад
В этой статье мы рассмотрим пример программного управление диалоговым окном.
В качестве примера мы возьмем диалоговое окно, созданное в предыдущей статье: «Диалоговое окно Автокад»
Рис. 1. Диалоговое окно.
В этой статье мы рассмотрим:
Напишем несколько пользовательских функций, которые будут ответом на действия пользователя:
Диалоговое окно Автокад.
Диалоговые окна являются важным компонентом любого приложения.
Диалоговые окна используют:
- для отображения полезной информация,
- для удобного ввода исходных данных,
- для изменения настроек программы.
Создать диалоговое окно Автокад, не прибегая к сторонним программам, можно при помощи редактора Visual LISP . Для этого в редакторе Visual LISP используют язык DCL, который предназначен для программирования диалоговых окон.
Давайте для примера создадим диалоговое окно для более удобного ввода исходных данных прямого участка воздуховода.
Добавим в эту форму настройки программы – выбор формы сечения.
И в качестве полезной информации, при вводе исходных данных, покажем пользователю скорость движения воздуха.
В результате хотелось бы получить следующее диалоговое окно. См. Рис. 1.
Рис. 1. Диалоговое окно.
Мультилиния в Автокаде.
На мой взгляд, разработчики незаслуженно убрали команду мультилиния из последних версий Автокад. Этот инструмент многофункционален и может быть использован в различных областях проектирования. При помощи мультилинии мы можем создавать многослойные стены в архитектуре, рисовать дороги, трубопроводы системы отопление и теплоснабжения, воздуховоды систем вентиляции.
Давайте, вернем мультилинию на ленту и познакомимся с ней более подробно.
Итак, в этой уроке мы рассмотрим следующее:
3D моделирование. Болт с резьбой.
Tweet Продолжаем тему 3D моделирование в AutoCAD. В этом уроке мы программным методом построим Болт с резьбой. При создании болта в программе будем использовать стандартные команды Автокад. Для примера мы построим болт М16. В конце статьи смотрите видео к этому уроку.
Бесплатный плагин для AutoCAD
O maDWG - плагин для AutoCAD
• Перенос спецификации из Excel в AutoCAD
• Быстрая печать в PDF из пространства модели
Любой чертеж может быть разбит на простейшие элементы, примитивы. В этом уроке мы познакомимся с примитивом, который называется «Прямоугольник».
И рассмотрим следующие вопросы:
Как нарисовать дугу в Автокаде.
Как нарисовать дугу в Автокаде? Для этого в программе Автокад существует несколько способов.
В этом уроке мы рассмотрим:
Как нарисовать круг в Автокаде.
Любой чертеж может быть разбит на простейшие элементы, примитивы. В этом уроке мы познакомимся с примитивом, который называется «Круг».
И рассмотрим следующие вопросы:
Автоматизация проектирования. Отвод.
В этой статье мы продолжим процесс автоматизации проектирования систем вентиляции.
Автоматизация проектирования.
Одним из эффективных способов автоматизации процесса проектирования в Автокад, может послужить создание своих программ на языке LISP.
Если в вашей работе есть типовые, часто встречающиеся операции, для них можно написать программу, которая будет выполняться их за считанные секунды, а Вам оставит больше время для творчества.
Примером автоматизации проектирования систем вентиляции, может послужить диалоговое окно, созданное в уроке: «Диалоговое окно Автокад». См. Рис. 1.
Рис. 1. Диалоговое окно.
Диалоговое окно позволяет выбрать форму сечения, изменить расход и размер сечения. При этом при любом изменении в отдельном поле рассчитывается скорость движения воздуха.
В предыдущей статье мы подробно, рассмотрели возможный вариант управления диалоговым окном из LISP программы. Но осталось еще несколько идей по усовершенствованию программы. Этим мы и займемся в этом уроке
Напомню, что при нажатии на кнопку ОК, наша диалоговое окно закрывалось, и программа просила указать две точки, по которым строилась мультилиния (круглый или прямоугольный воздуховод).
Рис. 2. Мультилиния.
В этом уроке мы научимся:
Пример LISP программы управления диалоговым окном в Автокад
В этой статье мы рассмотрим пример программного управление диалоговым окном.
В качестве примера мы возьмем диалоговое окно, созданное в предыдущей статье: «Диалоговое окно Автокад»
Рис. 1. Диалоговое окно.
В этой статье мы рассмотрим:
Напишем несколько пользовательских функций, которые будут ответом на действия пользователя:
Диалоговое окно Автокад.
Диалоговые окна являются важным компонентом любого приложения.
Диалоговые окна используют:
- для отображения полезной информация,
- для удобного ввода исходных данных,
- для изменения настроек программы.
Создать диалоговое окно Автокад, не прибегая к сторонним программам, можно при помощи редактора Visual LISP . Для этого в редакторе Visual LISP используют язык DCL, который предназначен для программирования диалоговых окон.
Давайте для примера создадим диалоговое окно для более удобного ввода исходных данных прямого участка воздуховода.
Добавим в эту форму настройки программы – выбор формы сечения.
И в качестве полезной информации, при вводе исходных данных, покажем пользователю скорость движения воздуха.
В результате хотелось бы получить следующее диалоговое окно. См. Рис. 1.
Рис. 1. Диалоговое окно.
Мультилиния в Автокаде.
На мой взгляд, разработчики незаслуженно убрали команду мультилиния из последних версий Автокад. Этот инструмент многофункционален и может быть использован в различных областях проектирования. При помощи мультилинии мы можем создавать многослойные стены в архитектуре, рисовать дороги, трубопроводы системы отопление и теплоснабжения, воздуховоды систем вентиляции.
Давайте, вернем мультилинию на ленту и познакомимся с ней более подробно.
Итак, в этой уроке мы рассмотрим следующее:
3D моделирование. Болт с резьбой.
Продолжаем тему 3D моделирование в AutoCAD. В этом уроке мы программным методом построим Болт с резьбой. При создании болта в программе будем использовать стандартные команды Автокад. Для примера мы построим болт М16. В конце статьи смотрите видео к этому уроку.
Бесплатный плагин для AutoCAD
O maDWG - плагин для AutoCAD
• Перенос спецификации из Excel в AutoCAD
• Быстрая печать в PDF из пространства модели
--- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
Как обычно, ТС тщательно шифруется насчет своих намерений/желаний и существующих навыков в программировании)
рисую дороги, в перерывах курю Lisp
В соседней ветке уже определили большинством голосов в 37 %, что выбирать надо "матерный".
Все прочее от лукавого.
Тема такая, из доброго старого времени.
Для инженера-автокадчика, а не профессионального программиста, нет ничего лучше VBA for AutoCAD.
Перечислять плюсы можно долго, но пока сам не попробуещь, оценить их (а также минусы) не представляется возможным.
--- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
Помогите новичку выбрать перспективный язык программирования для создания собственных команд (программ) для autocad
а какое прикладное применение? Какая должность, обязанности? Для саморазвития или для выполнения должностных обязанностей?
ну вот еще родственные темы, мало ли не загуглилось.
обучение чайника лиспу . это на мой взгляд . тернистый путь
создание софта
айти или проектирование
без прикладной задачи трудно и скучно читать теорию. есть задача то?
c 2010 акада - это явно не последние версии) Да и связку Excel -> COM -> AutoCAD пока еще вполне можно использовать для задач малой автоматизации в сжатые сроки.
Offtop:
--- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
Сейчас актуальнее программировать для Revit.
Основное преимущество - ядро автокада на писано на c++. Это дает возможности расширять функционал Autocad при помощи c++ любым образом, включая создание собственных графических (и не только графических) объектов путем наследования от существующих стандартных акадовских классов.
Можно много времени потратить на программирование в VBA, создать кучу наработок, чтобы однажды понять, что некоторые задачи на нем решить невозможно. У c++ таких ограничений, насколько я знаю, практически нет.
А новичку, имхо, желательно начинать с освоения существующего функционала, а именно - динамических блоков.
Читайте также: