⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proppage.cpp

📁 liu7788414
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -