Teigha 版本控制中的数据压缩

在开发软件时,大多数公司都使用版本控制系统,例如 Git、SVN 等。版本控制使得在多人之间分配工作、合并工作、查看个人所做的具体更改等成为可能。这种系统在创建图纸时非常方便,尤其是在多个人处理同一张图纸时。

OdTfRevisionControl

Teigha 具有类似的功能,称为 OdTfRevisionControl,用于处理 .dwg 文件。OdTfRevisionControl 仍在开发中。版本控制系统中的主要概念是提交。

提交将最新更改添加到存储库,并保存已添加、编辑或删除的对象(OdDbLine、OdDb3dSolid、OdDbBlockTable、OdDbDictionary 等)的状态。

首先,您需要创建一个存储库。OdTfRevisionControl 允许您创建一个空存储库(在存储库中创建一个空的 .dwg 数据库)。您还可以将现有的 .dwg 文件导入到存储库中。

OdTfRevisionControl 可以在单用户(本地)模式下工作,但它也提供了一个 API,允许您在多用户(客户端-服务器)模式下工作。makePatch / applyPatch 功能是 OdTfRevisionControl API 中可用于客户端-服务器模式的部分。

版本控制系统有多种工作流程。其中许多都描述了如何使用不同的分支进行工作。借助 OdTfRevisionControl,您可以创建一个新的工作分支,并将其与另一个分支合并。

修订数据压缩

如果您只更改绘图中的一个对象,则该对象本身以及依赖于它且也已更改的对象将被放入提交中。因此,如果您对所有对象进行“移动/拖动”操作,则提交将很大。为了减小存储库的体积(减小提交的大小),OdTfRevisionControl API 中有一个 compressRevisionData 函数。每次提交时,我们不会自动压缩对象,但借助 API,您可以一次压缩 N 个提交。

在提交之间移动(以获取所需的提交)时,压缩数据必须恢复到其以前的形式,这需要时间。要恢复压缩数据,您需要一个参考点(初始数据,相对于之前已压缩的数据)。为了减少恢复时间,初始状态(整体)应尽可能接近压缩状态。为此,compressRevisionData 会以指定的时间间隔压缩提交中的对象。换句话说,当达到指定的压缩深度时,对象将不会被压缩,而是在将来被压缩。

您可以在下面看到绘图的初始状态以及每次提交的更改。

image1

下表显示了存储库的初始大小、每次提交后的大小以及所有提交压缩后的大小。在此示例中,执行了移动和删除对象的操作。

  大小 (千字节) 大小差异
源存储库大小 8,564  
提交 1 8,840 +0,276
提交 2 8,884 +0,44
提交 3 8,928 +0,44
提交 4 8,972 +0,44
已压缩 8,756 -0.216

您可以在下面看到绘图初始状态和每次提交更改的另一个示例。

image2

下表显示了存储库的初始大小、每次提交后的大小以及所有提交压缩后的大小。在此示例中,所有绘制的对象都被移动,选定的对象被移动,并且添加了新的对象。

  大小 (千字节) 大小差异
源存储库大小 10,052  
提交 1 11,068 +1,016
提交 2 12,072 +1,004
提交 3 13,916 +1,844
已压缩 10,052 -3.864

结论

最初,版本控制仅适用于文本形式的文件,而 .dwg 文件格式的特殊性使得版本控制不易实现。现在,使用 OdTfRevisionControl 是一个强大的工具,无论是个人还是开发团队在处理绘图时都非常有用。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用