使用类版本控制
在上面的示例中,对象应已使用其数据的 AutoCAD 2000 版本进行归档,因为它在所有早期版本中都成为代理,并且没有人会读取其数据(在级别上归档的数据除外)。AcDbDictionaryWithDefaultAcDbObject 为了解决此问题,引入了一种机制,在该机制中,对象可以覆盖文件管理器版本,并指定要归档的版本。以下规则适用:
叶类及其所有基类应使用适当的规则来归档数据。在上面给出的示例中,规则 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); 在文件管理器方法中,不是调用 ,而是让对象指示要用于转储数据的版本。同样,调用该方法并找出数据返回的版本。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 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-3-5 17:58
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.