CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

类实现宏

2022-12-31 22:57| 发布者: admin| 查看: 260| 评论: 0|来自: 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\"");
};

展开时,分号 (;)在宏调用行的末尾移动到函数定义的右大括号 (}) 之后。因此,此宏调用行不需要此分号。

如果你想编写自己的函数,请单独使用 themacro,它定义了 和 for 你的类,但不定义函数。此宏也不会创建关联的对象,这是函数的责任。rxInit()ACRX_DEFINE_MEMBERS()desc()cast()isA()rxInit()AcRxClassrxInit()


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 11:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部