📄 proppage.cpp
字号:
// PropPage.cpp : implementation file
//
#include "stdafx.h"
#include "GModViewer.h"
#include "PropPage.h"
#include "3d\Render3d.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPropPage dialog
extern int m_curModel;
extern int m_ModelCount;
extern ModelData pModelData[MODEL_MAX];
extern bool bRotateActor;
extern CRender3D m_render3D;
extern Vector4s m_lookat;
extern Vector4s m_up;
extern CMatrix44 m_origin;
extern CGraphics3D *pG3D;
extern void GetCurLookAt();
extern void SetViewMatrix();
extern int iZoomValue;
extern int m_CameraAdjustStep;
extern char ResFileName[MAX_PATH];
static bool init;
static int check = 1;
static int cur_fov = 126;
CPropPage::CPropPage(CWnd* pParent /*=NULL*/)
: CPropertyPage(CPropPage::IDD)
{
//{{AFX_DATA_INIT(CPropPage)
m_nDisplay = -1;
m_nHide = -1;
m_TotalFrame = _T("");
m_CurFrame = 0;
m_VertexNum = _T("");
m_FaceNum = _T("");
m_EyeX = 0;
m_EyeY = 0;
m_EyeZ = 0;
m_LookatX = 0;
m_LookatY = 0;
m_LookatZ = 0;
m_UpX = 0;
m_UpY = 0;
m_UpZ = 0;
m_Zoom = iZoomValue;
m_FOV = cur_fov;
m_CameraStep = m_CameraAdjustStep;
init = false;
m_ResPath = ResFileName;
//}}AFX_DATA_INIT
char temp[64];
if( m_ModelCount <= 0 )
{
m_PosX = 0;
m_PosY = 0;
m_PosZ = 0;
m_RotX = 0;
m_RotY = 0;
m_RotZ = 0;
}
else{
init = true;
m_PosX = pModelData[m_curModel].Pos.x;
m_PosY = pModelData[m_curModel].Pos.y;
m_PosZ = pModelData[m_curModel].Pos.z;
m_RotX = pModelData[m_curModel].Rot.x;
m_RotY = pModelData[m_curModel].Rot.y;
m_RotZ = pModelData[m_curModel].Rot.z;
//Frame
sprintf(temp,"%d",pModelData[m_curModel].FrameCount);
m_TotalFrame = _T(temp);
m_CurFrame = pModelData[m_curModel].curFrame;
//vertex and face number
sprintf(temp,"%d",m_render3D.m_Models[m_curModel].m_vertexnum);
m_VertexNum = _T(temp);
sprintf(temp,"%d",m_render3D.m_Models[m_curModel].m_pSubMeshs->m_facenum);
m_FaceNum = _T(temp);
}
//Camera
m_EyeX = pG3D->GetEye().x;
m_EyeY = pG3D->GetEye().y;
m_EyeZ = pG3D->GetEye().z;
GetCurLookAt();
m_LookatX = m_lookat.x;
m_LookatY = m_lookat.y;
m_LookatZ = m_lookat.z;
m_UpX = m_up.x;
m_UpY = m_up.y;
m_UpZ = m_up.z;
}
void CPropPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPropPage)
DDX_Control(pDX, IDC_Select_Model, m_SelectModelCombo);
DDX_Radio(pDX, IDC_DISP_NORMAL, m_nDisplay);
DDX_Radio(pDX, IDC_HIDE, m_nHide);
DDX_Text(pDX, IDC_POSX, m_PosX);
DDX_Text(pDX, IDC_POSY, m_PosY);
DDX_Text(pDX, IDC_POSZ, m_PosZ);
DDX_Text(pDX, IDC_ROTX, m_RotX);
DDX_Text(pDX, IDC_ROTY, m_RotY);
DDX_Text(pDX, IDC_ROTZ, m_RotZ);
DDX_Text(pDX, IDC_FrameTotal, m_TotalFrame);
DDX_Text(pDX, IDC_CurFrame, m_CurFrame);
DDX_Text(pDX, IDC_VertexNum, m_VertexNum);
DDX_Text(pDX, IDC_FaceNum, m_FaceNum);
DDX_Text(pDX, IDC_EyeX, m_EyeX);
DDX_Text(pDX, IDC_EyeY, m_EyeY);
DDX_Text(pDX, IDC_EyeZ, m_EyeZ);
DDX_Text(pDX, IDC_LookatX, m_LookatX);
DDX_Text(pDX, IDC_LookatY, m_LookatY);
DDX_Text(pDX, IDC_LookatZ, m_LookatZ);
DDX_Text(pDX, IDC_UpX, m_UpX);
DDX_Text(pDX, IDC_UpY, m_UpY);
DDX_Text(pDX, IDC_UpZ, m_UpZ);
DDX_Text(pDX, IDC_ZOOM, m_Zoom);
DDV_MinMaxInt(pDX, m_Zoom, 1, 1000);
DDX_Text(pDX, IDC_FOV1, m_FOV);
DDV_MinMaxInt(pDX, m_FOV, 2, 682);
DDX_Text(pDX, IDC_STEP, m_CameraStep);
DDV_MinMaxInt(pDX, m_CameraStep, 1, 100);
DDX_Text(pDX, IDC_ResourcePath, m_ResPath);
//}}AFX_DATA_MAP
if( m_ModelCount )
DDV_MinMaxInt(pDX, m_CurFrame, 0, pModelData[m_curModel].FrameCount-1);
if( init )
{
for( int i=0; i < m_ModelCount; i++ )
{
m_SelectModelCombo.AddString(pModelData[i].ModelName);
}
m_SelectModelCombo.SetCurSel(m_curModel);
//UpdateModel(false);
switch( pModelData[m_curModel].DisplayMode )
{
case DSP_NORMAL:
DDX_Check(pDX, IDC_DISP_NORMAL, check);
m_nDisplay = 0;
break;
case DSP_TRANS:
DDX_Check(pDX, IDC_DISP_TRANS, check);
m_nDisplay = 1;
break;
case DSP_WIRE:
DDX_Check(pDX, IDC_DISP_WIRE, check);
m_nDisplay = 2;
break;
case DSP_COLORKEY:
DDX_Check(pDX, IDC_DISP_COLORKEY, check);
m_nDisplay = 3;
break;
}
if( pModelData[m_curModel].Hide )
{
DDX_Check(pDX, IDC_HIDE, check);
m_nHide = 0;
}
else
{
DDX_Check(pDX, IDC_UNHIDE, check);
m_nHide = 1;
}
init = false;
}
}
BEGIN_MESSAGE_MAP(CPropPage, CDialog)
//{{AFX_MSG_MAP(CPropPage)
ON_CBN_SELCHANGE(IDC_Select_Model, OnSelchangeSelectModel)
ON_EN_KILLFOCUS(IDC_POSX, OnKillfocusPosx)
ON_EN_KILLFOCUS(IDC_POSY, OnKillfocusPosy)
ON_EN_KILLFOCUS(IDC_POSZ, OnKillfocusPosz)
ON_EN_KILLFOCUS(IDC_ROTX, OnKillfocusRotx)
ON_EN_KILLFOCUS(IDC_ROTY, OnKillfocusRoty)
ON_EN_KILLFOCUS(IDC_ROTZ, OnKillfocusRotz)
ON_EN_KILLFOCUS(IDC_CurFrame, OnKillfocusCurFrame)
ON_EN_KILLFOCUS(IDC_EyeX, OnKillfocusEyeX)
ON_EN_KILLFOCUS(IDC_EyeY, OnKillfocusEyeY)
ON_EN_KILLFOCUS(IDC_EyeZ, OnKillfocusEyeZ)
ON_EN_KILLFOCUS(IDC_LookatX, OnKillfocusLookatX)
ON_EN_KILLFOCUS(IDC_LookatY, OnKillfocusLookatY)
ON_EN_KILLFOCUS(IDC_LookatZ, OnKillfocusLookatZ)
ON_EN_KILLFOCUS(IDC_UpX, OnKillfocusUpX)
ON_EN_KILLFOCUS(IDC_UpY, OnKillfocusUpY)
ON_BN_CLICKED(IDC_ResetCamera, OnResetCamera)
ON_EN_KILLFOCUS(IDC_UpZ, OnKillfocusUpZ)
ON_EN_KILLFOCUS(IDC_ZOOM, OnKillfocusZoom)
ON_EN_KILLFOCUS(IDC_FOV1, OnKillfocusFov1)
ON_EN_KILLFOCUS(IDC_STEP, OnKillfocusCameraStep)
//}}AFX_MSG_MAP
ON_CONTROL_RANGE(BN_CLICKED, IDC_DISP_NORMAL, IDC_DISP_COLORKEY, OnDisplayClicked)
ON_CONTROL_RANGE(BN_CLICKED, IDC_HIDE, IDC_UNHIDE, OnHideClicked)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPropPage message handlers
void CPropPage::OnSelchangeSelectModel()
{
// TODO: Add your control notification handler code here
int i = m_SelectModelCombo.GetCurSel();
if( i>=0 && i<m_ModelCount )
m_curModel = i;
UpdateModel();
}
void CPropPage::AddModel(char *name)
{
m_SelectModelCombo.AddString(name);
if( m_ModelCount == 1 )
{
m_SelectModelCombo.SetCurSel(m_curModel);
UpdateModel();
}
}
void CPropPage::UpdateModel(bool bUpdateDate)
{
char temp[16];
m_PosX = pModelData[m_curModel].Pos.x;
m_PosY = pModelData[m_curModel].Pos.y;
m_PosZ = pModelData[m_curModel].Pos.z;
m_RotX = pModelData[m_curModel].Rot.x;
m_RotY = pModelData[m_curModel].Rot.y;
m_RotZ = pModelData[m_curModel].Rot.z;
if( pModelData[m_curModel].DisplayMode >= DSP_NORMAL
&& pModelData[m_curModel].DisplayMode <= DSP_COLORKEY )
m_nDisplay = pModelData[m_curModel].DisplayMode-1;
else m_nDisplay = -1;
if( pModelData[m_curModel].Hide )
m_nHide = 0;
else
m_nHide = 1;
if( pModelData[m_curModel].FrameCount > 1 )
bRotateActor = true;
else
bRotateActor = false;
//total frame
sprintf(temp,"%d",pModelData[m_curModel].FrameCount);
m_TotalFrame = _T(temp);
m_CurFrame = pModelData[m_curModel].curFrame;
//vertex and face number
sprintf(temp,"%d",m_render3D.m_Models[m_curModel].m_vertexnum);
m_VertexNum = _T(temp);
sprintf(temp,"%d",m_render3D.m_Models[m_curModel].m_pSubMeshs->m_facenum);
m_FaceNum = _T(temp);
//Camera
m_EyeX = pG3D->GetEye().x;
m_EyeY = pG3D->GetEye().y;
m_EyeZ = pG3D->GetEye().z;
GetCurLookAt();
m_LookatX = m_lookat.x;
m_LookatY = m_lookat.y;
m_LookatZ = m_lookat.z;
m_UpX = m_up.x;
m_UpY = m_up.y;
m_UpZ = m_up.z;
//Update
if( bUpdateDate )
CPropertyPage::UpdateData(FALSE);
}
void CPropPage::UpdateRes()
{
m_ResPath = ResFileName;
CPropertyPage::UpdateData(FALSE);
}
void CPropPage::UpdateView()
{
CWnd* pParent= GetParent()->GetParent();
pParent->Invalidate();
}
/////////////////////////////////////////////////////////
//Set Display and Hide
void CPropPage::OnDisplayClicked(UINT)
{
CPropertyPage::UpdateData();
pModelData[m_curModel].DisplayMode = m_nDisplay+1;
UpdateView();
}
void CPropPage::OnHideClicked(UINT)
{
CPropertyPage::UpdateData();
if( m_nHide == 0 )
pModelData[m_curModel].Hide = 1;
else
pModelData[m_curModel].Hide = 0;
UpdateView();
}
//////////////////////////////////////////////////////////
//Set Position and Rotation
void CPropPage::OnKillfocusPosx()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
pModelData[m_curModel].Pos.x = m_PosX;
UpdateView();
}
void CPropPage::OnKillfocusPosy()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
pModelData[m_curModel].Pos.y = m_PosY;
UpdateView();
}
void CPropPage::OnKillfocusPosz()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
pModelData[m_curModel].Pos.z = m_PosZ;
UpdateView();
}
void CPropPage::OnKillfocusRotx()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
pModelData[m_curModel].Rot.x = m_RotX;
UpdateView();
}
void CPropPage::OnKillfocusRoty()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
pModelData[m_curModel].Rot.y = m_RotY;
UpdateView();
}
void CPropPage::OnKillfocusRotz()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
pModelData[m_curModel].Rot.z = m_RotZ;
UpdateView();
}
///////////////////////////////////////////////////////////////
//Set Frame
void CPropPage::OnKillfocusCurFrame()
{
// TODO: Add your control notification handler code here
CPropertyPage::UpdateData();
if( m_CurFrame >=0 && m_CurFrame < pModelData[m_curModel].FrameCount )
pModelData[m_curModel].curFrame = m_CurFrame;
else if( m_CurFrame < 0 )
m_CurFrame = 0;
else if( m_CurFrame >= pModelData[m_curModel].FrameCount )
m_CurFrame = pModelData[m_curModel].FrameCount-1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -