Как загрузить arx модуль в автокад

Обновлено: 08.07.2024

ObjectARX (AutoCAD Runtime Extension) – это набор библиотек для разработки ARX-приложений в среде программирования Microsoft Visual C++. ARX-приложение работает в AutoCAD, как динамически связываемая библиотека (DLL) с файловым расширением .arx и имеет прямой доступ к графической базе данных AutoCAD. Важнейшая особенность ARX приложений заключается в том, что появилась возможность расширения AutoCAD не только за счет разработки новых команд, но также и за счет создания новых типов примитивов.

ObjectARX среда состоит из следующих групп классов и функций:

  • AcRx (acad.lib, rxapi.lib, acrxlib) – классы для создания производных классов.
  • AcEd (acad.lib, rxapi.lib, acedapi.lib, acrxlib) – классы для регистрации команд AutoCAD и для уведомления о событиях AutoCAD.
  • AcDb (acad.lib, rxapi.lib, acdblib, acrx15.lib) – классы базы данных AutoCAD.
  • AcGi (acad.lib, rxapi.lib, acgiapi.lib, acrxlib) – классы для создания графических объектов AutoCAD.
  • AcGe (acad.lib, rxapi.lib, acgelib, acrx15.lib) – сервисные классы для общей линейной алгебры и геометрического объекта.

Рисунок AutoCAD – коллекция графических объектов и внутренних конструкций типа таблиц идентификаторов и словарей, сохраненных в базе данных.

Примитив (Entity) имеет графическое представление в пределах рисунка AutoCAD – строки, круги, дуги, текст, solids, области(регионы), сплайны, и эллипсы. Пользователь может видеть его на экране и управлять им.

Таблицы идентификаторов – контейнеры для сохранения объектов базы данных. Примеры таблиц идентификаторов – таблица слоев (AcDbLayerTable) и таблица блоков (AcDbBlockTable). Все примитивы AutoCAD принадлежат записям таблицы блоков.

Словари обеспечивают более универсальный контейнер для сохранения объектов, чем таблицы идентификаторов. Словарь может содержать любой объект типа AcDbObject или его подкласса. Когда создается новый рисунок AutoCAD создает словарь называемый Named Object Dictionary. Этот словарь может просматриваться как “оглавление” для всех словарей, связанных с базой данных. Вы можете создавать новые словари в пределах Named Object Dictionary.

ObjectARX обеспечивает ваше приложение доступом к этим структурам базы данных. Кроме того, Вы можете создавать новую базу данных объектов для вашего приложения.

Множество баз данных (рисунков) могут быть загружены в одном сеансе AutoCAD. Каждый объект в сеансе имеет метку и ID. Метка уникально идентифицирует объект в пределах специфической базы данных. ID уникально идентифицирует объект во всех базах данных, загруженных в одно время. ID сохраняется только в течение сеанса редактирования, а метка сохраняется с рисунком. В отличие от ID объекта, метка может быть неуникальна, когда множество баз данных загружены в сеансе AutoCAD. Через ID Вы можете получить указатель на фактический объект базы данных для обеспечения исполнения операций с ним.

Чтобы быть пригодной для использования, база данных должна иметь, по крайней мере, следующий набор объектов: таблицу блоков; таблицу слоев; таблицу типов линий.

Таблица блоков первоначально содержит три записи: MODEL_SPACE, и два пространства листа, называемые PAPER_SPACE и PAPER_SPACE0. Таблица слоев содержит одну запись – слой 0. Таблица типов линий содержит тип линии CONTINUES.

Предположим, что пользователь создает отрезок с параметрами (4,2 10,7) в пространстве MODEL_SPACE. В базе данных AutoCAD создает образец класса AcDbLine и затем сохраняет его в таблице блоков.

Следующий код создает объект Line и прибавляет его к таблице блоков пространства модели:

Сначала получаем таблицу блоков для текущего рисунка. Затем открываем в пространстве MODEL_SPACE запись таблицы блоков и прибавляем объект к таблице, затем закрываем таблицу и объект.

Теперь, предположим, что пользователь создает окружность с параметрами ((9,3) 2). Снова AutoCAD создает образец соответствующего объекта (AcDbCircle) и прибавляет его к пространству модели.

Следующий код создает окружность и прибавляет ее к таблице блоков в пространстве модели:

Затем, пользователь создает слой mylayer, AutoCAD создает новую запись таблицы слоя и добавляет ее в таблицу слоев.

Следующий код получает таблицу идентификаторов слоя от базы данных и создает новую запись таблицы слоя ASDK_MYLAYER:

Наконец, группируем все объекты вместе (group 3,2 9,3). AutoCAD создает новую группу и прибавляет ее к словарю GROUP который содержится в объектном словаре имен (Named Object Dictionary). Новая группа содержит список ID объектов, которые составляют группу.

Cледующий код создает группу pGroup из объектов Line и Circle в методах createLine () и createCircle (), и помещает группу в словарь. Обратите внимание, как словарь открывается для записи, изменяется, и затем явно закрывается.

Все примеры кода иллюстрируют протокол для открытия и закрытия объектов, который Вы будете должны соблюсти всякий раз, когда Вы работаете с объектами резидента-базы. Этот протокол гарантирует, что объекты находятся физически в памяти, когда к ним обращаются. Прежде, чем Вы предполагаете изменять объект, Вы должны открыть его. Функции имеют параметр, который определяет, открываете ли Вы объект для чтения, записи или уведомления. В то время как объект открыт для записи, Вы можете изменять его. Когда закончите, Вы должны явно закрыть объект. Ниже приведен типовой код для изменения цвета объекта:

Для каждой версии AutoCAD выпускается соответствующая версия пакета ObjectARX . При этом для разработки ARX приложений для разных версий AutoCAD требуются строго определенные версии Visual Studio. Ниже приводится список значений параметра Platform Toolset, который должен быть установлен в свойствах проекта приложения:

В Visual Studio создайте пустой Win32 проект для DLL с именем First и установите свойства проекта в соответствии с рисунками.




initApp – функция вызывается, когда приложение загружается;В приложении (см. файл Source.cpp) вначале подключаются ObjetARX основные файлы: aced.h (определенные редактором услуги) и rxregsvc.h (для сервисных ARX функций). Затем объявляются три функции:

unloadApp – функция вызывается, когда приложение выгружается;

helloWorld – функция, которая обеспечивает печать “Hello World!”.

Далее определяется функция initApp. Эта функция регистрирует новую команду в системе команд AutoCAD. Информацию относительно acedRegCmds макроса и addCommand () метода (AcEdCommandStack класса), можно получить из ObjectARX справки.

Первый аргумент addCommand () – название группы команд (в нашем случае в группу включена только одна команда). Второй аргумент – глобальное имя команды. Третий аргумент – местное имя для той же самой команды. Четвертый аргумент – флаг команды (определяется прозрачная команда – может быть вызвана, когда другая команда активна). Последний аргумент – указатель на вызываемую нашей командой функцию.

После этого в коде программы определяется функция helloWorld. В теле данной функции используется функция acutPrintf, которая является эквивалентом LISP-функции printf.

Так как наше приложение очень простое (оно не определяет объекты, на которые AutoCAD и другие приложения ссылаются) мы можем без опасений определять его незамкнутым. Это позволяет выгружать наше приложение с помощью функции unloadApp. Также по умолчанию, ObjectARX приложения не используют MDI (обратитесь к справке для детальной информации по проблемам MDI). Для регистрации MDI в приложении используется глобальная функция acrxRegisterAppMDIAware.

Чтобы AutoCAD смог получить доступ к функции acrxEntryPoint необходимо экспортировать её. Для этого определяется файл с расширением .def. Все ObjectARX приложения должны экспортировать, по крайней мере, две функции: acrxEntryPoint и acrxGetApiVersion (см. файл Source.def).

Ниже приводится приложение, которое демонстрирует итерацию таблицы типов полилинии. Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текстовку из файла 2_tbliter_dg.txt.

Для тестирования приложения выгрузите из чертежа предыдущую и загрузите обновленную библиотеку First.arx. Запустите команду ITERATE.

Ниже приводится приложение, которое демонстрирует итерацию по вершинам примитива AcDb2dPolyline. При этом реализуется открытие и закрытие объектов – полилинии и ее вершин.

Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текстовку из файла 3_pliniter_dg.txt.

Для тестирования приложения выполните следующие шаги:

  1. Установите системную переменную PLINETYPE=0.
  2. Создайте полилинию.
  3. Выгрузите предыдущую и загрузите обновленную библиотеку First.arx.
  4. Запустите команду ITERATE.


Ниже приводится приложение, которое демонстрирует создание и добавление записи в таблицу слоев.

Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текстовку из файла 4_tablerec_dg.txt.

Для тестирования приложения выгрузите из чертежа предыдущую и загрузите обновленную библиотеку First.arx. Запустите команду ADDLAYER и раскройте диалоговое окно “Диспетчер свойств слоев”.

Ниже приводится приложение, которое демонстрирует создание и добавление объекта XRecord в словарь объектов и возможность просмотра этого объекта из словаря объектов.

Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текстовку из файла 5_XRecord.txt.

Для тестирования приложения выгрузите из чертежа предыдущую и загрузите обновленную библиотеку First.arx. Запустите команды ASDK_CREATE и ASDK_LISTXREC.

Ниже приводится приложение, которое демонстрирует создание и добавление объекта XRecord в словарь расширения выбранного пользователем объекта.

Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текст из файла 6_extension dictionaries.txt.

Для тестирования приложения выгрузите из чертежа предыдущую и загрузите обновленную библиотеку First.arx. Нарисуйте любой примитив, например, окружность. Запустите команду CREATE и укажите на нарисованный примитив. При этом будет создан словарь расширений и в нем будет размещена запись о выбранном примитиве. Запустите команду LISTXREC, укажите на нарисованный примитив, При этом будет напечатана запись о выбранном примитиве из словаря расширений.

Ниже приводится приложение, которое демонстрирует создание mesh объекта с ячейками сети различного цвета. В приложении создается класс, производный от класса AcDbEntity, в нем переопределяются виртуальные функции.

Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текст из файла 7_ASDKMAKEMESH.txt.

Для тестирования приложения выгрузите из чертежа предыдущую и загрузите обновленную библиотеку First.arx. Запустите команду ASDKMAKEMESH.


Ниже приводится приложение, которое демонстрирует использование AcDbGroup протокола.

Модифицируйте проект приложения First. Для этого замените код файла Source.cpp на текст из файла 8_ASDK_GROUPTEST.txt.

Для тестирования приложения выгрузите из чертежа предыдущую и загрузите обновленную библиотеку First.arx. Выполните чертеж из нескольких примитивов, включая отрезки. Запустите команду GROUPTST. На запрос команды выберите набор объектов, который включает, по крайней мере, один отрезок. Из выбранного набора отрезки должны выделиться красным цветом.

Читайте также: