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

📄 viewcontrol.cpp

📁 wowmodelview魔兽世界的模型查看工具。下了看看吧
💻 CPP
字号:
#include "viewcontrol.h"

#include "util.h"
#include "modelviewer.h"
#include "modelcanvas.h"

void FloatToText(wxTextCtrl *text, float val)
{
	ostringstream out;
	string strTmp;

	out << val;
	strTmp = out.str();
	text->SetValue(strTmp.c_str());
	out.str(""); 
	out.clear();
}


IMPLEMENT_CLASS(ViewControl, wxWindow)

BEGIN_EVENT_TABLE(ViewControl, wxWindow)
	EVT_BUTTON(ID_UPDATE, ViewControl::OnButton)
	EVT_BUTTON(ID_SAVE, ViewControl::OnButton)
	EVT_BUTTON(ID_LOAD, ViewControl::OnButton)
	EVT_BUTTON(ID_RESET, ViewControl::OnButton)

	EVT_TEXT_ENTER(ID_FOV, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_ROTX, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_ROTY, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_ROTZ, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_LIGHTX, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_LIGHTY, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_LIGHTZ, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_POSX, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_POSY, ViewControl::OnText)
	EVT_TEXT_ENTER(ID_POSZ, ViewControl::OnText)
	
	EVT_RADIOBUTTON(ID_MOUSE_MODEL, ViewControl::OnButton)
	EVT_RADIOBUTTON(ID_MOUSE_LIGHT, ViewControl::OnButton)
END_EVENT_TABLE()

ViewControl::ViewControl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
{
	if (Create(parent, id, pos, size, 0, _T("ViewControlFrame")) == false)
		wxMessageBox("HOLY CRAP!", "ffs");

	//p = new wxPanel(this, -1, wxDefaultPosition, size);

	wxButton *btnUpdate = new wxButton(this, ID_UPDATE, _("Update View"), wxPoint(10,5), wxSize(80,20));
	wxButton *btnSave = new wxButton(this, ID_SAVE, _("Save"), wxPoint(10,30), wxSize(40,20));
	wxButton *btnLoad = new wxButton(this, ID_LOAD, _("Load"), wxPoint(50,30), wxSize(40,20));
	wxButton *btnReset = new wxButton(this, ID_RESET, _("Reset"), wxPoint(10,50), wxSize(40,20));

	wxStaticText *lblFov = new wxStaticText(this, -1, _("Field of View:"), wxPoint(100,5), wxSize(40,24));
	txtFov = new wxTextCtrl(this, ID_FOV, _T("45"), wxPoint(145,5), wxSize(25,20), wxTE_PROCESS_ENTER);

	wxStaticText *lblRot = new wxStaticText(this, -1, _("Rotation (XYZ)"), wxPoint(195,5), wxSize(40,30));
	txtRot[0] = new wxTextCtrl(this, ID_ROTX, _T("0"), wxPoint(240,5), wxSize(45,20), wxTE_PROCESS_ENTER);
	txtRot[1] = new wxTextCtrl(this, ID_ROTY, _T("0"), wxPoint(240,30), wxSize(45,20), wxTE_PROCESS_ENTER);
	txtRot[2] = new wxTextCtrl(this, ID_ROTZ, _T("0"), wxPoint(240,55), wxSize(45,20), wxTE_PROCESS_ENTER);

	wxStaticText *lblLight = new wxStaticText(this, -1, _("Light Pos (XYZ)"), wxPoint(295,5), wxSize(45,30));
	txtLight[0] = new wxTextCtrl(this, ID_LIGHTX, _T("0"), wxPoint(340,5), wxSize(45,20), wxTE_PROCESS_ENTER);
	txtLight[1] = new wxTextCtrl(this, ID_LIGHTY, _T("0"), wxPoint(340,30), wxSize(45,20), wxTE_PROCESS_ENTER);
	txtLight[2] = new wxTextCtrl(this, ID_LIGHTZ, _T("0"), wxPoint(340,55), wxSize(45,20), wxTE_PROCESS_ENTER);

	wxStaticText *lblPos = new wxStaticText(this, -1, _("Model Pos (XYZ)"), wxPoint(390,5), wxSize(50,30));
	txtPos[0] = new wxTextCtrl(this, ID_POSX, _T("0"), wxPoint(440,5), wxSize(45,20), wxTE_PROCESS_ENTER);
	txtPos[1] = new wxTextCtrl(this, ID_POSY, _T("0"), wxPoint(440,30), wxSize(45,20), wxTE_PROCESS_ENTER);
	txtPos[2] = new wxTextCtrl(this, ID_POSZ, _T("0"), wxPoint(440,55), wxSize(45,20), wxTE_PROCESS_ENTER);

	wxStaticText *lblMouse = new wxStaticText(this, -1, _("Mouse Control:"), wxPoint(500,5), wxSize(80,15));
	wxRadioButton *rbtn1 = new wxRadioButton(this, ID_MOUSE_MODEL, "Model", wxPoint(500,20), wxSize(45,20), wxRB_GROUP, wxDefaultValidator, "radioButton1");
	wxRadioButton *rbtn2 = new wxRadioButton(this, ID_MOUSE_LIGHT, "Light", wxPoint(500,40), wxSize(45,20), 0, wxDefaultValidator, "radioButton2");
}

ViewControl::~ViewControl()
{
	/*
	// Clear buttons
	delete btnUpdate;
	delete btnSave;
	delete btnLoad;
	delete btnReset;

	// Clear Labels
	delete lblFov;
	delete lblRot;
	delete lblLight;
	delete lblPos;

	// Clear Text Boxes
	delete txtFov;
	for(int i=0;i<3;i++)
		delete txtRot[i];
	for(i=0;i<3;i++)
		delete txtLight[i];
	for(i=0;i<3;i++)
		delete txtPos[i];

	delete lblMouse;
	delete rbtn1;
	delete rbtn2;
	*/
}

void ViewControl::OnButton(wxCommandEvent &event)
{
	if (event.GetId()==ID_UPDATE) {
		Update();
	} else if (event.GetId()==ID_SAVE) {
		vLight = canvas->lPos;
		vRot = canvas->vRot;
		vPos = canvas->vPos;
	} else if (event.GetId()==ID_LOAD) {
		canvas->lPos = vLight;
		canvas->vRot = vRot;
		canvas->vPos = vPos;
	} else if (event.GetId() == ID_MOUSE_MODEL) {
		canvas->bMouseLight = false;
	} else if (event.GetId() == ID_MOUSE_LIGHT) {
		canvas->bMouseLight = true;
	} else if (event.GetId() == ID_RESET) {
		canvas->vPos = Vec3D(0.0f, (-canvas->model->rad * 0.5f), (canvas->model->rad * 2.0f));
		canvas->vRot = Vec3D(0.0f, -90.0f, 0.0f);
		
		if (canvas->vPos.z < 3.0f) canvas->vPos.z = 3.0f;
		if (canvas->vPos.z > 500.0f) canvas->vPos.z = 500.0f;
		
		if (canvas->vPos.y > 50) canvas->vPos.y = 50;
		if (canvas->vPos.y < -50) canvas->vPos.y = -50;
		
		Refresh();
	}
}

void ViewControl::OnText(wxCommandEvent &event)
{
	Update();
}

void ViewControl::Init()
{
	Refresh();
}

void ViewControl::Refresh()
{
	FloatToText(txtFov, canvas->fov); // Field of view
	FloatToText(txtRot[0], canvas->vRot.x); // X Rotation
	FloatToText(txtRot[1], canvas->vRot.y); // Y Rotation
	FloatToText(txtRot[2], canvas->vRot.z); // Y Rotation

	FloatToText(txtLight[0], canvas->lPos.x); // X Light Position
	FloatToText(txtLight[1], canvas->lPos.y); // Y Light Position
	FloatToText(txtLight[2], canvas->lPos.z); // Z Light Position

	FloatToText(txtPos[0], canvas->vPos.x); // X Model Position
	FloatToText(txtPos[1], canvas->vPos.y); // Y Model Position
	FloatToText(txtPos[2], canvas->vPos.z); // Z Model Position
}

void ViewControl::Update()
{
	//from_string<float>(canvas->aspect, string(txtAspect->GetValue()), dec);
	from_string<float>(canvas->fov, string(txtFov->GetValue()), dec);

	from_string<float>(canvas->vRot.x, string(txtRot[0]->GetValue()), dec);
	from_string<float>(canvas->vRot.y, string(txtRot[1]->GetValue()), dec);
	from_string<float>(canvas->vRot.z, string(txtRot[2]->GetValue()), dec);

	from_string<float>(canvas->lPos.x, string(txtLight[0]->GetValue()), dec);
	from_string<float>(canvas->lPos.y, string(txtLight[1]->GetValue()), dec);
	from_string<float>(canvas->lPos.z, string(txtLight[2]->GetValue()), dec);

	from_string<float>(canvas->vPos.x, string(txtPos[0]->GetValue()), dec);
	from_string<float>(canvas->vPos.y, string(txtPos[1]->GetValue()), dec);
	from_string<float>(canvas->vPos.z, string(txtPos[2]->GetValue()), dec);
	
	canvas->SetupProjection();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -