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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? max2nmo.cpp

?? 3dmax導出3d模型二次開發插件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//************************************************************************** 
//* Max2Nmo.cpp	- Virtools File Exporter
//*
//* Romain Sididris - Copyright (c) Virtools 2000 
//*
//* (Based on Ascii File Exporter source code
//*  By Christer Janson
//*  Kinetix Development
//*  Copyright (c) Kinetix 1997, All Rights Reserved. )
//*
//* This module contains the DLL startup functions
//*
//***************************************************************************
#include "Precomp.h"
#include "Max2Nmo.h"


#ifdef _USESCRIPTS_

	#include "PropertiesEvaluator.h"
	#include "Special Parameter Registration.h"
	#include "Special Parameter Registration2.h"
#endif

#ifdef CK_LIB
	#include "CKLibIncludes.h"
#endif

HINSTANCE hInstance;
int controlsInit = FALSE;
BOOL VirtoolsPluginsParsed = FALSE;

static BOOL exportSelected;

#define MAX2NMO_CLASS_ID	Class_ID(0x2dee0760, 0x75462793)

//---------------------------------------
// Character Studio 3.12 headers are not 
// compatible with previous version need to
// add a version check !
// 
// In Version 4.2 of 3dsMax we automatically consider that we use Character studio 3.2
BOOL		g_CharacterStudio312;


#ifdef _USESCRIPTS_
	//----------------------------------------
	//--------------- Add MAXScript Function
	#undef new
	#undef delete

	#include "MAXScrpt.h"
	#include "definsfn.h"

	def_visible_primitive( Export2NMO,"export2nmo");

	Value *Export2NMO_cf( Value** arg_list, int count )
	{
		// export2Nmo "filename" 
		//		[BOOL onlySelected]
		//		[int exportAs]
		//		[BOOL storeOnlyTextureFileName]
		//		[BOOL unitIsMeter]
		//		[BOOL groupToPlace]
		//		[BOOL SelectionAsGroup]
		//		[BOOL convertToSkin]
		//		[BOOL saveBipedGeom]
		//		[int samplingStepForKeyFrames]
		//		[int samplingStepForDeformables]
		//		[int compressionLevel]
		//		[int reportLevel]
		//		[string characterName]
		//		[string animationName]
		
		check_arg_count("export2nmo", 15, count);
		
		int i=-1;

		// "filename"
		++i;
		char *fileName = arg_list[i]->to_string();

		ClassDesc *aed = GetAsciiExpDesc();
		Max2Nmo *exp = (Max2Nmo *)aed->Create();
		
		//		[BOOL onlySelected]
		++i;
		BOOL exportSelected = arg_list[i]->to_bool();

		//		[int exportAs]
		++i;
		int exportAs = arg_list[i]->to_int();
		
		exp->SetExportAsObjects( exportAs==1 );
		exp->SetExportAsCharacter( exportAs==2 );
		exp->SetExportAsAnimationOnly( exportAs==3 ); 

	#define READ_BOOL_PARAM( fct ) ++i; exp->fct( arg_list[i]->to_bool() );
	#define READ_INT_PARAM( fct ) ++i; exp->fct( arg_list[i]->to_int() );
	#define READ_STRING_PARAM( fct ) ++i; exp->fct( arg_list[i]->to_string() );
		
		READ_BOOL_PARAM( SetStoreOnlyFilenames ); //		[BOOL storeOnlyTextureFileName]
		READ_BOOL_PARAM( SetRescaleScene );//		[BOOL unitIsMeter]
		READ_BOOL_PARAM( SetGroupAsPlace );//		[BOOL groupToPlace]
		READ_BOOL_PARAM( SetSelectionAsGroup );//		[BOOL SelectionAsGroup]
		READ_BOOL_PARAM( SetConvertPhysiqueToSkin );//		[BOOL convertToSkin]
		READ_BOOL_PARAM( SetSaveBipedGeom );//		[BOOL saveBipedGeom]
		READ_INT_PARAM( SetKeyFrameStep );//		[int samplingStepForKeyFrames]
		READ_INT_PARAM( SetMeshFrameStep );//		[int samplingStepForDeformables]
		READ_INT_PARAM( SetCompressionLevel );//		[int compressionLevel]
		READ_INT_PARAM( SetReportLevel );//		[int reportLevel]
		READ_STRING_PARAM( SetCharacterName );//		[string characterName]
		READ_STRING_PARAM( SetAnimationName );//		[string animationName]

		//--- Really Do Export
		exp->SetShowProgressionBar( FALSE );
		exp->ReallyDoExport( fileName, MAXScript_interface, exportSelected );
		
		delete exp;

		return &ok;
	}
	//----------------------------------------


	//----------------------------------------
	//--------------- Add Virtools Tool Button
	#include "Maxscrpt\Parser.h"
	#include "utilapi.h"

	#define VIRTOOLSTOOL_CLASS_ID	Class_ID(0x6c7e7fe9,0x379a5550)

	class VirtoolsTool : public UtilityObj {
	public:
		XString m_ExportFileName;

	public:
			VirtoolsTool();
			~VirtoolsTool();

			void BeginEditParams(Interface *ip,IUtil *iu);
			void EndEditParams(Interface *ip,IUtil *iu);
			void DeleteThis() {}
	};

	static VirtoolsTool theVirtoolsTool;

	class VirtoolsToolClassDesc:public ClassDesc {
	public:
		int 			IsPublic() {return 1;}
		void *			Create(BOOL loading = FALSE) {return &theVirtoolsTool;}
		const TCHAR *	ClassName() {return _T("Virtools Exporter");}
		SClass_ID		SuperClassID() {return UTILITY_CLASS_ID;}
		Class_ID		ClassID() {return VIRTOOLSTOOL_CLASS_ID;}
		const TCHAR* 	Category() {return _T("");}
	};

	static VirtoolsToolClassDesc VirtoolsToolDesc;
	ClassDesc* GetVirtoolsToolDesc(){	return &VirtoolsToolDesc; }

	VirtoolsTool::VirtoolsTool(){
		m_ExportFileName = "";
	}

	VirtoolsTool::~VirtoolsTool(){
	}

	void VirtoolsTool::BeginEditParams(Interface *ip,IUtil *iu) 
	{
		CharStream *out = thread_local(current_stdout);
		Parser *parser = new Parser (out);
		
		// First instruction to know where we came from
		XString initInst("global alreadyGivenFileName = ");
		StringStream *initSource = new StringStream;
		if( m_ExportFileName.Length() ){
			initSource->init( (initInst + "\"" + m_ExportFileName + "\"").Str() );
		} else {
			initSource->init( (initInst + "undefined").Str() );
		}
		Value *code = parser->compile( initSource );
		Value *result = code->eval();
		delete initSource;
			
		XString maxScriptDir(ip->GetDir(APP_SCRIPTS_DIR));
		FileStream *source = (new FileStream)->open( (maxScriptDir + "\\CKInstScripts\\VirtoolsUtility.ms").Str() , "rt");

		BOOL quiet=TRUE;

		if (!quiet)
			source->log_to(out);
		
		// loop through file compiling and evaluating all expressions
		try
		{
			//source->flush_whitespace();
			while (!source->at_eos())
			{
				code = parser->compile(source);
				result = code->eval();
				if (!quiet)
					result->print();
				//source->flush_whitespace();
			}
			source->close();
		}
		catch (...)
		{
		// catch any errors and tell what file we are in if any
			out->printf("Error occurred in file: ");
			source->sprin1(out);
			out->printf("\n");
			//throw;
		}

		/*
		code = parser->compile_all(source);
		result = code->eval();
		
		source->close();
		*/
		delete parser;

		m_ExportFileName = "";

	}

	void VirtoolsTool::EndEditParams(Interface *ip,IUtil *iu) 
	{
	}

	//----------------------------------------

#endif //_USESCRIPTS_

	BOOL GetVersionInfo(char *file,DWORD& Version1,DWORD& Version2,DWORD& Version3,DWORD& Version4)
	{
		  DWORD dwVerHnd;
		  DWORD dwVerInfoSize;
		  long resMOld = 327680;
		  int ret = -1;

		  dwVerInfoSize = GetFileVersionInfoSize(file, &dwVerHnd);
		  if (dwVerInfoSize){
			 // If we were able to get the information, process it:
			 HANDLE hMem;
			 LPVOID lpvMem;
			 BOOL fRet;
			 UINT cchVer = 0;
			 VS_FIXEDFILEINFO *vInfo;

			 hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
			 lpvMem = GlobalLock(hMem);
			 GetFileVersionInfo(file, dwVerHnd, dwVerInfoSize, lpvMem);

			 fRet = VerQueryValue(lpvMem, TEXT("\\"),
								  (LPVOID*)&vInfo, &cchVer);
			 if (fRet && cchVer && vInfo) {
				vInfo->dwFileVersionMS;
				vInfo->dwFileVersionLS;

				Version1 = HIWORD(vInfo->dwFileVersionMS);
				Version2 = LOWORD(vInfo->dwFileVersionMS);
				Version3 = HIWORD(vInfo->dwFileVersionLS);
				Version4 = LOWORD(vInfo->dwFileVersionLS);							
			 }

			 GlobalUnlock(hMem);
			 GlobalFree(hMem);
			 return TRUE;
		  }
	   return FALSE;
	}


BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) 
{
	hInstance = hinstDLL;

	// Initialize the custom controls. This should be done only once.
	if (!controlsInit) {
		controlsInit = TRUE;
		InitCustomControls(hInstance);
		InitCommonControls();
		
//#pragma NOTE(__FILE__LINE__"Initialisation CK")		
		DWORD fpu = VxGetFPUControlWord();
		CKStartUp();
		if (VxGetFPUControlWord()!=fpu)
			_control87(_CW_DEFAULT, 0xfffff);
	}
	switch(fdwReason) {
		case DLL_PROCESS_DETACH: 	CKShutdown(); 
		default: return TRUE;
	}
	return (TRUE);
}



//-------- Presentation of functions to Max
//--------
__declspec( dllexport ) const TCHAR* LibDescription() 
{
	return GetString(IDS_LIBDESCRIPTION);
}

__declspec( dllexport ) int LibNumberClasses() 
{
#ifdef _USESCRIPTS_
	return 2;
#else
	return 1;
#endif
}

__declspec( dllexport ) ClassDesc* LibClassDesc(int i) 
{
	switch(i) {
	case 0: return GetAsciiExpDesc();
#ifdef _USESCRIPTS_
	case 1: return GetVirtoolsToolDesc();
#endif
	default: return 0;
	}
}

__declspec( dllexport ) ULONG LibVersion() 
{
	return VERSION_3DSMAX;
}

// Let the plug-in register itself for deferred loading
__declspec( dllexport ) ULONG CanAutoDefer()
{
	return 0;
}



static CKContext *g_VirtoolsContext = NULL;

class AsciiExpClassDesc:public ClassDesc {
public:
	int				IsPublic() { return 1; }
	void*			Create(BOOL loading = FALSE) { return new Max2Nmo; } 
	const TCHAR*	ClassName() { return GetString(IDS_ASCIIEXP); }
	SClass_ID		SuperClassID() { return SCENE_EXPORT_CLASS_ID; } 
	Class_ID		ClassID() { return MAX2NMO_CLASS_ID; }
	const TCHAR*	Category() { return GetString(IDS_CATEGORY); }

	~AsciiExpClassDesc(){
		CKCloseContext(g_VirtoolsContext);
		g_VirtoolsContext = NULL;
	}

};


static AsciiExpClassDesc AsciiExpDesc;

ClassDesc* GetAsciiExpDesc()
{
	return &AsciiExpDesc;
}

TCHAR *GetString(int id)
{
	static TCHAR buf[256];

	if (hInstance)
		return LoadString(hInstance, id, buf, sizeof(buf)) ? buf : NULL;

	return NULL;
}

Max2Nmo::Max2Nmo()
{
// These are the default values that will be active when 
// the exporter is ran the first time.
// After the first session these options are sticky.
	bShowProgressionBar		= TRUE;
	bExportAsObjects		= TRUE;
	bExportAsCharacter		= FALSE;
	bExportAsAnimationOnly	= FALSE;
	bConvertPhysiqueToSkin	= TRUE;
	bStoreOnlyTextureFilenames = FALSE;
	bRescaleScene			= FALSE;
	bGroupAsPlace			= FALSE;
	bSelectionAsGroup		= FALSE;
	szCharacterName			= "Character";
	szAnimationName			= "Animation";
	nMeshFrameStep			= 3;
	nKeyFrameStep			= 3;
	nCompressionLevel		= 0;
	nReportLevel			= 0;
	GroupIndent				= 0;
	bSaveBipedGeom			= FALSE;
        bAlignAnimOnZ			= FALSE;
	
	VirtoolsExporter		= NULL;
	VirtoolsContext			= NULL;

	ReportBufferPos			= 0;
}

Max2Nmo::~Max2Nmo()
{
}

int Max2Nmo::ExtCount()
{
	return 2;
}

const TCHAR * Max2Nmo::Ext(int n)
{
	switch(n) {
	case 0:
		return _T("Nmo");
	case 1:
		return _T("Vmo");
	}
	return _T("");
}

const TCHAR * Max2Nmo::LongDesc()
{
	return GetString(IDS_LONGDESC);
}

const TCHAR * Max2Nmo::ShortDesc()
{
	return GetString(IDS_SHORTDESC);
}

const TCHAR * Max2Nmo::AuthorName() 
{
	return _T("Romain Sididris and Francisco Cabrita");
}

const TCHAR * Max2Nmo::CopyrightMessage() 
{
	return GetString(IDS_COPYRIGHT);
}

const TCHAR * Max2Nmo::OtherMessage1() 
{
	return _T("");
}

const TCHAR * Max2Nmo::OtherMessage2() 
{
	return _T("");
}

unsigned int Max2Nmo::Version()
{
	return 100;
}

static BOOL CALLBACK AboutBoxDlgProc(HWND hWnd, UINT msg, 
	WPARAM wParam, LPARAM lParam)
{
	switch (msg) {
	case WM_INITDIALOG:
		CenterWindow(hWnd, GetParent(hWnd)); 
		break;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			EndDialog(hWnd, 1);
			break;
		}
		break;
		default:
			return FALSE;
	}
	return TRUE;
}       

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷久久久综合中文字幕| ●精品国产综合乱码久久久久| 九色综合国产一区二区三区| 亚洲精品在线观| 成人禁用看黄a在线| 亚洲一区二区三区国产| 精品成人一区二区三区四区| 99久久99久久精品免费观看| 日本亚洲一区二区| 国产精品视频免费| 91精品国产综合久久久久久久久久| 国产福利不卡视频| 日韩有码一区二区三区| 国产农村妇女精品| 91精品国产91热久久久做人人| 粉嫩av一区二区三区在线播放| 亚洲一二三四在线| 亚洲国产高清aⅴ视频| 欧美精品免费视频| 91视频一区二区| 国产伦精品一区二区三区视频青涩 | 色天天综合色天天久久| 毛片一区二区三区| 亚洲一区二区精品视频| 日本一二三不卡| 欧美成人猛片aaaaaaa| 91啪亚洲精品| 高清视频一区二区| 麻豆精品视频在线观看| 亚洲精品福利视频网站| 国产欧美va欧美不卡在线| 56国语精品自产拍在线观看| 99视频精品全部免费在线| 国产麻豆精品theporn| 免费欧美在线视频| 一区二区免费在线| 最新热久久免费视频| 久久久久久毛片| 日韩精品一区二区三区视频| 欧美日韩夫妻久久| 日本精品一区二区三区高清| 成人免费看片app下载| 国产麻豆精品theporn| 久久国产精品露脸对白| 日韩精品亚洲一区二区三区免费| 最新国产の精品合集bt伙计| 国产精品热久久久久夜色精品三区| 欧美一区二区网站| 在线不卡a资源高清| 欧美日韩免费在线视频| 91精品办公室少妇高潮对白| 成人激情综合网站| 久久成人免费电影| 日本亚洲视频在线| 奇米四色…亚洲| 亚洲五码中文字幕| 亚洲欧洲99久久| 精品国产污污免费网站入口| 欧美一区二区三区视频免费播放| 欧美日韩一区二区三区高清 | 欧美精品日韩一本| 欧美吞精做爰啪啪高潮| 欧美日韩在线精品一区二区三区激情| 色爱区综合激月婷婷| 在线欧美日韩精品| 欧美日韩一级二级三级| 欧美日本视频在线| 6080日韩午夜伦伦午夜伦| 欧美一区二区免费| 欧美精品一区二区三区在线| 久久精品一区八戒影视| 国产精品视频观看| 亚洲精品综合在线| 亚洲h动漫在线| 毛片一区二区三区| 国产精品1024久久| 91蜜桃传媒精品久久久一区二区| 色哟哟在线观看一区二区三区| 在线观看视频一区| 这里是久久伊人| 26uuu精品一区二区| 国产偷v国产偷v亚洲高清| 国产精品不卡一区| 亚洲v精品v日韩v欧美v专区 | 经典三级视频一区| 国产91色综合久久免费分享| 不卡一区二区三区四区| 欧美三级日韩在线| 亚洲精品一区二区三区99| 中文字幕中文在线不卡住| 五月天亚洲婷婷| 国产一区二区三区综合| 在线视频中文字幕一区二区| 日韩精品一区二区三区中文不卡| 中文av一区二区| 午夜欧美电影在线观看| 国产传媒日韩欧美成人| 在线视频欧美精品| 欧美精品一区二区三区高清aⅴ| 国产精品美女久久久久久久久 | 国产婷婷色一区二区三区在线| 中文在线免费一区三区高中清不卡| 一区二区三区日韩在线观看| 亚洲人成精品久久久久| 久久av中文字幕片| 91极品美女在线| 久久色视频免费观看| 亚洲与欧洲av电影| 国产乱淫av一区二区三区| 欧美三级日韩在线| 国产精品污网站| 日本女人一区二区三区| 99re这里都是精品| 精品日韩一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 国产精品夜夜嗨| 91精品国产欧美一区二区| 成人欧美一区二区三区视频网页 | 亚洲欧美日韩国产综合在线| 黑人精品欧美一区二区蜜桃| 欧美性大战久久久久久久| 国产色综合久久| 青娱乐精品视频| 色狠狠av一区二区三区| 国产日产欧美一区二区三区| 老鸭窝一区二区久久精品| 欧美性猛交xxxx黑人交| 亚洲欧美在线视频| 久久97超碰色| 制服丝袜激情欧洲亚洲| 综合欧美一区二区三区| 国产成人精品在线看| 精品久久久久一区| 日韩激情视频网站| 欧美男同性恋视频网站| 亚洲欧美日韩综合aⅴ视频| 成人免费毛片aaaaa**| 久久精品欧美一区二区三区麻豆| 青草av.久久免费一区| 欧洲生活片亚洲生活在线观看| 综合婷婷亚洲小说| 成人精品国产一区二区4080| 国产欧美综合在线| 国产乱对白刺激视频不卡| 精品成人免费观看| 老司机精品视频导航| 日韩一本二本av| 美女久久久精品| 欧美日韩中文字幕一区| 亚洲桃色在线一区| 一本久久a久久精品亚洲| 亚洲激情图片qvod| 在线观看一区二区视频| 亚洲夂夂婷婷色拍ww47| 欧美日韩高清在线播放| 亚洲一区二区三区视频在线| 成人午夜电影小说| 精品不卡在线视频| 国产一区在线不卡| 91精品国产综合久久久蜜臀粉嫩| 亚洲国产日韩在线一区模特| 欧美三级日本三级少妇99| 一级女性全黄久久生活片免费| 色婷婷综合中文久久一本| 亚洲精品精品亚洲| 欧美日韩综合在线免费观看| 偷拍日韩校园综合在线| 91精品欧美福利在线观看| 久久99精品久久久久久国产越南| 久久老女人爱爱| 国产91精品免费| 亚洲欧美日韩在线播放| 91精彩视频在线观看| 婷婷综合久久一区二区三区| 日韩三级视频中文字幕| 国内外精品视频| 国产精品久久久久久久久动漫| 91网页版在线| 五月婷婷激情综合网| 精品久久久久久无| 成人国产精品免费观看动漫 | 国产精品视频免费| 91在线你懂得| 亚洲韩国一区二区三区| 欧美一级欧美三级在线观看| 日韩精彩视频在线观看| 欧美一区二区精美| 久久精品av麻豆的观看方式| 韩国三级在线一区| 国产蜜臀97一区二区三区| gogo大胆日本视频一区| 美脚の诱脚舐め脚责91| 中文av一区特黄| 欧美日韩在线不卡| 国产在线视视频有精品| 亚洲精品视频在线| 国产欧美日本一区视频| 亚洲成人自拍网| 在线播放91灌醉迷j高跟美女| 亚洲一区二区精品3399|