とあるゲームプログラマの挑戦と敗北の歴史

UE4とプログラミングとmayaとpythonとマラソンを中心に情報を発信する元「技術ブログを目指すブログ」から再始動した毎日の日々を発信するブログです。

maya:モデルのエクスポータを作りたい2

ひきつづきモデルのエクスポータを作成中

あとは複数選択出力できるようにするなり、オプションを適当に入力して
完成にしてしまおう。必要なものがあったら随時書き加えればよいし。

つぎのゲーム制作の工程に進もう。

自動で現在開いているシーンの直下にOutputフォルダを作って出力
ぐらいの親切処理は対応済み。

f:id:toncrimentan_w:20200517111936j:plain

/**
 * @brief		出力先ブラウズボタンのクリックイベント
 */
global proc ModelEditor_OnChickBrouseOutputField()
{
	string $sceneName = `file -q -sceneName`;
	string $dirName = `dirname $sceneName`;
	string $baseName = `basenameEx $sceneName`;

	string $results[] = `fileDialog2 -fileMode 3 -caption "出力先を指定してください" -startingDirectory $dirName`;
	if( 0<size($results) && $results[0]!="" )
	{
		string $path = $results[0]+"/"+$baseName+".fbx";
		textField -edit -text $path ModelEditor_OutputField;
	}
}

/**
 * @brief		選択出力ボタンイベント
 */
global proc ModelEditor_OnClickExportSelect()
{
	// 出力先パスの取得
	string $path = `textField -query -text ModelEditor_OutputField`;
	if( $path == "" )
	{
		warning "出力先パスを入力してください";
		return ;
	}

	string $result = `confirmDialog -title "メッセージ" -message ($path+"\nにFBXを出力してもよろしいですか?") -button "Yes" -button "No" -defaultButton "Yes" -cancelButton "No" -dismissString "No"`;
	if( $result == "Yes" )
	{
		print( "========================================\n" );
		print( "    モデルの出力を開始します\n" );
		print( "========================================\n" );

		// メッシュを取得
		string $selections[] = `ls -selection`;
		if( size($selections) != 1 )
		{
			warning "ひとつのメッシュを選択してください";
			return ;
		}

		print ("出力:"+$path+"\n");

		// FBXの出力
		file -force -options "" -type "FBX export" -exportSelected $path;

		print( "========================================\n" );
		print( "モデルの出力を完了しました\n" );

		select $selections;
	}
}

//
//  バージョン情報
//

/**
 * @brief		バージョン情報のオープン
 */
global proc ModelEditor_OpenVersion()
{
	// 既存のウィンドウの破棄
	if( `window -exists ModelEditorVersion` )
	{
		deleteUI -window ModelEditorVersion;
	}

	// 新規ウィンドウの作成
	string $win = `window -title "バージョン情報" -iconName "バージョン情報" -widthHeight 150 120 ModelEditorVersion`;
	columnLayout -adjustableColumn true;
		text -label "Model Editor 1.1" -align center;
		text -label "2020.05.15 update" -align center;
	setParent ..;
	showWindow $win;
}


//
//  ウィンドウ
//

/**
 * @brief		ウィンドウのリロード
 */
global proc ModelEditor_ReloadWindow()
{
	string $sceneName = `file -q -sceneName`;
	if( $sceneName != "" )
	{
		string $dirName = `dirname $sceneName`;
		string $baseName = `basenameEx $sceneName`;
		string $path = $dirName + "/Output/" + $baseName + ".fbx";
		textField -edit -text $path ModelEditor_OutputField;
	}

	print "ウィンドウリロードしました";
}

/**
 * @brief		ウィンドウのオープン
 */
global proc ModelEditor_OpenWindow()
{
	// 既存のウィンドウの破棄
	if( `window -exists ModelEditor` )
	{
		deleteUI -window ModelEditor;
	}


	// 新規ウィンドウの作成
	string $win = `window -title "ModelEditor" -iconName "ModelEditor" -widthHeight 300 360 ModelEditor`;

		// メニューバーレイアウト
		menuBarLayout;
			menu -label "ファイル";
				menuItem -label "閉じる" -command "deleteUI -window ModelEditor";
			menu -label "ヘルプ";
				menuItem -label "バージョン情報" -command "ModelEditor_OpenVersion";
		setParent ..;

		columnLayout -adjustableColumn true;

			// リロード
			rowLayout -numberOfColumns 1 -columnWidth1 80;
				button -label "リロード" -width 80 -command "ModelEditor_ReloadWindow()";
			setParent ..;

			text -label "";

			// 説明
			text -label "説明:" -align left;
			text -label "モデルを選択してエクスポートボタンを押すことで\n指定したディレクトリに出力します。" -align left;

			text -label "";

			// 出力先パス
			rowLayout -numberOfColumns 1 -columnWidth1 80;
				button -label "出力先パス:" -width 80 -command "ModelEditor_OnChickBrouseOutputField()";
			setParent ..;
			// 出力先テキストフィールド
			textField -text "" ModelEditor_OutputField;

			text -label "";

			// エクスポート
			button -label "エクスポート" - command "ModelEditor_OnClickExportSelect()";

		setParent ..;

		// リロード
		ModelEditor_ReloadWindow();

	showWindow $win;
}