ソフトウェアを開発する際、ほとんどの企業はGit、SVNなどのバージョン管理システムを使用します。バージョン管理により、複数の人々の間で作業を分散させたり、作業を結合したり、個人が行った特定の変更を表示したりすることが可能になります。この種のシステムは、特に複数の人が1つの図面で作業する場合に、図面を作成する際に便利です。
OdTfRevisionControl
Teighaには、.dwgファイルでの作業のためのOdTfRevisionControlと呼ばれる同様の機能があります。OdTfRevisionControlはまだ開発中です。バージョン管理システムの主要な概念はコミットです。
コミットは、最新の変更をリポジトリに追加し、追加、編集、または削除されたオブジェクト(OdDbLine、OdDb3dSolid、OdDbBlockTable、OdDbDictionaryなど)の状態を保存します。
開始するには、リポジトリを作成する必要があります。OdTfRevisionControlを使用すると、空のリポジトリ(リポジトリ内に空の.dwgデータベースが作成されます)を作成できます。既存の.dwgファイルをリポジトリにインポートすることも可能です。
OdTfRevisionControlはシングルユーザー(ローカル)モードで動作しますが、マルチユーザー(クライアントサーバー)モードで動作できるAPIも備えています。makePatch / applyPatch機能は、クライアントサーバーモードで使用できるOdTfRevisionControl APIの一部です。
バージョン管理システムには様々なワークフローがあります。その多くは、異なるブランチでの作業について説明しています。OdTfRevisionControlを使用すると、作業用の新しいブランチを作成したり、別のブランチとマージしたりすることができます。
リビジョンデータの圧縮
図面内で1つのオブジェクトのみを変更した場合、そのオブジェクト自体は、それに依存していて変更されたオブジェクトとともにコミットに配置されます。したがって、すべてのオブジェクトに対して「移動/ドラッグ」を行うと、コミットは大きくなります。リポジトリの容量を削減するため(コミットのサイズを削減するため)、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を使用することで、個人での作業でも開発チームでの作業でも、図面を扱う上で強力なツールとなります。