ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Макрокоманды Выполнения Класса


Чтобы осуществлять ваш заказной класс, используйте одну из этих трех макрокоманд в источнике file:

·          ACRX_NO_CONS_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS)

 Использование для абстрактных классов и любых других классов, которые не должны быть instantiated.

·          ACRX_CONS_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, VERNO)

 Использование для переходных классов, которые могут быть instantiated, но не написано к файлу.

·          ACRX_DXF_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, DWG_VERSION,\

MAINTENANCE_VERSION, PROXY_FLAGS, DXF_NAME, APP)

 Использование для классов, которые могут быть записаны в, или читать от, DWG и DXF файлы.

Каждая из этих макрокоманд определяет следующее:

·         объект описателя Класса

·         функция инициализации Класса (см. “ Функция Инициализации Класса ” на странице 289)

·         desc () функция для этого класса

·         виртуальный isA () функция (унаследованный от AcRxObject) который этот заказной класс отменит

Для AsdkPoly, следующая строка расширяется до очень длинной одиночной линии кода:

ACRX_DXF_DEFINE_MEMBERS(AsdkPoly, AcDbCurve, AcDb::kDHL_CURRENT,\

AcDb::kMReleaseCurrent, 0, POLYGON, /*MSG0*/"AutoCAD");

Когда переформатировано к множественным строкам для ясности, строка напоминает это:

AcRxClass* AsdkPoly::desc()

{

                if (AsdkPoly::gpDesc != 0)

                               return AsdkPoly::gpDesc;

                return AsdkPoly::gpDesc =

                               (AcRxClass*)((AcRxDictionary*)acrxSysRegistry()->

                                               at("ClassDictionary"))->at("AsdkPoly");


}

AcRxClass* AsdkPoly::isA() const

{

                return AsdkPoly::desc();

}

AcRxClass* AsdkPoly::gpDesc = 0;

static AcRxObject * makeAsdkPoly()

{

                return new AsdkPoly();

}

void AsdkPoly::rxInit()

{

                if (AsdkPoly::gpDesc != 0)

                return;

                AsdkPoly::gpDesc = newAcRxClass("AsdkPoly",

                                                               "AsdkCurve", AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,

                                                               0, &makeAsdkPoly, "POLYGON", "\"AutoCAD\"");

};

 Когда расширено, точка с запятой (;) в конце макро строки запроса перемещается в только после закрывающей фигурной скобки (}) для функционального определения. Поэтому, эта точка с запятой не требуется для этой макро строки запроса.

Если Вы хотите записать ваш собственный rxInit () функция, использовать ACRX_DEFINE_MEMBERS () макрокоманда отдельно, которая определяет desc (), cast (), и isA () для вашего класса, но не определяет rxInit () функция. Эта макрокоманда также не создает связанный объект AcRxClass, который является ответственностью rxInit () функция.


Содержание раздела







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий