Как сделать gear в autocad
Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.
Предыстория
Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.
Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.
Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.
1. Подготовка необходимых инструментов
1.1. Собственно AutoCAD
Тут все понятно. Качайте с официального сайта Autodesk, ставьте, 30 дней наслаждайтесь прекрасным инструментом. Потом узнайте цену покупки и повесьтесь. Для разработчиков действует специальная программа ADN , по которой можно получать девелоперские лицензии на продукты Autodesk. Стоимость базовой версии подписки, как указано на сайте, составляет от 700 долларов в год.
1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD
Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:
ссылки для загрузки ObjectARX SDK для версий AutoCAD 2000 – 2011Версия 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.
2.5. Отладить плагин (при необходимости)
Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.
CAD-система Autodesk AutoCAD позволяет не только проектировать в двумерном пространстве и создавать плоские чертежи, но и моделировать в трехмерной среде и создавать 3D-модели.
Рассмотрим основы создания трехмерной модели в Автокаде, разберем базовые принципы работы в трехмерном пространстве и изучим необходимые команды.
Рабочее пространство
В отличие от других CAD-систем, моделирование в Автокаде производится в той же самой среде, что и двумерное черчение. Однако, по умолчанию в Автокад включено пространство для создания и редактирования чертежей, которое называется «Рисование и аннотации». Для перехода к командам трехмерного моделирования переключите рабочее пространство на «Основы 3D» нажатием иконки с шестеренкой в статусной строке.
Обратите внимание на то, как изменилась лента: теперь на вкладке «Главная» находятся все основные инструменты моделирования в AutoCAD.
Навигация в трехмерной модели
Если при работе с двумерными чертежами достаточно использовать для навигации две команды: панорамирование и зуммирование, то для трехмерных моделей необходимы еще и операции смены ориентации вида. Смена ориентации вида позволяет посмотреть на трехмерную модель с разных сторон.
Смена ориентации осуществляется нажатием на обозначение текущего вида, которое находится в левом верхнем углу рабочего поля AutoCAD
Также сменить ориентацию вида можно с помощью видового куба, который находится в правом верхнем углу рабочего поля. Нажимая на его грани, ребра и вершины, имеющие соответствующие названия, можно выбрать нужную ориентацию модели.
Для произвольного вращения модели на экране удобно использовать команду «Трехмерная орбита», которую можно запустить нажатием кнопки «Орбита» на панели навигации, или ввести команду 3DОРБИТА.
После запуска команды нажмите и удерживайте левую кнопку мыши и переместите курсор по экрану, модель начнет вращаться на экране.
Также для вращения модели удобно использовать мышку: просто зажмите клавишу Shift и колесо мыши, а потом начните перемещать курсор по экрану.
Основы создания трехмерных тел
Создание модели в Автокаде можно проводить несколькими способами. Рассмотрим два самых распространенных из них:
- построение из готовых трехмерных примитивов
- построение из тел, созданных на основе двумерных эскизов.
Для создания трехмерного примитива выберите на ленте нужную форму.
Например, для построения кубика выберем команду «Ящик». После запуска команды необходимо внимательно смотреть на запросы в командной строке и вводить требуемые значения. Для построения ящика нужно сначала указать первую точку основания и ввести размеры длины и ширины (для переключения между размерами нажмите клавишу Tab), а затем ввести высоту ящика. После завершения ввода в пространстве появится требуемый ящик.
Точно также строятся и остальные типы примитивов.
Для смены визуального стиля отображения модели нажмите на название стиля, которое находится в левом верхнем углу рабочего поля AutoCAD, и выберете подходящий.
Для удобства моделирования рекомендуется выбирать стиль «Концептуальный», «Реалистичный» - или «Тонированный с кромками».
Для создания трехмерного тела на основе двумерного эскиза необходимо предварительно создать плоский замкнутый контур с помощью команды «Полилиния». Контур может находиться на любой из стандартных плоскостей AutoCAD или на плоской поверхности существующего тела.
Запустим команду «Полилиния» и создадим контур, который станет основой трехмерного тела. К контуру предъявляется два обязательных требования: он должен быть замкнутым и не иметь самопересечений.
После создания контура можно построить на его базе тело операцией выдавливания. Другими словами, - придать плоскому эскизу высоту. Запустим команду «Выдавить», выберем контур и введем высоту тела.
Обратите внимание, что положительное значение высоты позволяет построить тело в одну сторону от эскиза, отрицательное - в другую.
Кроме операции выдавливания можно тело построить вращением контура вокруг оси. Например, создадим с помощью полилинии замкнутый контур в виде прямоугольного треугольника
Запустим команду «Вращение» и выберем сначала контур, а потом укажем две точки оси, вокруг которой будет вращаться наш контур. Для завершения операции необходимо ввести угол вращения тела, введем 360.
В итоге получим модель конуса.
Редактирование тел
Рассмотрим несколько операций редактирования тел.
Как построить в кубе отверстие или бобышку? Для выполнения таких построений используются булевы операции «Объединение» (позволяет сложить два тела), «Вычитание» (позволяет вычесть одно тело из другого) и «Пересечение» (результат выполнения операции - общая часть двух тел). Для запуска этих команд необходимо нажать соответствующие кнопки на ленте.
Построим бобышку на кубе. Построим куб с помощью операции «Ящик», а затем построим цилиндр с помощью команды «Цилиндр», но в качестве плоскости построения выберем верхнюю грань куба, а сам цилиндр построим вверх по направлению от куба
В итоге получим два тела: куб и цилиндр. Для объединения их в одно тело необходимо запустить команду «Объединение» и выбрать тела.
Построим отверстие в кубе. Возьмем аналогичный куб и построим цилиндр на верхней грани, но в направлении внутрь куба (цилиндр получится внутри куба).
Для того, чтобы вычесть цилиндр из куба и получить отверстие, необходимо выбрать команду «Вычитание» и указать сначала то тело, из которого будет вычитаться (куб), а потом то тело, которое будет вычитаться (цилиндр).
Для скругления ребер тела используется команда «Сопряжение по кромке». Для создания скругления запустите команду нажатием кнопки на ленте, затем выберите все ребра, которые необходимо скруглить и укажите радиус скругления.
Заключение
Как вы смогли убедиться, создание трехмерных моделей в AutoCAD не требует специальных навыков и умений. Пользователь, имеющий опыт работы с плоскими чертежами, легко освоит трехмерное моделирование в Автокаде.
Полученные в Автокаде модели можно использовать для самых разных целей: от создания плоских чертежей до визуализации и анимации движения тел или работы механизмов.
Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.
Предыстория
Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.
Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.
Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.
1. Подготовка необходимых инструментов
1.1. Собственно AutoCAD
Тут все понятно. Качайте с официального сайта Autodesk, ставьте, 30 дней наслаждайтесь прекрасным инструментом. Потом узнайте цену покупки и повесьтесь. Для разработчиков действует специальная программа ADN , по которой можно получать девелоперские лицензии на продукты Autodesk. Стоимость базовой версии подписки, как указано на сайте, составляет от 700 долларов в год.
1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD
Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:
ссылки для загрузки ObjectARX SDK для версий AutoCAD 2000 – 2011Версия 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.
2.5. Отладить плагин (при необходимости)
Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.
Гизмо, как подобъекты AutoCAD, представляют собой элементы интерфейса в виде трехмерных динамических подсказок, отображаемых в графической форме. На сегодняшний день в AutoCAD при выполнении процедур действий над объектами насчитывается три типа гизмо, внешний вид которых показан на рис. 5.1:
а) гизмо 3D поворота – позволяет поворачивать выбранные объекты вокруг указанной оси на заданный угол;
б) гизмо 3D переноса – изменяет месторасположение выбранных объектов в направлении указанной оси или плоскости;
в) гизмо 3D масштабирования – помогает изменять масштаб выбранных объектов вдоль одной указанной оси, плоскости или равномерно по всем трем осям одновременно.
Рис. 5.1. Отображение гизмо
Гизмо отображаются, если в текущем рисунке установлен визуальный стиль, отличный от стиля 2D каркас. После запуска команд или активизации инструментов 3D поворот, 3D перенос и 3D масштаб в рисунке автоматически устанавливается визуальный стиль 3D каркас.
Все гизмо доступны на вкладке Главная, панели Выбор интерфейса ленты, рис. 5.1.а, и вкладки Тело, рис. 5.2.б, а по умолчанию при выборе объекта автоматически отображается гизмо 3D переноса.
При выборе объектов отображением гизмо управляет системная переменная DEFAULTGIZMO , которой можно задавать следующие значения:
- 0 – отображается гизмо 3D переноса, установлено по умолчанию;
- 1 – отображается гизмо 3D поворота;
- 2 – отображается гизмо 3D масштабирования;
- 3 – все гизмо отключены.
Рис. 5.2. Доступ к гизмо на ленте
Следует отметить, что гизмо не являются каким-то уникальным средством в AutoCAD, и указанные выше действия над объектами (поворот, перенос, масштабирование) можно успешно выполнять и при отключенных гизмо.
Читайте также: