VXxxxView の利用

OnInitialUpdateで,描画オブジェクトを Parts などに登録することにより標準の動作を提供.

  VZoomView   拡大などの動作.
  VEyeChgView   視点変更.
  VOpenGLView   シェーディング表示
  VOpGL2DView   隠線消去表示


2013~のバージョンで,テクスチャマッピングの追加とマウスによる視点移動などの変更.
テクスチャマッピングの場合は,PartsAだけでなくPgonsAも必要.
今回(2015~)のバージョンで,印刷,ID_EDIT_COPYなどの標準動作を追加.

利用方法

SDI や MDI プロジェクトのビューの CView の部分を,上の4つの何れかで置き換える.
詳細は VxxxxV.doc を参照のこと.

DIB で Zoom クラスの機能を利用する場合,ビットマップの W と H を PartsA と対応付ける.

クリップボードにコピーなど,多くの機能は再定義が必要.
ベクタとラスタの混在は,かなりのコードが必要?

マウスによる視点移動は,EyeChangeへの実装のためダイアログexeでも利用可能.

詳細は,サンプルプロジェクトのUseZEなどを参照.
マウスイベントなどはそれぞれで処理する(EyeChg::Eventなどを呼ぶ)必要あり.
当然ではあるが,シェーディングや隠線消去の機能はそれぞれで用意する必要がある.

他の情報としてはブログ(iwaomicspro.wordpress.com/?s=VxxxxV)にあり.


VXxxViewとConvert3Dを使用したMDI exe

ビュークラス
ヘッダで以下をインクルード.
#include      "VOp2DV.hxx"
ヘッダ,ソース共にCViewをVOpGL2DViewに変更
ビューのOnDraw(CDC* pDC)に以下を追加.
   VOpGL2DView::OnDraw(pDC) ;
OnPreparePrinting , OnBeginPrinting , OnEndPrinting で,
VOpGL2DView::OnXxxを呼出すように変更.

アプリケーションヘッダ
#include   "Color.hxx"
#include   "Prj.hxx"
//#include "Texture.hxx"                    //            必要に応じて
#include   "OpGL.hxx"

リソース
視点変更や描画モードのメニューリソースなどを追加する.

ここまでで,必要なソースをビルド対象として追加すれば,デバッグ版で立方体の表示が動作する.
これがVXxxViewの基本的な利用方法となる.

アプリケーションクラスInitInstanceに
              // ドラッグ/ドロップ オープンを許可します
              m_pMainWnd->DragAcceptFiles();
              // MDIの場合,新規ウィンドウを開かない.
              if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) {
                            cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ;
                            }

以下では,さらにConvert3Dを利用してビューに表示する.

ドキュメントクラス
ヘッダに以下の変数を追加
PartsA        PartsA ;
d3D_PgonsA            PgonsA ;
インクルードするヘッダは
#include        "PartsAry.hxx"
#include        "d3D_PgA.hxx"

ソースでインクルード
#include      “P_A_Zxx.hxx”
OnOpenDocumentの追加.
{
    Convert3D  c3d = ::Zxx_ToConvert3D(lpszPathName) ;
    PgonsA = c3d.GetPgonsA() ;
    PartsA = c3d.GetPartsA() ;
    if (PgonsA.GetCount()>0 || PartsA.GetCount()>0) {
        return            TRUE ;
        }
    LogMessageBox(_T("この形式はサポートしていません\n")+CString(lpszPathName));
        return    FALSE ;
    }

必要であれば OnSaveDocument
{
    Convert3D  c3d ;
    c3d = PgonsA ;
    c3d = PartsA ;
    return         c3d.Export(lpszPathName) ;
    }


ビューに
OnInitialUpdate()追加
CVx3DDoc* pDoc = GetDocument();
SetPartsAP(&pDoc->PartsA) ;
SetPgonsAP(&pDoc->PgonsA) ;

最小の3D変換機能組み込み例

#include   "Convert3.hxx"
#include   "PartsAC3.cxx"
#include   "PartsAFn.cxx"
#include   "D3dsIn.cxx"

Convert3.hxxの動作として,
標準でOBJ , 3DS の読込みをサポートする.
Convert3D::Exportによる出力は,OBJ , 3DS , X3D , DAE , NXR .
Convert3D::ImportでDAEなどXML形式をサポートする場合は,アプリケーションヘッダで
#include      “Xml_In.hxx”
     __cplusplus_cliが定義されている場合は,System.Xml.dll

テクスチャをサポートする場合,
アプリケーションヘッダのOpGL.hxxの前にTexture.hxxを追加.

このプロジェクトは,Vx3D.zip
https://www.dropbox.com/s/yz6arq6c6yb7j9u/Vx3D.zip


* 2015/05 の内容であり,現状のすべては反映されていない.