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

📄 util.cpp

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

wxString gamePath;wxString testPath;wxString cfgPath;wxString bgImagePath;bool useTestPatch = false;bool usePatch = true;bool useLocalFiles = false;bool useELP = false;bool useFLP = false;bool useGLP = false;long langID = -1;
int ssCounter;

float frand()
{
    return rand()/(float)RAND_MAX;
}

float randfloat(float lower, float upper)
{
	return lower + (upper-lower)*(rand()/(float)RAND_MAX);
}

int randint(int lower, int upper)
{
    return lower + (int)((upper+1-lower)*frand());
}

void fixname(std::string &name)
{
	for (size_t i=0; i<name.length(); i++) {
		if (i>0 && name[i]>='A' && name[i]<='Z' && isalpha(name[i-1])) {
			name[i] |= 0x20;
		} else if ((i==0 || !isalpha(name[i-1])) && name[i]>='a' && name[i]<='z') {
			name[i] &= ~0x20;
		}
	}
}
void fixnamen(char *name, size_t len)
{
	for (size_t i=0; i<len; i++) {
		if (i>0 && name[i]>='A' && name[i]<='Z' && isalpha(name[i-1])) {
			name[i] |= 0x20;
		} else if ((i==0 || !isalpha(name[i-1])) && name[i]>='a' && name[i]<='z') {
			name[i] &= ~0x20;
		}
	}
}
void getGamePath(){	useTestPatch = false;	usePatch = true;#ifdef _WIN32	HKEY key;	DWORD t, s;	LONG l;	unsigned char path[1024];	memset(path, 0, 1024);	s = 1024;		l = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Blizzard Entertainment\\World of Warcraft", 0, KEY_QUERY_VALUE, &key);	l = RegQueryValueEx(key, "InstallPath", 0, &t,(LPBYTE)path, &s);	RegCloseKey(key);	// See if patch.mpq exists in the WoWTest data folder	testPath = gamePath = (char*)path;	testPath.append("WoWTest\\Data\\");		// Following chunk of code is used to determin if the test patch exists, and if so it flagged the program to use the test patch/	// I've decided its in end-users best interest to leave this off by default.	//FILE *stream;
	//if((stream = fopen(testpath.fn_str(), "r")) != NULL )
	//{	//	// wow test data exists -- need to add in some sort of checking to see if its newer data	//	useTestPatch = true;	//	fclose(stream);	//}		//testpath = gamepath;	//testpath.append("WoWTest\\Data\\");	gamePath.append("Data\\");#else // linux - not sure what it should be set to for Mac osx	gamePath = "/data/";	testPath = "/data/";	#endif}void Screenshot(const wxString fn)
{
	wxFileName temp(fn, wxPATH_NATIVE);
	
	unsigned char *pixels;
	int screenSize[4];

	glReadBuffer(GL_BACK);

	glPixelStorei(GL_UNPACK_SWAP_BYTES, false);
	glPixelStorei(GL_UNPACK_LSB_FIRST, false);
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

	// get the width/height of the window
	glGetIntegerv(GL_VIEWPORT, screenSize);
	// (width*height*bytesPerPixel)
	pixels = new unsigned char[screenSize[2]*screenSize[3]*4];
	// read in the pixel data
	glReadPixels(0, 0, screenSize[2], screenSize[3], GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels);
	// GL_BGR_EXT
	
	CxImage *newImage = new CxImage(0);
	newImage->CreateFromArray(pixels, screenSize[2], screenSize[3], 32, (screenSize[2]*4), false);

	// Save
	if (temp.GetExt() == "tga")
		newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_TGA);
	//else if (temp.GetExt() == "tif")
	//	newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_TIF);
	else if (temp.GetExt() == "png")
		newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_PNG);
	//else if (temp.GetExt() == "jp2")
	//	newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_JP2);
	else if (temp.GetExt() == "jpg") {
		newImage->SetJpegQuality(100);
		newImage->SetJpegScale(100);
		newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_JPG);
	} else // Save Bitmap format
		newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_BMP);

	newImage->Destroy();
	delete newImage;

	// free the memory
	delete [] pixels;
}

⌨️ 快捷键说明

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