CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2024 开发者帮助

类实现宏

2024-5-18 19:12| 发布者: admin| 查看: 14| 评论: 0|原作者: admin|来自: AutoCAD

类实现宏

若要实现自定义类,请在源文件中使用以下三个宏之一:

  • ACRX_NO_CONS_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS)

    用于抽象类和任何其他不应实例化的类。

  • ACRX_CONS_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, VERNO)

    用于可以实例化但未写入文件的瞬态类。

  • ACRX_DXF_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, DWG_VERSION,\
  • MAINTENANCE_VERSION, PROXY_FLAGS, DXF_NAME, APP)

    用于可以写入或读取 DWG 和 DXF 文件的类。其中每个宏都定义以下内容:

  • 类描述符对象
  • 类初始化函数(请参阅类初始化函数)
  • 此类的函数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()AcRxClassrxInit()


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-6-27 16:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部