15.Hira3D読み込みプラグインを利用したモデルファイルの読み込みに対応する



Hira3D読み込みプラグインを利用したモデルファイルの読み込みに対応します。
Hira3D読み込みプラグインを利用したモデルファイルの読み込みに対応すると、読み込みプラグインが存在するモデルファイルフォーマットに関しては、自分でファイル読み込み処理を作る必要がなくなります。
(2006/01/15現在 Hira3DViewerには、「.3ds」「.dxf」「.gts」「.obj」「.stl」読み込みプラグインが添付されています。)

実行形式ファイルダウンロード (ModelViewer12_exe.lzh)

ソースファイルダウンロード (ModelViewer12_src.lzh)

プロジェクトを開く

14.で作成したモデルビューワプロジェクトを開きます。

Hira3DLoadPluginライブラリファイルのプロジェクトへの追加

ModelViewerフォルダの下にHira3DLoadPluginというフォルダを作り、そのフォルダの中にHira3DLoadPluginライブラリソースファイルを置きます。

Hira3DLoadPluginライブラリソースファイル

「メニュー/プロジェクト/プロジェクトをワークスペースへ挿入」でHira3DLoadPluginライブラリをプロジェクトへ追加します。
(Hira3DLoadPlugin.dspを選択し、「OK」ボタンを押します。)

PluginObjectライブラリファイルのプロジェクトへの追加

ModelViewerフォルダの下にPluginObjectというフォルダを作り、そのフォルダの中にPluginObjectライブラリファイルを置きます。

PluginObjectライブラリソースファイル

「メニュー/プロジェクト/プロジェクトをワークスペースへ挿入」でPluginObjectライブラリをプロジェクトへ追加します。
(PluginObject.dspを選択し、「OK」ボタンを押します。)

ワークスペースへプロジェクトを追加すると、追加されたプロジェクトがアクティブプロジェクトになります。
アクティブプロジェクトをModelViewerプロジェクトに戻します。
(「メニュー/プロジェクト/アクティブプロジェクトに設定/ModelViewer」を選択します。) 「メニュー/プロジェクト/依存関係」で、追加した2つのプロジェクトがModelViewerプロジェクトに依存するようにします。


ビルドし、エラー、警告がないことを確認します。

Hira3D読み込みプラグイン用のメンバ変数、メンバ関数の宣言の追加

ModelViewerView.h のCModelViewerViewクラスに
Hira3D読み込みプラグイン用のメンバ変数の宣言
std::vector<HIRA3DLOADPLUGIN> m_vLoadPlugin;
と、Hira3DLoadPlugin用のメンバ関数の宣言
void InitPlugins();
void UninitPlugins();
int PluginModel2Model( const PLUGINMODEL* pPluginModel, CModel* pModel );
を追加します。



ModelViewerView.hのファイルのヘッダー部に
#include "Hira3DLoadPlugin\Hira3DLoadPlugin.h"
を追加します。

メンバ関数の定義の追加

ModelViewerView.cppに、Hira3D読み込みプラグイン用のメンバ関数
InitPlugins
UninitPlugins
PluginModel2Model
の関数の定義を追加します。



ModelViewerView.cppのファイルのヘッダー部に
#include "PluginObject\PluginObjectUtility.h"
#include <math.h> // sqrt()
および
#define NhGlobalAlloc(a,b) (b ? GlobalAlloc(a,b) : 0)
#define NhGlobalFree(a) if( a ){ GlobalFree(a); a = 0; }
#define NhGlobalLock(a) (a ? GlobalLock(a) : 0)
#define NhGlobalUnlock(a) if( a ){ GlobalUnlock(a); }
#define NhGlobalSize(a) (a ? GlobalSize(a) : 0)
#define NhGlobalFlags(a) (a ? GlobalFlags(a) : 0)
を追加します。

プロジェクトの設定変更

「メニュー/プロジェクト/設定」でModelViewerプロジェクトの「一般/Microsoft Foundation Class」の設定を「共有DLLでMFCを使用」から「MFCのスタティックライブラリを使用」に変更します。(Win32 Debug/Win32 Release どちらも)(「共有DLLでMFCを使用」でもいけるはずだが、なぜかリンクをうまく通すことができない。。。調査中。。。誰か教えて。。。)



ビルドし、エラー、警告がないことを確認します。

OnCreateメッセージハンドラとOnDestroyメッセージハンドラの追加、編集

以下のメッセージハンドラをCModelViewerViewクラスに追加します。

ウィンドウメッセージ名 メッセージハンドラ名
WM_CREATE OnCreate
WM_DESTROY OnDestroy

OnCreateメッセージハンドラにInitPlugins関数呼び出しを追加し、
OnDestroyメッセージハンドラにUninitPlugins関数呼び出しを追加します。



ビルドし、エラー、警告がないことを確認します。

メニュー「ファイル/開く」の応答関数の変更

メニュー「ファイル/開く」の応答関数をHira3D読み込みプラグインを用いてファイル読み込みを行うように変更します。

CModelViewerView::OnFileOpen関数の内容を以下のようにします。



ビルドし、エラー、警告がないことを確認します。

実行

実行ファイルのあるフォルダの中に、「plugins」という名前のフォルダを作成し、「plugins」フォルダの中に、Hira3D読み込みプラグインファイルを置き、実行します。
「.3ds」「.dxf」「.gts」「.obj」「.stl」読み込みプラグイン
メニュー「ファイル/開く」の、ファイルを開くダイアログの、ファイルの種類に、Hira3D読み込みプラグインによってサポートされたファイルの種類が増えていることを確認します。



いろいろな種類のモデルファイルを読み込み動作を確認します。
cube.dxfファイルの読み込み