Пример творения проекта с внедрением интерфейса 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