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
    を変更することが可能となっていること、
    メニューの変更が画面、操作に反映されていることを確認します。
    
    実行結果
    

