在开发软件时,大多数公司都使用版本控制系统,例如 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 会以指定的时间间隔压缩提交中的对象。换句话说,当达到指定的压缩深度时,对象将不会被压缩,而是在将来被压缩。
您可以在下面看到绘图的初始状态以及每次提交的更改。
下表显示了存储库的初始大小、每次提交后的大小以及所有提交压缩后的大小。在此示例中,执行了移动和删除对象的操作。
| 大小 (千字节) | 大小差异 | |
| 源存储库大小 | 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 |
您可以在下面看到绘图初始状态和每次提交更改的另一个示例。
下表显示了存储库的初始大小、每次提交后的大小以及所有提交压缩后的大小。在此示例中,所有绘制的对象都被移动,选定的对象被移动,并且添加了新的对象。
| 大小 (千字节) | 大小差异 | |
| 源存储库大小 | 10,052 | |
| 提交 1 | 11,068 | +1,016 |
| 提交 2 | 12,072 | +1,004 |
| 提交 3 | 13,916 | +1,844 |
| 已压缩 | 10,052 | -3.864 |
结论
最初,版本控制仅适用于文本形式的文件,而 .dwg 文件格式的特殊性使得版本控制不易实现。现在,使用 OdTfRevisionControl 是一个强大的工具,无论是个人还是开发团队在处理绘图时都非常有用。