若要实现自定义类,请在源文件中使用以下三个宏之一:
对于,以下行扩展为很长的单行代码: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\"");
};
展开时,分号 (;)在宏调用行的末尾移动到函数定义的右大括号 (}) 之后。因此,此宏调用行不需要此分号。 如果你想编写自己的函数,请单独使用 themacro,它定义了 和 for 你的类,但不定义函数。此宏也不会创建关联的对象,这是函数的责任。rxInit()ACRX_DEFINE_MEMBERS()desc()cast()isA()rxInit()AcRxClassrxInit() |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-10-29 07:08
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.