4.モデルビューワを作る
1.~3.で作成したクラスを用いてモデルビューワを作成します。
「3.ピックOpenGLビュークラスを作る」 で作成したプログラムに対して、以下の機能を追加したものを作成します。
描画要素(点、線、面)のON/OFF
マウス操作(回転、平行移動、拡大縮小)のON/OFF
ピック要素(点、線、面)のON/OFF
実行形式ファイルダウンロード (ModelViewer_exe.lzh)
ソースファイルダウンロード (ModelViewer_src.lzh)
プロジェクトの作成
プロジェクトの種類:MFC AppWizard (exe)
プロジェクト名:ModelViewer
位置:適当なフォルダを指定
それ以外:デフォルト設定のまま
でプロジェクトを作成します(OKボタンを押します)。
作成するアプリケーションの種類:SDI
それ以外:デフォルト設定のまま
で次へボタンを押します。
設定を変更せず次へボタンを押します。
設定を変更せず次へボタンを押します。
印刷および印刷プレビュー:チェックを外します
それ以外:デフォルト設定のまま
で次へボタンを押します。
設定を変更せず次へボタンを押します。
設定を変更せず終了ボタンを押します。
OKボタンを押します。
ビルドし、エラー、警告がないことを確認します。
ベースOpenGLビュークラスファイル、トラックOpenGLビュークラスファイル、ピックOpenGLビュークラスファイルをプロジェクトに追加
「2.トラックOpenGLビュークラスを作る」で作成した
BaseOpenGLView.cpp
BaseOpenGLView.h
TrackOpenGLView.cpp
TrackOpenGLView.h
PickOpenGLView.cpp
PickOpenGLView.h
をModelViewerプロジェクトフォルダにコピーします。
プロジェクトに
BaseOpenGLView.cpp
BaseOpenGLView.h
TrackOpenGLView.cpp
TrackOpenGLView.h
PickOpenGLView.cpp
PickOpenGLView.h
を追加します。
PickOpenGLView.cppの
#include "PickOpenGL.h"
#include "PickOpenDoc.h"
をコメントアウトします。
PickOpenGLView.cppおよびPickOpenGLView.hの
CPickOpenGLDocをCDocumentに置換します。(「単語単位で探す」「大文字と小文字を区別する」にチェックを入れます。)
ビルドし、エラー、警告がないことを確認します。
モデルビューワのビュークラスの親クラスの変更
ModelViewerView.hに
#include "PickOpenGLView.h"
を追加します。
ModelViewerView.cppおよびModelViewerView.hの
CViewをCPickOpenGLViewに置換します。(「単語単位で探す」「大文字と小文字を区別する」にチェックを入れます。)
ビルドし、エラー、警告がないことを確認します。
モデルビューワのビュークラスのOnDraw()の削除
ベースOpenGLビュークラスのOnDraw()が呼ばれるように、モデルビューワのOpenGLビュークラスのOnDraw()を削除します。
ClassViewにてCModelViewerViewのOnDraw(CDC
*pDC)を右クリック、削除を選択します。
ビルドし、エラー、警告がないことを確認します。
実行し、PickOpenGLプログラムと同じ結果になることを確認します。
メンバ変数、メンバ関数の宣言の追加
ModelViewerView.h のモデルビューワのビュークラス宣言の最後にメンバ変数、メンバ関数の宣言を追加します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数の初期化
モデルビューワのビュークラスのコンストラクタにメンバ変数の初期化を追加します。
ビルドし、エラー、警告がないことを確認します。
メニューアイテムの追加
メニュー/表示 に以下のメニューアイテムを追加します。
メニュー名 | メニュー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メッセージ応答関数の追加画面例
追加した応答関数を編集します。
COMMANDメッセージ応答関数の編集結果
UPDATE_COMMAND_UPメッセージ応答関数の編集結果
ピックOpenGLビュークラスのメンバ変数
m_auiName_pick
をprotected変数とします。
ビルドし、エラー、警告がないことを確認します。
DoTracking()のオーバーライド
モデルビューワのビュークラスにマウス操作のON/OFFに対応したトラッキング処理 DoTracking() をオーバーライドします。
ModelViewerView.h には宣言を追加済みです。
ModelViewerView.cppにDoTracking()の定義を追加します。
トラックOpenGLビュークラスのメンバ変数
m_eTrackingMode
をprotected変数とします。
トラックOpenGLビュークラスのメンバ関数
DoTracking
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
RenderObjects()のオーバーロード
モデルビューワのビュークラスに描画要素のON/OFF、ピック要素のON/OFFに対応した要素描画処理 RenderObjects() をオーバーライドします。
ModelViewerView.h には宣言を追加済みです。
ModelViewerView.cppにRenderObjects()の定義を追加します。
ピックOpenGLビュークラスのメンバ関数
RenderObjects
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
実行
メニューから
描画要素(点、線、面)のON/OFF
マウス操作(回転、平行移動、拡大縮小)のON/OFF
ピック要素(点、線、面)のON/OFF
を変更することが可能となっていること、
メニューの変更が画面、操作に反映されていることを確認します。
実行結果