Polymorphism

誰も教えてくれない!プログラム開発に必須の情報!

図面データベースの構造
AutoCAD Database


ホーム > 技術情報 > 図面データベースの構造


図面データベースとは?

図面データベースとは、AutoCADが起動中にメモリー内に作成される図面情報を格納したデータベースです。図面情報の保管という意味では、図面ファイル(DWGファイルやDXFファイル)と似ているところもありますが、AutoCADを実行中に作図、編集される情報を逐一図面ファイルに書き出していては、図面ファイルが膨大な大きさになってしまいますし、アクセス速度も低下します。これではAutoCAD自体のスピードあ低下してしまいます。そこでAutoCADが起動している間は、この作図、編集情報を簡単にかつ高速に操作できるように、メモリーの中に図面情報を蓄えるための「図面データベース」を構築します。
そのため、図面データベースはAutoCADが実行している間にしか存在しません。
図面データベースは、AutoCADが実行されるとそのシステムによって自動的にメモリー内に作成されます。そして、図面ファイルを開くとその図面ファイルの情報を読み込み、メモリー上の図面データベースへと展開します。
以降、図面ファイルへ情報を保存するまでAutoCADが図面ファイルをさわることはありません。



図面データベースの基本構造

LT VB-COMは、基本的にAutoCADの図面データベースを操作するためのツールです。プログラムを利用して自分が操作したいオブジェクトをこの図面データベースの中から見つけ出し、そのオブジェクトに対して様々な命令を実行します。そのためは、自分の操作したいオブジェクトが、図面データベース中のどの場所に存在しているかをある程度把握しておく必要があります。図面データベース内のオブジェクトの場所を把握するためには、この図面データベースの構造を理解しておく必要があります。
「AutoCADの図面データベースの構造」と言っても、難しいものではありません。この図面データベースの構造を、図にあらわすと以下のように表現できます。

図面データベースの基本構造は、図面データベース全体を管理している「図面データベース オブジェクト」を筆頭に、画層や線種、ブロックなどの「シンボルテーブルオブジェクト」、そしてその要素である「シンボルテーブルレコード オブジェクト」から構成されています。
この構造は、通常のAutoCADの操作をご存知の方であれば、難しい構造ではないことがわかると思います。
図面データベースの構造は、この構造のみです。何も難しいものはありません。



つながり

図面データベースは、図のようにオブジェクトが「つながる」ことで構成されています。「つながり」は下図のようにオブジェクトの「親(オーナー)」「子」関係で構成されています。「親(オーナー)」となるオブジェクトは、各シンボルテーブル オブジェクトのように、複数のオブジェクトを「つなげる」ことができます。

このように、図面データベース内のオブジェクトは、必ず関連する別のオブジェクトと「つながる」ことで、図面データベースの一部のオブジェクトとなっているのです。この「つながり」をたどることで、必ず目的のオブジェクトへとたどり着きます。
例えば、「画層0」の情報が取得したい場合、基本的には以下の手順で図面データベース内の「つながり」を検索します。

その中において、図形関連のオブジェクトは、「ブロックテーブルオブジェクト」内の「ブロックテーブルレコード オブジェクト」につながっています。このしくみは、AutoCADが「ブロック登録」するしくみと同様です、登録するブロックの形状をあらわすために、その登録されたブロック(これがブロックレコードオブジェクト)に図形をつなげておきます。これが、ブロック図形となっているわけです。同じしくみを利用して、「モデル空間」や「ペーパー空間」なども定義しています。
つまり、通常の「モデル空間」で作図することは、「モデル空間」というブロックに図形を追加しているのと同じことになるのです。
この構造さえ知っていれば、図面データベース内のどのオブジェクトも見つけて操作することが可能です。



シンボルテーブルの基本構造

図面データベース構造の基本は、図のようにシンボルテーブル オブジェクトと、その要素であるレコード オブジェクトの組み合わせで構成されています。

各シンボルテーブル オブジェクトは、それぞれ図面データベース オブジェクトから「つながって」います。(つまり、各シンボルテーブル オブジェクトから見ると、図面データベース オブジェクトは「親(オーナー)」オブジェクトとなります。)
シンボルテーブル オブジェクトには、その要素として複数のシンボルテーブルレコード オブジェクトを「つなげる」ことができます。(シンボルテーブルオブジェクトも「親(オーナー)」オブジェクトということです。)つまり、シンボルテーブル オブジェクトはそのシンボルテーブル全体をとりまとめて管理するオブジェクトであり、実際の各要素に設定される情報は各シンボルテーブルレコード オブジェクトに設定されます。

例えば、「AutoCAD上で『画層』を作成する」という作業は、図面データベース上では画層テーブル オブジェクトに、新しい画層テーブルレコード オブジェクトを追加する作業になります。つまり、「画層」を追加すると画層テーブルレコード オブジェクトが追加されることになるのです。

どのシンボルテーブルも、シンボルテーブル オブジェクトにシンボルテーブルレコード オブジェクトが複数「つながる」という構造はまったく同じです。そのため、このシンボルテーブルに関する操作の方法は1つ理解しておけば、すべてのシンボルテーブルに使用できます。

このシンボルテーブルの主なものには、以下のような種類があります。

---------------------------------------------
AcDbViewportTable(ビューポートテーブル)
AcDbViewTable(ビューテーブル)
AcDbBlockTable(ブロックテーブル)
AcDbDimStyleTable(寸法スタイルテーブル)
AcDbLayerTable(画層テーブル)
AcDbLinetypeTable(線種テーブル)
AcDbRegAppTable(アプリケーションテーブル)
AcDbTextStyleTable(文字スタイルテーブル)
AcDbUCSTable(UCSテーブル)
----------------------------------------------



図形の保存場所と構造

シンボルテーブルとレコードの関係の構造の中に、もっとも重要な「図形」は登場しておりません。それでは「図形」は、この構造のどこに存在するのでしょうか?実は「図形」は、AutoCADの登録ブロックを管理する「BLOCKテーブル」オブジェクトの「BLOCKテーブルレコード」オブジェクトに「つながって」おります。

通常「BLOCKテーブル」オブジェクトには、ブロック登録をすると「BLOCKテーブルレコード」オブジェクトが追加されます。このとき、ブロック登録したブロックの構成要素が「図形」オブジェクトとして、「BLOCKテーブルレコード」オブジェクトに「つながり」、ブロックの形状を保存します。
ブロックの登録を行う度に順次、「BLOCKテーブルレコード」オブジェクトが追加されて行くことはAutoCADのブロックをご存知の方には想像しやすいと思います。図面データベースの構造におきまして、各種「図形」オブジェクトはこの「BLOCKテーブルレコード」オブジェクトに「つながる」構造のみとなります。
ところで、AutoCADの「通常の作図」の場合はどうなるのでしょうか?
実は、AutoCADの「通常の作図」もまったく同様の構造で管理されております。AutoCADの「通常の作図」とは「モデル空間」への作図となります。このことから、この「モデル空間」自体を1つも「ブロック」と考えるとブロックとまったく同じ構造で「図形」オブジェクトが管理できるのです。

つまり、AutoCADのモデル空間上で通常の作図を行いますと、「モデル空間」という「BLOCKテーブルレコード」オブジェクトに作図した図形が「図形」オブジェクトとして「つながって」行くことになります。

「モデル空間」を表すブロックテーブルレコード オブジェクトは、「"*Model Space"」という名前のブロックテーブルレコード オブジェクトになります。


ご注意:
(1) 本項目の全部または一部を無断で転載することは禁止されています。
(2) 製品、会社名は、各社の商標または登録商標です。
(3) 本項目内容の著作権は有限会社ポリモフィズムに帰属します。