Категория: Руководства
Среда программирования ObjectARX® используется для адаптации и расширения функциональных возможностей AutoCAD и продуктов на его основе. Она обеспечивает непосредственный доступ к структурам базы данных AutoCAD, графической системе и определениям встроенных команд. С помощью объектно-ориентированных интерфейсов программирования на языке C++ разработчики могут создавать приложения для AutoCAD и других продуктов, входящих в это семейство – например AutoCAD® Architecture, AutoCAD® Mechanical и AutoCAD® Civil 3D®.
Система разработки приложений на языке Visual LISP® позволяет адаптировать среду исполнения AutoCAD, добавляя в продукт новые функциональные возможности.
В состав ObjectARX SDK входит также управляемый API, который часто называют AutoCAD .NET API. Для адаптации и расширения функциональных возможностей AutoCAD и продуктов на его основе может применяться любой язык программирования, поддерживающий .NET. Обеспечивается непосредственный доступ к структурам базы данных AutoCAD, определениям встроенных команд и другим внутренним программным элементам. Язык Microsoft® Visual Basic.NET (VB.NET) прост в освоении и использовании, и в то же время открывает перед разработчиками приложений весь спектр возможностей ObjectARX. О том, как научиться работать с интерфейсом AutoCAD .NET, рассказывается в онлайн-руководстве AutoCAD .NET Developer's Guide .
ActiveX (COM-автоматизация)Интерфейс ActiveX® позволяет обращаться к AutoCAD и в автоматическом режиме выполнять в нем необходимые действия посредством механизма COM-автоматизации. Такие обращения возможны, например, из автономных приложений, написанных на Microsoft® Visual C++® или Microsoft .NET Framework, а также из поддерживающих VBA приложений – таких как Microsoft Office. Кроме того, интерфейс ActiveX® могут использовать надстройки для AutoCAD, созданные с помощью Visual LISP, ObjectARX и AutoCAD .NET API.
Моя первая программа для AutoCAD (на английском языке)Получайте новости и рекомендации непосредственно от специалистов Autodesk.
Блог по программированию в AutoCAD: Through the Interface –
Авторы: Kean Walmsley.
Блог специалистов технической поддержки ADN — ADN AutoCAD DevBlog
Форумы пользователей
Включайтесь в обсуждения проблем применения API на форумах, которые модерируются специалистами Autodesk.
Техническая поддержка по программированию на платформах Autodesk на русском языке.
Если у вас есть вопросы по программированию на платформах Autodesk, вы можете задать их на русскоязычном форуме технической поддержки .
Autodesk Exchange Apps для AutoCAD. Наращивайте функционал AutoCAD с помощью приложений, разработанных для сообщества пользователей.
Облачные вычисления. Узнайте, как можно разработать и интегрировать с AutoCAD собственное облачное решение (Software as a Service).
DevTV: Введение в программирование на AutoCAD .NET (на русском языке)Занятия, предназначенные для самостоятельного изучения основ программирования на AutoCAD.NET
Инструментарий ObjectARX позволяет создавать собственные объекты с помощью библиотеки ObjectDBX. В результате сборки приложения, написанного с помощью ObjectDBX, вы получаете файл с расширением .dbx. который загружается в AutoCAD аналогично .arx – файлу.
При создании собственных объектов, Вы расширяете стандартный набор примитивов (entity) Автокада, тем самым упрощая работу пользователя по добавлению тех или иных элементов чертежа. Немаловажным аргументом в пользу создания объектов является возможность возложения на них помимо графических (отображение в чертеже), еще и неграфических функций (хранение данных, упрощение анализа чертежа путем идентификации классов и.т.д). Однако, перед тем, как приступить к созданию объекта, разработчик должен ответить на вопрос, будет ли создание объекта наиболее оптимальным путем решения задачи. Так например, если в приложении необходимо реализовать добавление какого-либо точечного элемента в чертеж, и при этом не требуется хранить какие-либо дополнительные данные про этот элемент, то более простым решением задачи будет создание блока и программное добавление этого блока в чертеж. Создание объектов имеет смысл еще в том случае, если Вам необходимо реализовать в рамках одного элемента чертежа различные геометрические формы и текст, например как в стандартных объектах Dimensions (рис.1).
Создание объектов – один из методов адаптации Автокада под отраслевые задачи. Так, например, если вы имеете дело с геоинформационными системами (ГИС), то в качестве примера объектов могут послужить условные обозначения на картах, в случае электроники – элементы микросхем, архитектуры – элементы архитектурных чертежей. Практически, все промышленные приложения, такие как Land Desktop, Architectural Desktop, Inventor обладает своими объектами.
Создание объекта можно разделить на два этапа: создание непосредственно самого объекта путем наследования нового класса от AcDbEntity либо AcDbObject и написание интерфейса для объекта, т.е. создание функций для добавления объекта в базу данных и работы с объектом (редактирование, взаимодействие с другими элементами чертежа). В данной статье рассматривается создание объектов для AutoCAD 2000-2002 (R-15) с помощью ObjectARX 2000, создание объектов для AutoCAD 2004 (R-16) c ObjectARX 2004 не значительно отличается – изменения касаются объявлений некоторых функций, которые приведены в рамках этой статьи.
Рассмотрим первый этап создания объектов - наследование. Для создания нового объекта следует выбрать пункт File – New… в редакторе Visual C++. В появившемся диалоговом окне следует выбрать ObjectARX 2000 AppWizrd. В следующем окне следует выбрать ObjectDBX (custom object definition). Также можно включить поддержку MFC, при этом будет выдано сообщение о том, что некоторые функции MFC будут недоступны, в случае, если приложение, которое загружает DBX не является MFC-хостом. Далее следует определится, от чего наследовать новый класс – от AcDbEntity или AcDbObject. Если Вы создаете не графический объект (например для хранения данных в словарях), тогда наследуйте от AcDbObject. если же Ваш объект требует графического представления в чертеже, тогда наследуйте от AcDbEntity. Для создания нового объекта следует вызвать ObjectARX Class Wizard, щелкнув на пиктограмме с изображением волшебной палочки на панели инструментов ObjectARX (рис. 2).
В появившемся диалоговом окне нажмите на кнопку “Add Class…”, в результате появится окно “New Class”. В окне “New Class” заполните следующие поля: в поле “Class name” введите имя нового класса в поле “Derived from” укажите класс от которого следует наследовать новый (рекомендуется наследовать только от AcDbObject либо AcDbEntity ), а поле “DFX name” укажите имя для обозначения вашего класса в DFX. Нажмите “Ok” и Вы снова вернетесь в окно “Object ARX ClassWizard”.
Для начала следует объявить переменные класса. Для этого перейдите на вкладку “Member Variables”. Для объявления новой переменной нажмите кнопку “Add variable”. В появившемся диалоговом окне введите имя переменной (поле “Var name”), выберите тип переменной из списка “Var type” и DXF-код из списка “DXF code”, нажмите Ok и объявление переменной и функций для работы с ней будут добавлены в файлы класса. Переменные в графических классах, как правило задают параметры геометрии примитива. Так, например, класс, представляющий собой окружность должен иметь, как минимум, две переменные - центр типа AcGePoint3d и радиус типа double.
Далее следует определится c тем, какие функции следует перегрузить в новом классе. Тут Ваш выбор зависит от того, насколько функциональным должен быть Ваш класс (имеется в виду возможность сохранения в файлы, редактирование с помощью различных команд, таких как ROTATE, MOVE, наличие в классе “ручек” (grips) и.т.д). Наиболее часто Вам придется перегружать следующие функции:
Отвечает за отображение примитива в чертеже. Определяет размеры примитива. Перемещение примитива, команда MOVE. Отвечает за формирование набора “ручек” (grips). Отвечает за перемещение “ручек” (grips). Отвечает за создание клона примитива при трансформации. Рассмотрим, реализацию этих функций.Мы рассмотрели наиболее часто перегружаемые функции. Если Вы хотите расширить функциональность Вашего класса, то также следует перегружать и остальные функции (см. раздел “Deriving from AcDbEntity ” в справке “ObjectARX Developer’s Guide ”).
Так, например, для того, чтобы Ваш примитив мог сохранятся в dwg-файле, необходимо перегрузить функции dwgInFields и dwgOutFields. Перед добавлением этих функций следует объявить все переменные - члены класса, тогда в функции будут автоматически добавлены операторы для сохранения и чтения этих переменных.
После того, как перегружены все необходимые функции, выполните компиляцию.
Теперь можно переходить к интерфейсной части. Интерфейсная часть – это arx-приложение, предназначенное для работы с объектом. После создания заготовки приложения с помощью ObjectARX AppWizard, выполните следующие действия: в файл stdarx.h добавьте заголовочный файл Вашего нового класса, в настройках проекта (Project -> Settings…) на вкладке Link добавьте lib-файл Вашего класса (появляется в результате компиляции dbx-проекта в папке Debug). Теперь можно создавать команды, использующие новый класс. Для работы со свойствами объекта можно написать собственный интерфейс, либо использовать Object Property Manager (OPM). Во втором случае Вам придется писать код автоматизации по средствам технологии COM, а в классе объекта перегрузить функцию getClassID (CLSID* pClsid)
Следует обратить внимание на то, что если Вы хотите передать чертеж, в котором присутствует объект нового класса, то также придется передать и dbx-файл для этого класса.
В качестве примера создание объектов смотрите следующие приложения:Целью данной статьи является рассмотрение некоторых приемов работы в связке Autocad + C#.
В основном буду опираться на статью "Начало работы с Autocad с помощью C#". В рамках данной статьи будут рассмотрены некоторые замечания по особенностям работы с Autocad с помощью SDK - ObjectARX.
Сразу оговорюсь, что НЕ являюсь квалифицированным программистом, и увлекаюсь программированием только как хобби. Так что в комментариях прошу указать на неточности и ошибки в изложении материала.
0. Несколько слов о .net API и ObjectARX в частности.Вот что говорит нам .Net Developer Guide (в переводе bushman, см. литературу):
AutoCAD .NET API позволяет вам управлять приложением AutoCAD и файлами чертежей на программном уровне с использованием доступных сборок или библиотек. Эти объекты могут быть доступны для множества различных языков программирования и всевозможных сред разработки программного обеспечения.
Для работы с Autocad можно использовать библиотеки напрямую из Autocad (как это сделано в "Начало работы с Autocad с помощью C#" ), либо использовать ObjectARX.
ObjectARX - это большой набор библиотек, предназначенный для разработки приложений для AutoCAD в среде программирования Microsoft Visual C++. Сам AutoCAD разработан с использованием ObjectARX.
"Чистый" ObjectARX предназначен для работы с Autocad с помощью C++, однако часть библиотек предстваляют собой ни что иное, как обертки для классов ObjectARX для работы через .net.
ObjectARX общедоступен и его можно скачать с сайта Autodesk .
Кроме того, по этому же адресу можно скачать обширную документацию по SDK.
Внимание! Необходимо использовать одинаковые версии ObjectARX и Autocad! Совместимость работы библиотеки одной версии с Autocad другой версии не гарантируется. Так что при изменении версии используемого Autocad необходимо перекомпилировать Вашу программу с новыми библиотеками! Кроме того, советую обратить внимание на совместимость различных версий ObjectARX и MS VS! Все описанные ниже примеры написаны для Autocad 2009, соответственно используется ObjectARX 2009, MS Visual Studio 2008.
1. Способы взаимодействия Autocad и C# посредством .Net API. Существует два основных способа взаимодействия Autocad и C#:В данной статье будет использовать второй способ.
2. Возможности ObjectARXНабор библиотек ObjectARX представляет разработчику огромный набор инструментов как для работы чертежами, так и с окнами Autocad.
Основные возможности предоставляемые ObjectARX:Подробнее о ObjectArx можно почитать в документации (в папке ObjectARXdocs), так же в составе документации по ObjectARX есть примеры (папка ObjectARXsamples).
3. ПримерыНиже в данной статье будет рассмотрено несколько примеров работы с Autocad и по каждому примеру будут даны небольшие комментарии.
В программах используются 2 библиотеки: AcDbMgd.dll и AcMgd.dll из папки ObjectARXinc-win32. Их необходимо добавить к Reference проекта C#.
Для просмотра результата, необходимо в Autocad вызвать команду "netload" (без кавычек), загрузить получившуюся в результате компиляции dll-сборку и вызвать имя новой команды (addEntity и addBlock соответственно, регистр роли не играет).
Данный пример иллюстрирует основы добавления примитивов на чертеж, работы с их свойствами, работы с базой данных чертежа, добавления нового примитива в чертеж. После запуска команды получим в точке 0,0 симпатичную окружность синего цвета.
Результат примера 1
Пример немного посложнее: создадим новый блок и разместим его на чертеже. Для этого добавим новую функцию:
Данный пример иллюстрирует процесс создания более сложных объектов - блоков. Процесс создания блоков следующий:
1) создаем определение блока (как элемент таблицы BlockTable) и добавляем его в таблицу блоков (не забываем проверить корректность имени блока);
2) создаем и добавляем в определение блока примитивы и определения атрибутов блока;
3) создаем экземпляр блока (BlockReference) и добавляем его в базу данных того пространства, которое нас интересует (в примере - пространство модели);
4) задаем значения атрибутов.
Результат примера 2
На этом поспешу закругляться. Всем спасибо за прочтение статьи, и напоминаю: с радостью рассмотрю все замечания, указание ошибок и просто критические комментарии!
Так же прошу в комментариях указать, есть ли смысл писать далее об этой теме и интересует ли эта тема кого-нибудь.
C# и AutoCAD. Некоторые приемы работы
Целью данной статьи является рассмотрение некоторых приемов работы в связке Autocad + C#.
В основном буду опираться на статью «Начало работы с Autocad с помощью C#». В рамках данной статьи будут рассмотрены некоторые замечания по особенностям работы с Autocad с помощью SDK — ObjectARX.
Сразу оговорюсь, что НЕ являюсь квалифицированным программистом, и увлекаюсь программированием только как хобби. Так что в комментариях прошу указать на неточности и ошибки в изложении материала.
Вот что говорит нам .Net Developer Guide (в переводе bushman, см. литературу):
AutoCAD .NET API позволяет вам управлять приложением AutoCAD и файлами чертежей на программном уровне с использованием доступных сборок или библиотек. Эти объекты могут быть доступны для множества различных языков программирования и всевозможных сред разработки программного обеспечения.
Для работы с Autocad можно использовать библиотеки напрямую из Autocad (как это сделано в «Начало работы с Autocad с помощью C#» ), либо использовать ObjectARX.
ObjectARX — это большой набор библиотек, предназначенный для разработки приложений для AutoCAD в среде программирования Microsoft Visual C++. Сам AutoCAD разработан с использованием ObjectARX.
«Чистый» ObjectARX предназначен для работы с Autocad с помощью C++, однако часть библиотек предстваляют собой ни что иное, как обертки для классов ObjectARX для работы через .net.
ObjectARX общедоступен и его можно скачать с сайта Autodesk .
Кроме того, по этому же адресу можно скачать обширную документацию по SDK.
Внимание! Необходимо использовать одинаковые версии ObjectARX и Autocad! Совместимость работы библиотеки одной версии с Autocad другой версии не гарантируется. Так что при изменении версии используемого Autocad необходимо перекомпилировать Вашу программу с новыми библиотеками! Кроме того, советую обратить внимание на совместимость различных версий ObjectARX и MS VS! Все описанные ниже примеры написаны для Autocad 2009, соответственно используется ObjectARX 2009, MS Visual Studio 2008.
1. Способы взаимодействия Autocad и C# посредством .Net API.
Набор библиотек ObjectARX представляет разработчику огромный набор инструментов как для работы чертежами, так и с окнами Autocad.
Подробнее о ObjectArx можно почитать в документации (в папке ObjectARX\docs\), так же в составе документации по ObjectARX есть примеры (папка \ObjectARX\samples\).
3. Примеры
Ниже в данной статье будет рассмотрено несколько примеров работы с Autocad и по каждому примеру будут даны небольшие комментарии.
В программах используются 2 библиотеки: AcDbMgd.dll и AcMgd.dll из папки \ObjectARX\inc-win32\. Их необходимо добавить к Reference проекта C#.
Для просмотра результата, необходимо в Autocad вызвать команду «netload» (без кавычек), загрузить получившуюся в результате компиляции dll-сборку и вызвать имя новой команды (addEntity и addBlock соответственно, регистр роли не играет).
Данный пример иллюстрирует основы добавления примитивов на чертеж, работы с их свойствами, работы с базой данных чертежа, добавления нового примитива в чертеж. После запуска команды получим в точке 0,0 симпатичную окружность синего цвета.
Результат примера 1
Пример немного посложнее: создадим новый блок и разместим его на чертеже. Для этого добавим новую функцию:
Данный пример иллюстрирует процесс создания более сложных объектов — блоков. Процесс создания блоков следующий:
1) создаем определение блока (как элемент таблицы BlockTable) и добавляем его в таблицу блоков (не забываем проверить корректность имени блока);
2) создаем и добавляем в определение блока примитивы и определения атрибутов блока;
3) создаем экземпляр блока (BlockReference) и добавляем его в базу данных того пространства, которое нас интересует (в примере — пространство модели);
4) задаем значения атрибутов.
Результат примера 2
На этом поспешу закругляться. Всем спасибо за прочтение статьи, и напоминаю: с радостью рассмотрю все замечания, указание ошибок и просто критические комментарии!
Так же прошу в комментариях указать, есть ли смысл писать далее об этой теме и интересует ли эта тема кого-нибудь.
through-the-interface.typepad.com — блог Kean Walsmley, сборник отличных примеров;
spiderinnet1.typepad.com — блог spiderinnet1, еще один блог с примерами;
sites.google.com/site/bushmansnetlaboratory — частичный перевод на русский язык Autocad Net developer Guide
www.theswamp.org — англоязычный форум по Autocad .net. Рассмотрено много примеров.
www.caduser.ru — русскоязычный форум. Часто заглядывают и подсказывают настоящие гуру программирования на .net. Чрезвычайно полезный ресурс.
forums.autodesk.com — официальный форум Autocad англоязычный форум (отсутствие подсветки и разметки синтаксиса просто выламывает глаза) .
Autocad Net Developer Giude — основная литература при создании приложения для Autocad.
forum.dwg.ru — еще один русскоязычный форум, посвященный Autocad (спасибо BoxaShu )