在上面的示例中,对象应该已与其数据的 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); 在文件管理器方法中,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 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:13
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.