Макрокоманды Выполнения Класса
Чтобы осуществлять ваш заказной класс, используйте одну из этих трех макрокоманд в источнике 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 () функция.