Руководства, Инструкции, Бланки

Objectarx Developer's Guide руководство по Objectarx для разработчиков img-1

Objectarx Developer's Guide руководство по Objectarx для разработчиков

Категория: Руководства

Описание

Разработка приложений для AutoCAD

Среда программирования 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

Другие статьи

Создание объектов с помощью библиотеки ObjectDBX

Создание объектов с помощью библиотеки ObjectDBX

Инструментарий 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). Отвечает за создание клона примитива при трансформации. Рассмотрим, реализацию этих функций.
  1. Функция worldDraw наиболее важная, так как отвечает за графическое представление примитива. В теле этой функции Вы определяете, как должен выглядеть объект. Для этого используется класс AcGiWorldDraw. отвечающий за графическое представление примитива. Класс предоставляет функции, которые возвращают ссылки на объекты классов AcGiSubEntityTraits и AcGiWorldGeometry. Первый предназначен для рисования примитивов, второй для задания параметров рисования (цвет, толщина линии, тип линии и.т.д). В качестве примера послужит фрагмент из кода функции, отображающий окружность синего цвета: функция subEntityTraits() возвращает указатель на объект класса AcGiSubEntityTraits для которого вызывается функция функция setColor. которая устанавливает цвет для всех последующих вызовов функций рисования примитивов; функция geometry() возвращает указатель на объект класса AcGiWorldGeometry. для которого вызывается функция circle, отображающая окружность. Полное описание всех функций класса AcGiSubEntityTraits Вы найдете в справке “ObjectARX Developer’s Guide” в разделе “AcGiSubEntityTraits Class”, описание функций рисования примитивов Вы найдете в разделе “AcGiGeometry Class”.
  2. Функция getGeomExtents должна быть реализована следующим образом: в теле функции определяется размер примитива, который затем присваивается переменной extents. Параметры переменной extents определяются разработчиком.
  3. Функция transformBy отвечает за перемещение (MOVE) примитива, следовательно в теле функции следует “перемещать” (с помощью transformBy ) все ключевые точки примитива. Ниже приведен фрагмент реализации функции для примитива-окружности: xform - матрица перемещения, которую Автокад передает при вызове функции.
  4. В теле функции getGripPoints разработчик определяет “ручки” (grips), которые примитив отображает при его выборе в чертеже. Точки, которые Вы хотите сделать ручками для данного примитива, должны быть добавлены в массив gripPoints. В ObjectARX 2004 введен новый тип данных – AcDbGripDataPtrArray. который представляет собой массив объектов класса AcDbGripData. содержащего данные о “ручках” для конкретного примитива. Поэтому в ObjectARX 2004 функция getGripPoints имеет дополнительное объявление с использованием AcDbGripDataPtrArray.
  5. Функция moveGripPointsAt аналогична функции, transformBy с той разницей, что она реализовывает перемещение не всего примитива, а его отдельных частей с помощью “ручек” (grips). При этом разработчик определяет, какие “ручки” были перемещены, используя массив indices, в котором записаны номера перемещаемых ручек в порядке их создания в функции getGripPoints. В ObjectARX 2004 функция имеет дополнительное объявление, связанное с наличием нового типа данных AcDbGripData (см. пред. пункт).

Мы рассмотрели наиболее часто перегружаемые функции. Если Вы хотите расширить функциональность Вашего класса, то также следует перегружать и остальные функции (см. раздел “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-файл для этого класса.

В качестве примера создание объектов смотрите следующие приложения:
  • Smiley (ObjectARX Sample)
  • BoreHole ( www.arxmaster.by.ru )

C# и AutoCAD

C# и AutoCAD. Некоторые приемы работы Цель данной статьи.

Целью данной статьи является рассмотрение некоторых приемов работы в связке 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#:
  • 1. Программа реализуется в виде отдельного исполняемого файла с работой с файлами Autocad через COM-интерфейсы библиотеки Autocad.Interpop.Common. Данный прием позволяет получить обычный исполняемый exe-файл, который будет работать с dwg-файлами через COM. Данный способ имеет свое право на существование, однако, весьма ограничен функционально из-за малого числа доступных способов "воздействия" на чертеж и не рекомендуется в большинстве случаев.
  • 2. В виде расширения (plugin) autocad. Результатом работы будет dll-файл, который подгружается в Autocad командой "netload" и определяет новые команды (операции) и/или новое поведение стандартных операций.

В данной статье будет использовать второй способ.

2. Возможности ObjectARX

Набор библиотек ObjectARX представляет разработчику огромный набор инструментов как для работы чертежами, так и с окнами Autocad.

Основные возможности предоставляемые ObjectARX:
  • создание нового файла чертежа;
  • редактирование существующих чертежей, которое включает в себя: редактирование примитивов, блоков, словарей чертежа (см. "Начало работы с Autocad с помощью C#" ),
  • добавление новых команд;
  • изменение интерфейса Autocad (добавление новых кнопок, панелей, закладок);

Подробнее о ObjectArx можно почитать в документации (в папке ObjectARXdocs), так же в составе документации по ObjectARX есть примеры (папка ObjectARXsamples).

3. Примеры

Ниже в данной статье будет рассмотрено несколько примеров работы с Autocad и по каждому примеру будут даны небольшие комментарии.

В программах используются 2 библиотеки: AcDbMgd.dll и AcMgd.dll из папки ObjectARXinc-win32. Их необходимо добавить к Reference проекта C#.

Для просмотра результата, необходимо в Autocad вызвать команду "netload" (без кавычек), загрузить получившуюся в результате компиляции dll-сборку и вызвать имя новой команды (addEntity и addBlock соответственно, регистр роли не играет).

3.1. Добавление новых примитивов в существующий чертеж

Данный пример иллюстрирует основы добавления примитивов на чертеж, работы с их свойствами, работы с базой данных чертежа, добавления нового примитива в чертеж. После запуска команды получим в точке 0,0 симпатичную окружность синего цвета.

Результат примера 1

2. Создание блока и изменение его свойств

Пример немного посложнее: создадим новый блок и разместим его на чертеже. Для этого добавим новую функцию:

Данный пример иллюстрирует процесс создания более сложных объектов - блоков. Процесс создания блоков следующий:

1) создаем определение блока (как элемент таблицы BlockTable) и добавляем его в таблицу блоков (не забываем проверить корректность имени блока);
2) создаем и добавляем в определение блока примитивы и определения атрибутов блока;
3) создаем экземпляр блока (BlockReference) и добавляем его в базу данных того пространства, которое нас интересует (в примере - пространство модели);
4) задаем значения атрибутов.

Результат примера 2

На этом поспешу закругляться. Всем спасибо за прочтение статьи, и напоминаю: с радостью рассмотрю все замечания, указание ошибок и просто критические комментарии!
Так же прошу в комментариях указать, есть ли смысл писать далее об этой теме и интересует ли эта тема кого-нибудь.

Objectarx developer's guide руководство по objectarx для разработчиков

C# и AutoCAD. Некоторые приемы работы


Цель данной статьи.


Целью данной статьи является рассмотрение некоторых приемов работы в связке 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#:
  • 1. Программа реализуется в виде отдельного исполняемого файла с работой с файлами Autocad через COM-интерфейсы библиотеки Autocad.Interpop.Common. Данный прием позволяет получить обычный исполняемый exe-файл, который будет работать с dwg-файлами через COM. Данный способ имеет свое право на существование, однако, весьма ограничен функционально из-за малого числа доступных способов «воздействия» на чертеж и не рекомендуется в большинстве случаев.
  • 2. В виде расширения (plugin) autocad. Результатом работы будет dll-файл, который подгружается в Autocad командой «netload» и определяет новые команды (операции) и/или новое поведение стандартных операций.

В данной статье будет использовать второй способ. 2. Возможности ObjectARX


Набор библиотек ObjectARX представляет разработчику огромный набор инструментов как для работы чертежами, так и с окнами Autocad.

Основные возможности предоставляемые ObjectARX:
  • создание нового файла чертежа;
  • редактирование существующих чертежей, которое включает в себя: редактирование примитивов, блоков, словарей чертежа (см. «Начало работы с Autocad с помощью C#» ),
  • добавление новых команд;
  • изменение интерфейса Autocad (добавление новых кнопок, панелей, закладок);

и т.д.

Подробнее о ObjectArx можно почитать в документации (в папке ObjectARX\docs\), так же в составе документации по ObjectARX есть примеры (папка \ObjectARX\samples\).

3. Примеры


Ниже в данной статье будет рассмотрено несколько примеров работы с Autocad и по каждому примеру будут даны небольшие комментарии.

В программах используются 2 библиотеки: AcDbMgd.dll и AcMgd.dll из папки \ObjectARX\inc-win32\. Их необходимо добавить к Reference проекта C#.

Для просмотра результата, необходимо в Autocad вызвать команду «netload» (без кавычек), загрузить получившуюся в результате компиляции dll-сборку и вызвать имя новой команды (addEntity и addBlock соответственно, регистр роли не играет).

3.1. Добавление новых примитивов в существующий чертеж


Данный пример иллюстрирует основы добавления примитивов на чертеж, работы с их свойствами, работы с базой данных чертежа, добавления нового примитива в чертеж. После запуска команды получим в точке 0,0 симпатичную окружность синего цвета.

Результат примера 1


2. Создание блока и изменение его свойств


Пример немного посложнее: создадим новый блок и разместим его на чертеже. Для этого добавим новую функцию:

Данный пример иллюстрирует процесс создания более сложных объектов — блоков. Процесс создания блоков следующий:

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 )