CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2019 开发者帮助

类数据或 Xdata 版本号

2024-5-18 17:57| 发布者: admin| 查看: 97| 评论: 0|原作者: admin|来自: AutoCAD

类数据或 Xdata 版本号

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

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

  • 当应用程序在文件中遇到对象的过时版本时,它应该能够将对象更新到当前版本。更新旧对象涉及添加任何新的数据成员和成员函数,以及更改版本号。
  • 当旧版本的应用程序遇到较新版本的对象时(即,当对象的修订号大于应用程序的修订号时),自定义类和函数应立即将错误代码返回给 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);
...
}

父主题:

  1. 对象版本支持

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2025-3-14 08:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部