HSPのGPB converterのフロントエンドを動かすツール

変換したあとのログファイルボタンを人の代わりに押したり、ファイルを別のフォルダにコピーします。

更新履歴

  • 2021年3月29日
    • 初リリース
  • 2021年3月31日
    • WAIT_TIMEを10から50に変更した。
    • 「変換したら、つぎのフォルダに移す」にチェックを入れていていて移したあとに、移す前のフォルダにある.gpbと.materialを消していなかったのを消すように直した。
  • 2021年4月6日
    • GPB converterの変換がおわるのを待つようにした。
    • モデルファイルのフォルダがないときのエラーメッセージを変えた。
    • GPB converterが半角空白のあるファイルを変換できないから、変換するモデルファイル名に空白がある場合に、エラーになるようにした。

つぎのソースをhspeditにコピーしてコンパイルしてください。

;revision 20210406
#include "hspext.as"

*define
#define apl_keycode_space 32
WAIT_TIME=10

title "GPB コンバート自動実行"
width 640,180

GPB_converter_title = "GPB converter ver"
model_file_name="test.fbx"
from_folder_base="sample\\hgimg4\\fbx\\"
to_folder_base="sample\\hgimg4\\res\\"
checkflag_gpb_file_move=0

goto *main

#include "user32.as"
#deffunc focus_window_close
	keybd_event 18,0,0,0 ; VK_ALTキーを押す
	keybd_event 0x73,0,0,0 ; VK_F4キーを押す
	keybd_event 18,0,2,0 ; VK_ALT:KEYEVENTF_KEYUP キーをはなす
	keybd_event 0x73,0,2,0 ; VK_F4:KEYEVENTF_KEYUP キーをはなす
	wait 10
	return

#deffunc select_text_all
	keybd_event 17,0,0,0 ; VK_CONTROLキーを押す
	keybd_event 'A',0,0,0; aキーを押す
	keybd_event 'A',0,2,0; a:KEYEVENTF_KEYUP キーをはなす
	keybd_event 17,0,2,0 ; VK_CONTROL:KEYEVENTF_KEYUP キーをはなす
	;aplkey 46: wait 10
	wait 10
	return

#defcfunc has_last_path_separator str path
	tmp = path
	last_char=""
	last_char = strmid(tmp, strlen(tmp)-1, 1)
	if "\\"==last_char {
		return 1
	}
	return 0

#defcfunc remove_last_path_separator str path
	tmp = path
	last_char=""
	last_char = strmid(tmp, strlen(tmp)-1, 1)
	if "\\"==last_char {
		return strmid(tmp, 0, strlen(tmp)-1)
	}
	return path

#deffunc ファイルをけす str filepath
	exist filepath
	if 0 <= strsize {
		delete filepath
	}
	return

*main

*init
if dir_cmdline!="" {
	;"abc.fbx C:\Users\takahiro\Documents\HSP\hsp36beta\sample\hgimg4\fbx C:\Users\takahiro\Documents\HSP\hsp36beta\sample\hgimg4\res 1"
	arg_str=dir_cmdline
	index=instr(arg_str,0," ")
	model_file_name = strmid(arg_str, 0, index)
	current_position = strlen(model_file_name) + 1
	prev_index = index

	index=instr(arg_str,current_position," ")
	from_folder_base = strmid(arg_str, current_position, index)
	current_position = current_position + strlen(from_folder_base) + 1
	prev_index = index
	from_folder_base = from_folder_base + "\\"

	index=instr(arg_str,current_position," ")
	to_folder_base = strmid(arg_str, current_position, index) + "\\"
	current_position = strlen(to_folder_base) + 1
	prev_index = index

	checkflag_gpb_file_move = int(strmid(arg_str, -1, 1))
}

mes "モデルファイル名"
pos 130,0
input model_file_name, 120, 20
pos 250,0

pos 260,0
mes "(フォルダ"
pos 345,0
input from_folder_base, 200, 20
pos 550,0
mes ")を"

pos 175, 30
objsize 300,25
button goto "GPB converterで変換する", *do_convert

pos 0,70
objsize 180,25, 0
chkbox "変換したら、つぎのフォルダに移す", checkflag_gpb_file_move

pos 190,70
input to_folder_base, 400, 20

stop


*do_convert
pos 0,100
color 255,255,255
boxf 0,100, 600,180
redraw
color 0,0,0

if 0==has_last_path_separator(from_folder_base) {
	from_folder_base += "\\"
}

;モデルファイルのフォルダをチェックする
dirlist direxist, remove_last_path_separator(from_folder_base), 5
if stat==0 {
	mes "モデルファイルのフォルダがありません"
	stop
}
;モデルファイルがあるかチェックする
file_path = from_folder_base+model_file_name
exist file_path
if -1==strsize {
	mes "モデルファイルがありません"
	stop
}
;モデルファイルの名前に空白がないかチェックする
ファイル名に空白がある = instr(model_file_name, 0, " ")
if 0<=ファイル名に空白がある {
	mes "モデルファイル名に空白があるモデルファイルはGPB converterは変換できません"
	stop
}

;変換したモデルファイルを移すフォルダがあるかチェックする
if checkflag_gpb_file_move {
	if 0==has_last_path_separator(to_folder_base) {
		to_folder_base += "\\"
	}
	dirlist direxist, remove_last_path_separator(to_folder_base), 5
	if stat==0 {
		mes "移すフォルダがありません"
		stop
	}
}

aplsel GPB_converter_title, 0
if stat == 1 {
	exec "gpbconv.exe"; 起動
	wait 50
}

;GPB converterフロントエンドを動かす
aplsel GPB_converter_title, 0 : aplobj "Edit"
	aplstr file_path:wait WAIT_TIME
aplsel GPB_converter_title, 0 : aplobj "Button",7:wait WAIT_TIME : aplkey apl_keycode_space:wait WAIT_TIME
*wait_gpb_converter_log
aplsel GPB_converter_title, 0 : aplobj "Button",3:wait WAIT_TIME : aplkey apl_keycode_space:wait WAIT_TIME ; ログボタンを押す
convert_log_line_num=0
aplsel GPB_converter_title, 0 : aplobj "Edit"
apledit convert_log_line_num,1:wait WAIT_TIME
if convert_log_line_num==1 {
	goto *wait_gpb_converter_log
} else {
	if convert_log_line_num<=6 {
		goto *convert_error
	} else {
		goto *convert_success
	}
}

*convert_error
pos 0,100
mes "変換に失敗しました。モデルやフォルダを調べて変換、配置を試してください。"
mes "そのときにGPB Converterを終了しておいてください。"
stop

*convert_success

pos 0,100
mes "変換に成功しました。"
focus_window_close ; GPB converterフロントエンドを閉じる

if checkflag_gpb_file_move {
	mes "ファイルをプログラムの利用フォルダに移します。"

	model_file_name_exclude_extention = getpath(model_file_name, 1)
	if from_folder_base!=to_folder_base {
		bcopy from_folder_base+model_file_name_exclude_extention+".gpb", to_folder_base+model_file_name_exclude_extention+".gpb"
		bcopy from_folder_base+model_file_name_exclude_extention+".material", to_folder_base+model_file_name_exclude_extention+".material"
		ファイルをけす from_folder_base+model_file_name_exclude_extention+".gpb"
		ファイルをけす from_folder_base+model_file_name_exclude_extention+".material"
		mes "ファイルを移しました。"
	} else {
		mes "フォルダが同じです。"
	}
	mes "ファイルのタイムスタンプを確認してください。"
}

stop

メモ

このツールは起動時引数に次の4つのオプションを指定できます。※指定するときはすべて指定してください。

  • モデルファイル名(たとえば、character.fbx)
  • モデルファイルがあるフォルダ(たとえば、c:\modelやsample\hgimg4\fbx)
  • モデルを移すフォルダ(たとえば、c:\resやsample\hgimg4\res)
  • モデルを移すかどうか、0か1を指定してください。0は移さない、1は移す、です。

↑思ったことがまだできないので打消し。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です