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 () функция.


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