若要实现自定义类,请在源文件中使用以下三个宏之一:
对于,以下行扩展为很长的单行代码: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-1-8 19:50
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.