CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

相关分类

使用类版本控制

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

在上面的示例中,对象应该已与其数据的 AutoCAD 2000 版本一起归档,因为它在所有以前的版本中都成为代理,并且没有人会读取其数据(在该级别归档的数据除外)。AcDbDictionaryWithDefaultAcDbObject

为了解决此问题,引入了一种机制,在该机制中,对象可以覆盖文件管理器版本,并指示要归档或归档的版本。以下规则适用:

  1. 如果文件管理器版本早于对象首次出现的 AutoCAD 版本(“出生”版本),请使用对象的出生版本。
  2. 如果文件管理器版本与对象的出生版本相同或更新,请使用文件管理器版本。

叶类及其所有基类应使用适当的规则将数据归档和归档。在上面给出的示例中,规则 2 适用(文件管理器来自 AutoCAD 2000,而对象来自版本 14),因此我们使用 AutoCAD 2000 版本进行归档。如果在 AutoCAD 2000 中引入了一个新类,其数据在 AutoCAD 2004 中也发生了更改,并且操作是另存为版本 14,则规则 1 适用,我们使用 AutoCAD 2000(出生)版本进行归档。

引入了两种虚拟方法来实现类版本控制,一种用于 DWG,一种用于 DXF 文件:AcDbObject

virtual Acad::ErrorStatus
getObjectSaveVersion(
    const AcDbDwgFiler* pFiler, 
    AcDb::AcDbDwgVersion& ver,
    AcDb::MaintenanceReleaseVersion& maintVer);
 
virtual Acad::ErrorStatus
getObjectSaveVersion(
    const AcDbDxfFiler* pFiler, 
    AcDb::AcDbDwgVersion& ver,
    AcDb::MaintenanceReleaseVersion& maintVer);

在文件管理器方法中,callto 不是调用,而是让对象指示使用哪个版本来转储数据。同样,调用该方法 inand 以找出数据返回的版本。filer->dwgVersion()self()‑>getObjectSaveVersion(filer, ...)dwgInFields()dxfInFields()

因为并非所有对象都需要覆盖文件管理器版本,那些通过在对象上设置位来指定其意图的对象。这通常在类的构造函数中完成。该位用作快速检查,以确定是否需要覆盖文件管理器版本。与此相关的方法已添加到:AcDbObject

bool
hasSaveVersionOverride();
 
void
setHasSaveVersionOverride(
    bool bSetIt);

还有一个新方法来获取对象的出生版本:AcDbObject

Acad::ErrorStatus
getObjectBirthVersion(
    AcDb::AcDbDwgVersion& ver,
    AcDb::MaintenanceReleaseVersion& maintVer);

此方法返回与此对象一起存储的两个版本号,这两个版本号在使用宏注册类时指定。AcRxClassACRX_DXF_DEFINE_MEMBERS


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部