|
DXFファイル解析プログラム
Copyright 2011-2022年、佐々木芳
はじめに
ここでは、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年
1 DXFファイルの概要
DXFファイルはテキスト形式のファイルです。
ファイル内は、セクションと呼ばれる領域で構成されています。セクションはファイルの先頭から以下のように並んでいます。しかし、すべてのセクションがあるわけではないようです。
l HEADERセクション
l CLASSESセクション
l TABLESセクション
l BLOCKSセクション
l ENTITIESセクション
l OBJECTSセクション
l THUMBNAILIMAGEセクション
DXFファイル内のテキストは2行1組で解釈します。最初の行はグループコードと呼ばれる整数を表す4文字以内で構成されます。2行目は、グループコードに応じて、文字列、浮動小数点数、整数などを表します。例えば、以下のような行の構成でなっています。
0
SECTION
2
HEADER
9
$ACADVER
DXFファイルでは、この2行1組で表される情報が最小要素です。
セクションは、以下の2行から始まり、
0
SECTION
以下の2行で終わります。
0
ENDSEC
ファイルの最後は以下の2行です。
0
EOF
2 DXFファイルの分析モデル
DXFファイルの構造をUMLでモデル化したものを以下に示します。
念のためですが、これはDXFファイル内のテキスト構造をモデル化したものです。図形情報の意味的なモデルではありません。
3 オブジェクトモデル
DxfReaderはDXFファイルを読み込み、以下のようなオブジェクトに展開します。DxfReaderはオートメーションサーバとしてこれらのオブジェクトをIDispatchインターフェースとして提示します。
DxfReaderでは、CLASSES、OBJECTS、THUMBNAILIMAGEセクションは読み飛ばすので、これらは以下のモデルには含まれていません。
ここで、DxfReaderで定義しているステレオタイプの説明をします。
ステレオタイプ<<creatable>>の指定されたクラスは、クライアントアプリケーションからこのクラスのインスタンスを作成して使用することを意味します。VisualBasicから操作する場合New演算子を使ってインスタンスを作成できます。
ステレオタイプ<<collection>>はコレクションクラスを意味します。VisualBasicの場合は、このクラスのインスタンスをFor Each … In …ステートメントのInの直後に指定することができます。
4 インストール
4.1 V1.2.3のインストール
DxfReaderは、インプロセスのCOMサーバなので、32ビットWindowsでは32ビット版DxfReaderを、64ビット版Windowsでは64ビット版DXfReaderをインストールする必要があります。
ここから、ZIP形式の圧縮ファイルDxfReaderV123.zipをダウンロードしてください。適当なフォルダに解凍すると以下の3つのファイルができます。
l Setup86.msi 32ビット版インストーラ形式のファイル
l Setup64.msi 64ビット版インストーラ形式のファイル
l Readme.txt
インストールする前にコントロールパネルから以前のバージョンのDxfReaderをアンインストールしてください。
32ビットWindows、64ビットWindowsに応じて上記のzip形式のファイルを適当なフォルダーに解凍してください。解凍後DxfReader.msiを実行してください。
以下のファイルがインストールされます。
DxfReader.dll(またはDxfReader64.dll)
DxfReader.tlb(またはDxfReader64.tlb)
TestDxfReader.exe
Interop.DxfReader.dll
DxfReader解説書.pdf
スタートメニュに「C-Machine」が追加され、その下に「DxfReader」(または「DxfReader86」)が追加されます。
その下に
・TestDxfReader.exe
・DxfReader解説書.pdf
が追加されます。
TestDxfReader.exeを実行します。TestDxfReader.exeは、DxfReaderを使用してDXFファイルの解析を行うサンプルプログラムです。これは、Visual Basic 2008で作成しているので実行するには、Microsoft .Net Framework 3.5 SP1が必要となります。
5 クライアントプログラム
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(V1.0.1)のソースファイル、プロジェクトファイルはこちらからダウンロードしてください。
TestDxfReader.exe(V1.0.2)のソースファイル、プロジェクトファイルはこちらからダウンロードしてください。
TestDxfReader.exe(V1.2.3)のソースファイル、プロジェクトファイルはこちらからダウンロードしてください。
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ビット版のどちらか)をインストールしておく必要があります。
6 修正履歴
V1.0.0 2011,05,05 最初の公開
V1.0.1 2012,01,04 64ビット版を公開
V1.0.2 2015,01,04 DXFのCLASSES、OBJECTSセクションに対応
Microsoft Visual Studio Community 2013 Update 4を使って作成
V1.2.3 2022,01,05 機能追加、変更
Visual Studio Professional 2013を使って作成。TestDxfReaderはVisual Basic 2008で作成。インストーラはVisual Studio 2008で作成
©佐々木芳 2011-2015