CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

类数据或 Xdata 版本号

2022-12-31 21:28| 发布者: admin| 查看: 268| 评论: 0|来自: AutoCAD

版本号可以存储为类的数据成员,并且可以作为每个对象的第一个数据成员归档。由于此数据是持久性的,并且是读取的第一项,因此可以在读取任何其他数据之前对其进行检查以确定对象的版本。

当使用数字来区分对象的版本时,父 ObjectARX 应用程序必须能够处理对象的不兼容版本的这两种情况:

  • 当应用程序在文件中遇到对象的过时版本时,它应该能够将对象更新到当前版本。更新旧对象涉及添加任何新的数据成员和成员函数,以及更改版本号。
  • 当较旧版本的应用程序遇到较新版本的对象时(即,当对象的修订号大于应用程序的修订号时),自定义类的 sandfunctions 应立即将错误代码返回到 AutoCAD。然后,AutoCAD 将为图形会话创建一个代理对象,并在保存图形时将原始对象写入文件。dxfInFields()dwgInFields()eMakeMeProxy

具有数据成员版本号的对象版本控制在 ObjectARX SDK 中的\samples\entity\polysamp\poly.cpp中的以下代码片段中进行了说明。

// Object Version
#define VERSION 1
...
Acad::ErrorStatus
AsdkPoly::dwgInFields(AcDbDwgFiler* filer)
{
...
    // Object Version - must always be the first item
    Adesk::Int16 version;
    filer->readItem(&version);
    if (version > VERSION)
        return Acad::eMakeMeProxy;
...
}
Acad::ErrorStatus
AsdkPoly::dwgOutFields(AcDbDwgFiler* filer) const
{
...
    // Object Version - must always be the first item
    Adesk::Int16 version = VERSION;
    filer->writeItem(version);
...
}
Acad::ErrorStatus
AsdkPoly::dxfInFields(AcDbDxfFiler* filer)
{
...
    // Object Version
        case AcDb::kDxfInt16:
            Adesk::Int16 version;
            version = rb.resval.rint;
            if (version > VERSION)
                return Acad::eMakeMeProxy;
            break;
...
}
Acad::ErrorStatus
AsdkPoly::dxfOutFields(AcDbDxfFiler* filer) const
{
...
    // Object Version
    Adesk::Int16 version = VERSION;
    filer->writeItem(AcDb::kDxfInt16, version);
...
}

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 14:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部