Пример разработки дополнения к GstarCAD

Пример разработки дополнения к GstarCAD

Пример творения проекта с внедрением интерфейса GRX для GstartCAD 2010

 

Среда разработки GRX в GstarCAD. Пример разработки прибавления.  Среда разработки GRX дозволяет проектировать прибавления под САПР GstarCAD ® на С++. Основная необыкновенность этого интерфейса разработки в том, что он подобен по синтаксису с ObjectARX ® (для AutoCAD ® от компании Autodesk). В текущей версии API GRX определены главные типы данных, классы и наружные функции, дозволяющие создать GRX-приложение вполне в стиле прибавлений разработанных с внедрением ObjectARX ® . Соответственно, разрабам, имеющим опыт написания программ ObjectARX ® , не составит труда приступить к разработке прибавлений для GstarCAD ® Пример творения проекта с внедрением интерфейса GRX для GstartCAD 2010

 

Среда разработки GRX в GstarCAD. Пример разработки прибавления.  Среда разработки GRX дозволяет проектировать прибавления под САПР GstarCAD ® на С++. Основная необыкновенность этого интерфейса разработки в том, что он подобен по синтаксису с ObjectARX ® (для AutoCAD ® от компании Autodesk). В текущей версии API GRX определены главные типы данных, классы и наружные функции, дозволяющие создать GRX-приложение вполне в стиле прибавлений разработанных с внедрением ObjectARX ® . Соответственно, разрабам, имеющим опыт написания программ ObjectARX ® , не составит труда приступить к разработке прибавлений для GstarCAD ® либо адаптировать готовые прибавления. На данный момент объектный интерфейс GRX реализован на уровне ObjectARX ® для AutoCAD ® 2004. Вообщем, такового уровня полностью довольно для творения прибавлений и сильно ущемленным себя не ощущаешь.  Структура прибавления для GstarCAD ® подходит структуре прибавления с внедрением ObjectARX ® . Потому в плане построения и принципов разработки здесь не приходится привыкать к чему-то новенькому. Нужные для работы блоки: инициализация прибавления, объявление команд, определение реакций на известия родительской программы Творение реакторов) и т. д., знакомы по програмкам с внедрением ObjectARX ® . Объявление способностей программного интерфейса дает только надежду на доступность разработки, в следствии чего же наиболее действенным способом демонстрации способностей будет анализ кода работающего прибавления. В качестве исследования и определения общности меж указанными интерфейсами сделаем не большой проэкт. В качестве задачки данного проекта определим творение рамки для чертежа. Наша задачка выявить реальность идентичности меж GRX и ARX , потому способы и методы творения структуры для данного объекта опустим и осмотрим лишь некие способы работы с GRX . Иерархия классов   #include

GRX предоставляет иерархию классов вполне по функционалу и синтаксису подобную ARX:

Классы управления документом: область AcAp ;

Классы доступа к базе данных чертежа и представления объектов в базе чертежа — область AcDb ;

Классы управления цветом : область AcCm ;

Управление командами: область AcEd ;

Классы управления геометрическими объектами : область AcGe ;

Базисные классы для управления графическим отображением объектов : область AcGi ;

Обеспечение доступа к графическим устройствам : область AcGs ;

Базисные классы для творения прибавлений : область AcRx .

Доступ фактически ко всем структурам обеспечивается включением 1-го заголовочного файла, указанного выше.

Инициализация прибавления  Как видно на приведенном ниже образце, объявление входной функции, инициализация прибавления и регистрация команд в GRX по синтаксису подобна ObjectARX ® : extern «C» AcRx::AppRetCode acrxEntryPoint( AcRx::AppMsgCode msg, void * appId)   switch ( msg ) {        case AcRx::kInitAppMsg:                  initApp();                   break ;        case AcRx::kUnloadAppMsg:                  unloadApp();                  break ;        case AcRx::kInitDialogMsg:                  break ;       default :                 break ;   return AcRx::kRetOK;   Типы обрабатываемых известий подходят известиям в програмках ObjectARX ® :  Регистрация команд

В целом, как и идет ждать, принцип регистрации собственных команд подобен ARX .

  static void initApp() acedRegCmds->addCommand(_T( «DRAWPAGE_SERVICE» ),                          _T( «setpage» ),                          _T( «setpage» ),                          ACRX_CMD_MODAL,                          createPage Stamp ,                           NULL,                           -1,                          DrawPageServiceDLL.ModuleResourceInstance()); static void unloadApp() acedRegCmds->removeGroup(_T( «DRAWPAGE_SERVICE» ));  В целом в GRX имеем доступ ко всему арсеналу области AcEd для управления командами прибавления. Обращение к базе чертежа и творение объекта  Доступ к базе данных чертежа и пример творения объекта в ней все-таки можно осмотреть в функции творения новейшего слоя.   /* chName – имя творимого слоя */   if (pDatabase != NULL)   {     err = pDatabase->getSymbolTable(pLayerTbl,AcDb::kForWrite);     if (!pLayerTbl->has(chName))     Приведенный выше пример кода ничем не различается от образцов кода из управления для ObjectARX ® . Повторяя уже произнесенное выше, светло видна схожесть меж объектами в GRX и ObjectARX ® . Тот же синтаксис для классов работы с базой данных чертежа, те же глобальные функции и те же способы для творения и закрытия объектов. Этих 2-ух не больших образцов довольно для того, чтоб убедиться в идентичности кода для интерфейсов GRX и ObjectARX ® . Не вдаваясь в подробности, можем только обобщить, что данное применимо и к иным модулям пользовательского прибавления: Творение объектов в чертеже

Творение графических частей также не вызывает затруднений, приведенный ниже пример все-таки можно вполне интегрировать как в GRX , так и ARX .

  Icad::ErrorStatus err;   AcDb2dPolyline* pLine = new AcDb2dPolyline();   AcDb2dVertex* StartPoint = new AcDb2dVertex(pntStrt,0,Thick,Thick,0);   AcDb2dVertex* EndPoint = new AcDb2dVertex(pntEnd,0,Thick,Thick,0);   err = pLine->appendVertex(StartPoint);   err = pLine->appendVertex(EndPoint);   pLine->setThickness(Thick);   if (Thick)     err = StartPoint->close();   err = EndPoint->close();   err = pLine->close();   return pLine;  В связи с необыкновенностями определений в интефейсе все-таки можно сделать комментарий, что наименования глобальных именованных областей Icad и Acad полностью взаимозаменяемы, и могут употребляться два названия. Внедрение реакторов

В интерфейсе программирования представлены классы для объявления нескольких типов реакторов:

Реакторы документов:

 AcEditorReactor — отслеживание действий редактора (команды и т.п.);

  AcDbDatabaseReactor — отслеживание действий творения, редактирования, удаления объектов в базе данных чертежа;

  AcTransactionReactor — отслеживание действий в транзакциях;

 AcDbObjectReactor — базисный класс реакторов, определяющий базисные способы для отслеживания событий над объектами;

  AcDbEntityReactor — отслеживание действий редактирования графических частей.

В данном прибавлении не было применено реакторов, тем не наименее, с уверенностью все-таки можно утверждать, что данный функционал работает и не имеет великих различий от ARX прибавлений.

Творение собственных классов для графических объектов

Творение объектов вероятно как в виде примитивов, в виде блоков, определенных на базе обычных классов интерфейса программирования, так и в виде собственных объектов, преемников от обычных классов.

В качестве образца в проекте был сотворен класс для управления динамическим перемещением объектов:

class PageBlockJig : public AcEdJig

;

Творение интерфейса юзера Интерфейс юзера создается с поддержкою классов Microsoft MFC , или с поддержкою DCL . В конкретном образце использовались классы MFC . В данном случае расширение создается как библиотека MFC с внедрением внутренних ресурсов модуля для хранения разговоров. Итог

Начальный код сделанного GRX-приложения для GstarCAD 2010 подобен тому, ежели бы данное прибавление было написано с внедрением ObjectARX .

Еще наиболее занимательно выявить что различает эти два интерфейса для разрабов и каковы же все-таки полные способности интерфейса разработки для GstarCAD ® . К раскаянию, в рамках данного образца выявить все необыкновенности интерфейса программирования тяжело, для этого нужен наиболее большой проэкт с внедрением всех способностей GRX .  Возможности интерфейса разработки для GstarCAD ® — как было уже сказано выше — полностью доступный и трудоспособный интерфейс разраба в стиле ObjectARX ® . Наиболее того, китайские создатели GstarCAD ® знамениты тем, что часто издают улучшения как платформы, так и интерфейсов проектирования прибавлений. В частности, в этом году планируется довести GRX до уровня ObjectARX ® для AutoCAD ® 2008.  Данная статья не претендует на настоящий и глубочайший обзор GRX и сопоставление его с интерфейсом разработки от AutoCAD ® — это было бы многостраничное управление. Цель статьи — выявление общности меж вышеуказанными интерфейсами разработки. Как достигнута цель все-таки можно судить по образцу проекта.    Пример проекта : http://dwg.ru/dnl/8091