
DXFファイル解析プログラム
Copyright 2011年、佐々木芳
はじめに
ここでは、DXFファイルを読み込み、解析するプログラムであるDxfReaderについて説明します。DXFとはオートデスク社が定めたCADの図面データを交換するために使われている形式です。DxfReaderは、DXFファイルのテキスト構造を解析するだけのプログラムですが、その結果をVisualBasicなどのオートメーション対応言語から利用できるようにします。そのため、DxfReaderはWindowsオートメーションサーバとして動作するように実装しています。
参考文献
[1]
DXFハンドブック 落合重紀著 オーム社
[2]
AutoCAD 2011 ヘルプ(http://docs.autodesk.com/ACD/2011/JPN/landing.html)
[2]
マイクロソフト MSDN ライブラリ(http://msdn.microsoft.com/ja-jp/library/default.aspx )
©佐々木芳 2011年
DXFファイルはテキスト形式のファイルです。
ファイル内は、セクションと呼ばれる領域で構成されています。セクションはファイルの先頭から以下のように並んでいます。しかし、すべてのセクションがあるわけではないようです。
l HEADERセクション
l CLASSESセクション
l TABLESセクション
l BLOCKSセクション
l ENTITIESセクション
l OBJECTSセクション
l THUMBNAILIMAGEセクション
DXFファイル内のテキストは2行1組で解釈します。最初の行はグループコードと呼ばれる整数を表す4文字以内で構成されます。2行目は、グループコードに応じて、文字列、浮動小数点数、整数などを表します。例えば、以下のような行の構成でなっています。
![]()
1組 1組
0
SECTION
1組
2
HEADER
9
$ACADVER
DXFファイルでは、この2行1組で表される情報が最小要素です。
セクションは、以下の2行から始まり、
0
SECTION
以下の2行で終わります。
0
ENDSEC
ファイルの最後は以下の2行です。
0
EOF
DXFファイルの構造をUMLでモデル化したものを以下に示します。

念のためですが、これはDXFファイル内のテキスト構造をモデル化したもです。図形情報の意味的なモデルではありません。
DxfReaderはDXFファイルを読み込み、以下のようなオブジェクトに展開します。DxfReaderはオートメーションサーバとしてこれらのオブジェクトをIDispatchインターフェースとして提示します。
DxfReaderでは、CLASSES、OBJECTS、THUMBNAILIMAGEセクションは読み飛ばすので、これらは以下のモデルには含まれていません。

ここで、DxfReaderで定義しているステレオタイプの説明をします。
ステレオタイプ<<creatable>>の指定されたクラスは、クライアントアプリケーションからこのクラスのインスタンスを作成して使用することを意味します。VisualBasicから操作する場合New演算子を使ってインスタンスを作成できます。
ステレオタイプ<<collection>>はコレクションクラスを意味します。VisualBasicの場合は、このクラスのインスタンスをFor Each … In …ステートメントのInの直後に指定することができます。
DxfReaderは、インプロセスのCOMサーバなので、32ビットWindowsでは32ビット版DxfReaderを、64ビット版Windowsでは64ビット版DXfReaderをインストールする必要があります。
ここから、ZIP形式の圧縮ファイルをダウンロードしてください。適当なフォルダに解凍すると以下の2つのファイルができます。
l SetupDxfReader.msi 32ビット版インストーラ
l SetupDxfReader64.msi 64ビット版インストーラ
l Readme.txt
インストールする前にコントロールパネルから以前のバージョンのDxfReaderをアンインストールしてください。
SetupDxfReader.msiを実行すると、以下のファイルがインストールされます。
l DxfReader.dll
l TestDxfReader.exe
l Interop.DxfReader.dll
l DxfReader解説書.pdf
SetupDxfReader64.msiを実行すると、以下のファイルがインストールされます。
l DxfReader64.dll
l TestDxfReader.exe
l Interop.DxfReader.dll
l DxfReader解説書.pdf
スタートメニュに「DxfReader」が追加されます。このメニュ下にある「DXFファイルの解析」で
TestDxfReader.exeを実行します。TestDxfReader.exeは、DxfReaderを使用してDXFファイルの解析を行うサンプルプログラムです。これは、Visual Basic 2008 Express Editionで作成しているので実行するには、Microsoft .Net Framework 2.0が必要となります。
「DXFファイルの解析」を選択後、以下のメッセージボックスが表示された場合は、WindowsUpdateからMicrosoft
.Net Framework 2.0をインストールしてください。

補足
DxfRader.dllは32ビット版DLLです。したがってTestDxfReader.exeも32ビットアプリケーションとして作成しています。64ビット版Windowsにもインストールできますが、TestDxfReader.exeが実行できません。
DxfReader.dllはCOMサーバであり、TestDxfReader.exeはDxfReaderのクライアントプログラムとなります。クライアントプログラムはオートメーション対応言語(VisualBasic,C#など)で作成します。ここでは、VisualBasic 2008 ExpressEditionを例に説明します。
DxfReaderの公開するオブジェクトを操作するためには、参照を追加する必要があります。Visual Basic 2008 Express EditionのIDEの「プロジェクト」メニュの「参照の追加」を開くと以下のウインドウが開きます。ここでCOMタブを開き、DxfReaderを選択し、OKボタンをクリックします。これでVisual BasicのプロジェクトにDxfReaderの参照が追加されます。
![]()
![]()

DxfReaderの参照が追加されると、VisualBasic2008のオブジェクトブラウザ(「表示」メニュの「オブジェクトブラウザ」で開く)でDxfReaderが公開するオブジェクト群を確認できます。
![]()

TestDxfReader.exeのソースファイル、プロジェクトファイルはこちらからダウンロードしてください。
Visual Basic 2008 Express Edition はこちらから(http://www.microsoft.com/japan/msdn/vstudio/express/)ダウンロードできます。
新しくVisual Basicプロジェクトを作成する場合は、最初に参照を追加します。こうすると、エディターで自動コード補完機能が利用できるので、まず参照の追加を行うことをお勧めします。この参照を追加することを事前(アーリー)バインディングと呼びます。
補足
Visual Basic 2008 Express Editionの規定の動作は、32ビット版Windowsでは32ビットアプリケーションをビルドし、64ビット版Windowsでは64ビットアプリケーションをビルドします。したがって、Windowsに応じて適切なDxfReader(Windowsに応じて32ビット版か64ビット版のどちらか)をインストールしておく必要があります。
V1.0.0 2011,05,05 最初の公開
V1.0.1 2012,01,04 64ビット版を公開
©佐々木芳 2011