04.モデルビューワを作る
01.~03.で作成したクラスを用いてモデルビューワを作成します。
「03.ピックOpenGLビュークラスを作る」 で作成したプログラムに対して、以下の機能を追加したものを作成します。
描画要素(点、線、面)のON/OFF
マウス操作(回転、平行移動、拡大縮小)のON/OFF
ピック要素(点、線、面)のON/OFF
プロジェクトの作成
「メニュー/新規作成/プロジェクト」を選択します。
プロジェクトの種類:MFC
テンプレート:MFC アプリケーション
プロジェクト名:ModelViewer
場所:適当なフォルダを指定
ソリューションのディレクトリの作成:チェックしない
でOKボタンを押します。
以降、「01.ベースOpenGLビュークラスを作る」におけるプロジェクト作成と同じ設定でプロジェクトを作成します。
ビルドし、エラー、警告がないことを確認します。
ベースOpenGLビュークラスファイル、トラックOpenGLビュークラスファイル、ピックOpenGLビュークラスファイルをプロジェクトに追加
「03.ピックOpenGLビュークラスを作る」で作成した
OpenGLBaseView.cpp
OpenGLBaseView.h
OpenGLTrackView.cpp
OpenGLTrackView.h
OpenGLPickView.cpp
OpenGLPickView.h
をModelViewerプロジェクトフォルダにコピーします。
プロジェクトに
OpenGLBaseView.cpp
OpenGLBaseView.h
OpenGLTrackView.cpp
OpenGLTrackView.h
OpenGLPickView.cpp
OpenGLPickView.h
を追加します。
OpenGLPickView.cppの
#include "OpenGLPick.h"
#include "PickOpenDoc.h"
をコメントアウトします。
OpenGLPickView.cppおよびOpenGLPickView.hの
COpenGLPickDocをCDocumentに置換します。(「大文字と小文字を区別する」「単語単位」にチェックを入れます。)
ビルドし、エラー、警告がないことを確認します。
モデルビューワのビュークラスの親クラスの変更
ModelViewerView.h に
#include "OpenGLPickView.h"
を追加します。
ModelViewerView.cpp および ModelViewerView.h の
CView を COpenGLPickView に置換します。(「大文字と小文字を区別する」「単語単位」にチェックを入れます。)
ビルドし、エラー、警告がないことを確認します。
モデルビューワのビュークラスのOnDraw関数の削除
ベースOpenGLビュークラスのOnDraw関数が呼ばれるように、モデルビューワビュークラスのOnDraw関数を削除します。
プロパティウィンドウで、オーバーライドモードで、OnDrawを探し、「<削除> OnDraw」を実行します。
ビルドし、エラー、警告がないことを確認します。
実行し、OpenGLPickプログラムと同じ結果になることを確認します。
メンバ変数、メンバ関数の宣言の追加
ModelViewerView.h のモデルビューワのビュークラス定義の最初にメンバ変数、メンバ関数の宣言を追加します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数の初期化
ModelViewerView.cpp のモデルビューワのビュークラスのコンストラクタにメンバ変数の初期化を追加します。
ビルドし、エラー、警告がないことを確認します。
メニューアイテムの追加
メニュー/表示 に以下のメニューアイテムを追加します。
メニュー名 | メニューID | |
---|---|---|
マウス操作 | - | - |
- | 回転 | ID_VIEW_SPIN |
- | 平行移動 | ID_VIEW_PAN |
- | 拡大縮小 | ID_VIEW_ZOOM |
描画 | - | - |
- | 点 | ID_VIEW_RENDERPOINT |
- | 線 | ID_VIEW_RENDERLINE |
- | 面 | ID_VIEW_RENDERFACE |
ピック | - | - |
- | 点 | ID_VIEW_PICKPOINT |
- | 線 | ID_VIEW_PICKLINE |
- | 面 | ID_VIEW_PICKFACE |
メニューアイテム追加画面例
ビルドし、エラー、警告がないことを確認します。
メニューアイテムの応答関数の追加、編集
追加したメニューアイテムのCOMMANDメッセージ応答関数およびUPDATE_COMMAND_UI応答関数をモデルビューワのビュークラスに追加します。
メニューコマンドID | COMMANDメッセージ 応答関数名 |
UPDATE_COMMAND_UP 応答関数名 |
---|---|---|
- | - | - |
ID_VIEW_SPIN | OnViewSpin | OnUpdateViewSpin |
ID_VIEW_PAN | OnViewPan | OnUpdateViewPan |
ID_VIEW_ZOOM | OnViewZoom | OnUpdateViewZoom |
- | - | - |
ID_VIEW_RENDERPOINT | OnViewRenderpoint | OnUpdateViewRenderpoint |
ID_VIEW_RENDERLINE | OnViewRenderline | OnUpdateViewRenderline |
ID_VIEW_RENDERFACE | OnViewRenderface | OnUpdateViewRenderface |
- | - | - |
ID_VIEW_PICKPOINT | OnViewPickpoint | OnUpdateViewPickpoint |
ID_VIEW_PICKLINE | OnViewPickline | OnUpdateViewPickline |
ID_VIEW_PICKFACE | OnViewPickface | OnUpdateViewPickface |
追加した応答関数を編集します。
COMMANDメッセージ応答関数およびUPDATE_COMMAND_UPメッセージ応答関数の編集結果
ビルドし、エラー、警告がないことを確認します。
DoTracking関数のオーバーライド
モデルビューワのビュークラスにマウス操作のON/OFFに対応したトラッキング処理 DoTracking関数 をオーバーライドします。
ModelViewerView.cpp にDoTracking関数の定義を追加します。
OpenGLTrackView.h のトラックOpenGLビュークラスのメンバ変数
m_eTrackingMode
をprotected変数とします。
メンバ関数
DoTracking
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
RenderObjects関数のオーバーロード
モデルビューワのビュークラスに描画要素のON/OFF、ピック要素のON/OFFに対応した要素描画処理 RenderObjects関数 をオーバーライドします。
ModelViewerView.cpp にRenderObjects関数の定義を追加します。
OpenGLPickView.h のピックOpenGLビュークラスのメンバ変数
m_auiName_pick
をprotected変数とします。
メンバ関数
RenderObjects
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
実行
メニューから
描画要素(点、線、面)のON/OFF
マウス操作(回転、平行移動、拡大縮小)のON/OFF
ピック要素(点、線、面)のON/OFF
を変更することが可能となっていること、
メニューの変更が画面、操作に反映されていることを確認します。
実行結果
ダウンロード
実行形式ファイルダウンロード (ModelViewerOpenGLMFC2005_04_exe.lzh)
ソースファイルダウンロード (ModelViewerOpenGLMFC2005_04_src.lzh)