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 の内容であり,現状のすべては反映されていない.