亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? windowinterpolatordialog.cpp

?? 骨骼動畫....把魔獸模型解出的代碼..
?? CPP
字號:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "WindowInterpolatorDialog.h"


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
WINDOW_INTERPOLATOR_DIALOG InterpolatorDialog;


//+-----------------------------------------------------------------------------
//| Static member variables
//+-----------------------------------------------------------------------------
INTERPOLATOR WINDOW_INTERPOLATOR_DIALOG::StaticData;
MODEL_GLOBAL_SEQUENCE* WINDOW_INTERPOLATOR_DIALOG::StaticGlobalSequence;
std::string WINDOW_INTERPOLATOR_DIALOG::StaticTitle;
HFONT WINDOW_INTERPOLATOR_DIALOG::StaticFont;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
WINDOW_INTERPOLATOR_DIALOG::WINDOW_INTERPOLATOR_DIALOG()
{
	StaticFont = CreateFont(0, 8, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, "Fixedsys");
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
WINDOW_INTERPOLATOR_DIALOG::~WINDOW_INTERPOLATOR_DIALOG()
{
	DeleteObject(StaticFont);
}


//+-----------------------------------------------------------------------------
//| Displays the dialog
//+-----------------------------------------------------------------------------
BOOL WINDOW_INTERPOLATOR_DIALOG::Display(HWND ParentWindow, INTERPOLATOR& Data, CONST std::string& Title) CONST
{
	StaticData = Data;
	StaticTitle = Title;

	StaticGlobalSequence = Data.GlobalSequenceNode.IsAttached() ? Data.GlobalSequenceNode.GetObjectData() : NULL;

	if(!DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(DialogInterpolator), ParentWindow, DialogMessageHandler, 0))
	{
		StaticData = INTERPOLATOR();
		return FALSE;
	}

	Data = StaticData;
	StaticData = INTERPOLATOR();

	if(StaticGlobalSequence != NULL)
	{
		Data.GlobalSequenceNode.Attach(StaticGlobalSequence->InterpolatorNodes);
	}
	else
	{
		Data.GlobalSequenceNode.Detach();
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Handles the dialog messages
//+-----------------------------------------------------------------------------
BOOL CALLBACK WINDOW_INTERPOLATOR_DIALOG::DialogMessageHandler(HWND Window, UINT Message, WPARAM W, LPARAM L)
{
	switch(Message)
	{
		case WM_INITDIALOG:
		{
			INT Index;
			HWND ComboBox;

			AddWindow(Window);
			CenterWindow(Window);

			ComboBox = GetDlgItem(Window, DialogInterpolatorComboInterpolationType);

			Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("None")));
			::SendMessage(ComboBox, CB_SETITEMDATA, Index, INTERPOLATION_TYPE_NONE);
			Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("Linear")));
			::SendMessage(ComboBox, CB_SETITEMDATA, Index, INTERPOLATION_TYPE_LINEAR);
			Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("Hermite")));
			::SendMessage(ComboBox, CB_SETITEMDATA, Index, INTERPOLATION_TYPE_HERMITE);
			Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("Bezier")));
			::SendMessage(ComboBox, CB_SETITEMDATA, Index, INTERPOLATION_TYPE_BEZIER);

			::SendMessage(ComboBox, CB_SETCURSEL, StaticData.InterpolationType, 0);

			if(StaticFont != NULL) ::SendMessage(GetDlgItem(Window, DialogInterpolatorEdit), WM_SETFONT, reinterpret_cast<WPARAM>(StaticFont), 0);

			BuildList(GetDlgItem(Window, DialogInterpolatorEdit));
			BuildGlobalSequenceIdList(Window);

			::SetWindowText(Window, StaticTitle.c_str());

			return TRUE;
		}

		case WM_COMMAND:
		{
			HWND Control;

			Control = reinterpret_cast<HWND>(L);
			if(Control == GetDlgItem(Window, DialogInterpolatorComboInterpolationType))
			{
				switch(HIWORD(W))
				{
					case CBN_SELCHANGE:
					{
						INT Index;
						BOOL TypeUsesTangents;
						BOOL LastTypeUsesTangents;
						INTERPOLATION_TYPE Type;

						Index = static_cast<INT>(::SendMessage(Control, CB_GETCURSEL, 0, 0));
						Type = static_cast<INTERPOLATION_TYPE>(::SendMessage(Control, CB_GETITEMDATA, Index, 0));

						TypeUsesTangents = (Type == INTERPOLATION_TYPE_HERMITE) || (Type == INTERPOLATION_TYPE_BEZIER);
						LastTypeUsesTangents = (StaticData.InterpolationType == INTERPOLATION_TYPE_HERMITE) || (StaticData.InterpolationType == INTERPOLATION_TYPE_BEZIER);

						if(TypeUsesTangents != LastTypeUsesTangents)
						{
							if(!RetrieveList(GetDlgItem(Window, DialogInterpolatorEdit)))
							{
								Error.DisplayMessage(Window);
								Error.ClearMessage();
								::SendMessage(GetDlgItem(Window, DialogInterpolatorComboInterpolationType), CB_SETCURSEL, StaticData.InterpolationType, 0);
								return TRUE;
							}

							StaticData.InterpolationType = Type;
							BuildList(GetDlgItem(Window, DialogInterpolatorEdit));
						}
						else
						{
							StaticData.InterpolationType = Type;
						}

						break;
					}
				}

				return TRUE;
			}

			switch(LOWORD(W))
			{
				case DialogInterpolatorButtonOk:
				{
					if(!RetrieveList(GetDlgItem(Window, DialogInterpolatorEdit)))
					{
						Error.DisplayMessage(Window);
						Error.ClearMessage();
						return TRUE;
					}

					StaticGlobalSequence = reinterpret_cast<MODEL_GLOBAL_SEQUENCE*>(::SendMessage(GetDlgItem(Window, DialogInterpolatorComboGlobalSequenceId), CB_GETITEMDATA, ::SendMessage(GetDlgItem(Window, DialogInterpolatorComboGlobalSequenceId), CB_GETCURSEL, 0, 0), 0));

					RemoveWindow(Window);
					EndDialog(Window, 1);
					return TRUE;
				}

				case DialogInterpolatorButtonCancel:
				{
					RemoveWindow(Window);
					EndDialog(Window, 0);
					return TRUE;
				}
			}

			return FALSE;
		}

		case WM_CLOSE:
		{
			::SendMessage(Window, WM_COMMAND, DialogInterpolatorButtonCancel, 0);
			return TRUE;
		}
	}

	return FALSE;
}


//+-----------------------------------------------------------------------------
//| Builds the global sequence ID list
//+-----------------------------------------------------------------------------
VOID WINDOW_INTERPOLATOR_DIALOG::BuildGlobalSequenceIdList(HWND Window)
{
	INT i;
	INT Index;
	HWND ComboBox;

	ComboBox = GetDlgItem(Window, DialogInterpolatorComboGlobalSequenceId);
	if(ComboBox == NULL) return;

	Index = static_cast<INT>(::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(NAME_NO_ID.c_str())));
	::SendMessage(ComboBox, CB_SETITEMDATA, Index, 0);
	::SendMessage(ComboBox, CB_SETCURSEL, 0, 0);

	for(i = 0; i < Model.Data().GlobalSequenceContainer.GetTotalSize(); i++)
	{
		if(Model.Data().GlobalSequenceContainer.ValidIndex(i))
		{
			std::stringstream Stream;

			Stream << "GlobalSequence " << Model.Data().GlobalSequenceContainer[i];
			Index = static_cast<INT>(::SendMessage(ComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(Stream.str().c_str())));
			::SendMessage(ComboBox, CB_SETITEMDATA, Index, reinterpret_cast<LPARAM>(Model.Data().GlobalSequenceContainer[i]));

			if(Model.Data().GlobalSequenceContainer[i] == StaticGlobalSequence)
			{
				::SendMessage(ComboBox, CB_SETCURSEL, Index, 0);
			}
		}
	}
}


//+-----------------------------------------------------------------------------
//| Builds an interpolator list
//+-----------------------------------------------------------------------------
VOID WINDOW_INTERPOLATOR_DIALOG::BuildList(HWND ListBox)
{
	std::stringstream Stream;
	std::list<INTERPOLATOR_NODE>::iterator i;

	if(StaticData.IsStatic())
	{
		Stream << "0: ";
		BuildVector(Stream, StaticData.StaticVector);
		Stream << "\r\n";
		::SetWindowText(ListBox, Stream.str().c_str());
		return;
	}

	i = StaticData.NodeList.begin();
	while(i != StaticData.NodeList.end())
	{
		Stream << i->Time << ": ";
		BuildVector(Stream, i->Vector);
		Stream << "\r\n";

		switch(StaticData.InterpolationType)
		{
			case INTERPOLATION_TYPE_HERMITE:
			case INTERPOLATION_TYPE_BEZIER:
			{
				Stream << "  InTan: ";
				BuildVector(Stream, i->InTan);
				Stream << "\r\n";

				Stream << "  OutTan: ";
				BuildVector(Stream, i->OutTan);
				Stream << "\r\n";
			}
		}

		i++;
	}

	::SetWindowText(ListBox, Stream.str().c_str());
}


//+-----------------------------------------------------------------------------
//| Retrieves the interpolator list
//+-----------------------------------------------------------------------------
BOOL WINDOW_INTERPOLATOR_DIALOG::RetrieveList(HWND ListBox)
{
	INT Size;
	std::string Word;
	std::vector<CHAR> Buffer;
	std::stringstream Stream;
	INTERPOLATOR_NODE Node;

	Size = ::GetWindowTextLength(ListBox) + 1;
	Buffer.resize(Size + 1);

	::GetWindowText(ListBox, &Buffer[0], Size);
	Buffer[Size] = '\0';

	Stream.str(&Buffer[0]);

	StaticData.NodeList.clear();

	while(!Stream.eof())
	{
		Node = INTERPOLATOR_NODE();

		Node.Time = -1;
		Stream >> Node.Time;
		if(Node.Time == -1) break;

		if(!ExpectChar(Stream, ':')) return FALSE;
		if(!RetrieveVector(Stream, Node.Vector)) return FALSE;

		switch(StaticData.InterpolationType)
		{
			case INTERPOLATION_TYPE_HERMITE:
			case INTERPOLATION_TYPE_BEZIER:
			{
				Word = "";
				Stream >> Word;
				if(Word != "InTan:")
				{
					Error.SetMessage("Expected \"InTan:\", got \"" + Word + "\"!");
					return FALSE;
				}

				if(!RetrieveVector(Stream, Node.InTan)) return FALSE;

				Word = "";
				Stream >> Word;
				if(Word != "OutTan:")
				{
					Error.SetMessage("Expected \"OutTan:\", got \"" + Word + "\"!");
					return FALSE;
				}

				if(!RetrieveVector(Stream, Node.OutTan)) return FALSE;
			}
		}

		StaticData.NodeList.push_back(Node);
	}

	StaticData.Static = FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Builds a vector
//+-----------------------------------------------------------------------------
VOID WINDOW_INTERPOLATOR_DIALOG::BuildVector(std::stringstream& Stream, CONST D3DXVECTOR4& Vector)
{
	switch(StaticData.Type)
	{
		case INTERPOLATOR_TYPE_SCALAR:
		case INTERPOLATOR_TYPE_SCALAR_INT:
		{
			Stream << Vector.x;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR2:
		{
			Stream << "{ " << Vector.x << ", " << Vector.y << " }";
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR3:
		{
			Stream << "{ " << Vector.x << ", " << Vector.y << ", " << Vector.z << " }";
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR4:
		{
			Stream << "{ " << Vector.x << ", " << Vector.y << ", " << Vector.z << ", " << Vector.w << " }";
			break;
		}
	}
}


//+-----------------------------------------------------------------------------
//| Retrieves a vector
//+-----------------------------------------------------------------------------
BOOL WINDOW_INTERPOLATOR_DIALOG::RetrieveVector(std::stringstream& Stream, D3DXVECTOR4& Vector)
{
	Vector = D3DXVECTOR4(0.0f, 0.0f, 0.0f, 0.0f);

	switch(StaticData.Type)
	{
		case INTERPOLATOR_TYPE_SCALAR:
		case INTERPOLATOR_TYPE_SCALAR_INT:
		{
			Stream >> Vector.x;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR2:
		{
			if(!ExpectChar(Stream, '{')) return FALSE;
			Stream >> Vector.x;
			if(!ExpectChar(Stream, ',')) return FALSE;
			Stream >> Vector.y;
			if(!ExpectChar(Stream, '}')) return FALSE;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR3:
		{
			if(!ExpectChar(Stream, '{')) return FALSE;
			Stream >> Vector.x;
			if(!ExpectChar(Stream, ',')) return FALSE;
			Stream >> Vector.y;
			if(!ExpectChar(Stream, ',')) return FALSE;
			Stream >> Vector.z;
			if(!ExpectChar(Stream, '}')) return FALSE;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR4:
		{
			if(!ExpectChar(Stream, '{')) return FALSE;
			Stream >> Vector.x;
			if(!ExpectChar(Stream, ',')) return FALSE;
			Stream >> Vector.y;
			if(!ExpectChar(Stream, ',')) return FALSE;
			Stream >> Vector.z;
			if(!ExpectChar(Stream, ',')) return FALSE;
			Stream >> Vector.z;
			if(!ExpectChar(Stream, '}')) return FALSE;
			break;
		}
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Expects a specific character
//+-----------------------------------------------------------------------------
BOOL WINDOW_INTERPOLATOR_DIALOG::ExpectChar(std::stringstream& Stream, CHAR Char)
{
	CHAR TempChar = ' ';

	Stream >> TempChar;
	if(TempChar != Char)
	{
		Error.SetMessage(std::string("Expected \"") + Char + "\", got \"" + TempChar + "\"!");
		return FALSE;
	}

	return TRUE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂va蜜桃一区二区三区| 欧美日韩一区国产| 色偷偷久久一区二区三区| 欧美亚洲动漫制服丝袜| 日韩一级成人av| 国产亚洲精品久| 亚洲理论在线观看| 奇米影视7777精品一区二区| 国产精品99精品久久免费| 亚洲一区二区美女| 国产精品久久久久久久久图文区| 夜夜精品视频一区二区| 免费观看久久久4p| 岛国一区二区三区| 欧美群妇大交群的观看方式| 久久久影视传媒| 尤物在线观看一区| 激情丁香综合五月| 色婷婷久久综合| 久久综合久久99| 亚洲国产欧美在线人成| 国产成人啪免费观看软件| 日本韩国欧美国产| 久久精品人人做人人爽97| 亚洲一区二区视频| 国产精品888| 欧美精品精品一区| 亚洲欧洲一区二区在线播放| 免费精品视频最新在线| 99视频精品免费视频| 精品免费一区二区三区| 亚洲制服欧美中文字幕中文字幕| 国产精品一区二区男女羞羞无遮挡 | 国产高清亚洲一区| 欧美三级视频在线观看| 中文字幕第一区综合| 日本亚洲电影天堂| 色噜噜狠狠一区二区三区果冻| 精品福利一区二区三区免费视频| 亚洲美腿欧美偷拍| 国产精品一级片在线观看| 777亚洲妇女| 一区二区三区高清| 成人国产精品免费网站| 欧美mv和日韩mv国产网站| 五月天激情综合网| 色av一区二区| 国产精品二三区| 国产电影一区二区三区| 91麻豆精品国产自产在线观看一区| 中文字幕一区二区在线播放| 国产一区二区三区国产| 欧美一区二区三区四区高清| 亚洲国产美国国产综合一区二区| 不卡电影一区二区三区| 国产欧美精品一区| 国产一区欧美日韩| 精品国产欧美一区二区| 免费美女久久99| 日韩欧美中文字幕公布| 日韩国产精品久久久久久亚洲| 在线欧美日韩国产| 亚洲精品水蜜桃| 一本一道综合狠狠老| 自拍偷自拍亚洲精品播放| 成人福利视频在线| 国产精品福利电影一区二区三区四区| 成人性生交大片免费看中文| 国产色爱av资源综合区| 国产精品一二二区| 国产色一区二区| 成人一区在线观看| 中文字幕电影一区| 99久久综合99久久综合网站| 亚洲色图19p| 在线一区二区三区四区五区 | 色婷婷综合激情| 亚洲欧美偷拍三级| 成人黄色软件下载| 国产精品三级视频| 丁香婷婷综合网| 欧美日韩国产综合一区二区| 亚洲国产视频在线| 欧美电影一区二区| 热久久免费视频| 精品国产一区二区三区av性色| 日韩av电影免费观看高清完整版| 欧美一二三在线| 国产欧美精品一区| 秋霞午夜鲁丝一区二区老狼| 欧美日韩一区二区三区四区| 五月婷婷久久丁香| 欧美挠脚心视频网站| 捆绑变态av一区二区三区| 宅男在线国产精品| 精品在线播放午夜| 久久久久久久久蜜桃| 成人在线综合网站| 亚洲色图视频免费播放| 粉嫩一区二区三区在线看| 欧美激情一区不卡| 国产黄色精品视频| 国产精品国产三级国产a| 91啦中文在线观看| 亚洲一区在线观看免费| 91精品欧美久久久久久动漫| 免费看日韩a级影片| 国产欧美一区二区精品久导航 | 欧美xxxx在线观看| 国产原创一区二区三区| 中文字幕中文字幕在线一区 | 国产精品久久久久久久久久久免费看 | 99天天综合性| 玉足女爽爽91| 欧美一区二区福利在线| 亚洲成人激情自拍| 日韩三级精品电影久久久| 国产精品一区专区| 亚洲视频 欧洲视频| 日韩一区二区免费在线电影| 精品一区二区三区免费| 亚洲四区在线观看| 91精品中文字幕一区二区三区 | 久久综合色婷婷| 91老师片黄在线观看| 日韩av在线播放中文字幕| 国产欧美日韩视频在线观看| 91色porny蝌蚪| 久久99久久99| 国产精品二三区| 欧美zozozo| 丁香婷婷综合网| 国产欧美日韩亚州综合| 婷婷综合另类小说色区| www.99精品| 亚洲一级片在线观看| 欧美日韩一本到| 国产高清不卡一区二区| 亚洲激情中文1区| 日韩精品一区二区三区视频 | 5月丁香婷婷综合| av毛片久久久久**hd| 婷婷开心激情综合| 久久精品人人做人人爽97| 在线观看免费亚洲| 成人福利视频网站| 亚洲gay无套男同| 中文字幕一区二区不卡| 日韩欧美一二三四区| 欧美视频中文字幕| 国产一区美女在线| 亚洲一区电影777| 亚洲同性gay激情无套| 精品伦理精品一区| 欧美亚洲动漫另类| 成人动漫一区二区| 天天色图综合网| 亚洲精品成人在线| 久久久99精品免费观看不卡| 欧美做爰猛烈大尺度电影无法无天| 国产制服丝袜一区| 亚洲成人av在线电影| 亚洲精品美国一| 国产欧美一区二区三区在线老狼| 欧美精品久久久久久久多人混战 | 中文字幕乱码久久午夜不卡 | 国产精品国产馆在线真实露脸| 欧美精选一区二区| 欧美综合一区二区三区| 丁香婷婷综合网| 国产制服丝袜一区| 青娱乐精品视频| 中文字幕 久热精品 视频在线| 精品国产99国产精品| 欧美精品xxxxbbbb| 欧美综合视频在线观看| 91国产成人在线| av网站免费线看精品| 99免费精品在线| 豆国产96在线|亚洲| 国产91综合网| 激情久久五月天| 日本成人超碰在线观看| 日本成人在线一区| 水野朝阳av一区二区三区| 亚洲成人动漫在线免费观看| 亚洲精品高清在线观看| 亚洲国产乱码最新视频| 国产精品天天看| 中文字幕欧美日韩一区| 亚洲欧洲日产国产综合网| 中文字幕的久久| 成人免费一区二区三区视频| 国产女人18毛片水真多成人如厕| 国产欧美精品在线观看| 久久久久国产一区二区三区四区| 国产午夜亚洲精品理论片色戒| 精品国产一区二区国模嫣然| 26uuu国产日韩综合| 国产无人区一区二区三区|