« 右手に宿りし黒竜は神の力か悪魔のそれか | トップページ | ろくろを回してみた »

2011年11月11日 (金)小さな事からUI化

おはようございます。本日の当番、モーションデザイナーのR.Iです。

最近、かなり寒くなってきました。
皆さんはいかがお過ごしでしょうか。

さて、前回のブログでヌルをモデルにまとめるためのスクリプトを紹介しました。

いくつか問題点もありましたので、今回は前回のスクリプトをUI化して、
見やすく使いやすいものにしようと思います。


まず、前回のスクリプトの内容から説明します。

オブジェクトを選択した状態で実行すると、テキスト入力画面が表示され、
入力した名前のモデルを作成します。
シーン上に同じモデル名が存在した場合は、モデルを作成せずに
シーン上に存在するモデルと親子関係を結びます。

このスクリプトの問題点として

既に存在するモデルと親子関係を結ぶ事を前提に実行した場合、
文字入力を1字でもミスすると、新しいモデルが作成されてしまう

という事があります。


修正したものが以下になります。

App = Application;oRoot = App.ActiveSceneRoot;oSel = App.Selection

oProp = XSIFactory.CreateObject("CustomProperty")
oProp.Name = "CreateModel_Tool"

oProp.AddParameter3("Model_List",8,"Model_List")
oProp.AddParameter3("Model_Name",8,"")
oLayout = oProp.PPGLayout

#モデルがシーン上に存在するかどうか検索
oChildren = oRoot.FindChildren("*","#model","",0)
if oChildren.Count > 0: #モデルが存在したらUIにラジオボタンを追加する
	oModel_List = oChildren.GetAsText().split(",")
	oModel_List.sort()

	for oModel_Cnt in range(oChildren.Count):
		oModel_List.insert(oModel_Cnt * 2 + 1 ,oModel_Cnt)

	oLayout.AddEnumControl("Model_List",oModel_List,"Scene_ModelList","Radio")

#新規モデル名を入力するテキストボックスを追加
oLayout.AddItem("Model_Name","New_Model_Name")

oLayout.AddButton("CreateModel","Run")#ボタンを追加
oLayout.Language = "Python"

#UIの設定
oLayout.Logic = """

PPG.Model_List.value = ""
PPG.Model_Name.value = ""

def Model_List_OnChanged():
	App = Application
	oRoot = App.ActiveSceneRoot
	PPG.Model_Name.value = ""

def Model_Name_OnChanged():
	PPG.Model_List.value = ""

def CreateModel_OnClicked():
	App = Application
	oRoot = App.ActiveSceneRoot
	oSel = App.Selection
	oModel_List = str(oRoot.FindChildren("*","#model","",0).GetAsText()).split(",")
	oModel_List.sort()

	if oSel.Count > 0:
		if len(oModel_List) > 0 and str(PPG.Model_List.value) != "":

			oModel = oRoot.FindChildren(oModel_List[int(PPG.Model_List.value)],"#model","",0)
			oModel[0].AddChild(oSel)
			PPG.Close()

		elif str(PPG.Model_Name) == "":
			LogMessage("Not Mark RadioButton or Not Input ModelName!!")

		if PPG.Model_Name.value != "":
			oModel = oRoot.FindChildren(str(PPG.Model_Name.value),"#model","",0)

			if str(PPG.Model_Name.value) != str(oModel.GetAsText()):
				oRoot.AddModel(oSel,PPG.Model_Name.value)

			else:
				oModel[0].AddChild(oSel)
			PPG.Close()		
	else:
		LogMessage("Not Select Obj!!")
"""

App.InspectObj(oProp,"",oProp.Name,2,0)

実行するとUIが表示されます。

2011_1110_01

▼スクリプト実行時のシーンの状態▼

2011_1110_02

既に存在するモデルと親子関係を結びたい場合はラジオボタンで選択し、
新しくモデルを作成する場合はテキスト入力させるようにUIを設定しました。

2011_1110_03
2011_1110_04
2011_1110_05
2011_1110_06

これによってわざわざ入力しなくても選択するだけで既存モデルと親子関係を
結ぶことができます。


ラジオボタンにチェックかテキスト入力したあとに
Runボタンをクリックすると処理が実行され、UIが閉じられます。


以上が改善点になります。
簡単なスクリプトもUI化することで誰にでもわかりやすく、
汎用性の高いものになりますので、勉強も兼ねてUI化するのも面白いと思います。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2011/11/ui-c3dd.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« 右手に宿りし黒竜は神の力か悪魔のそれか | トップページ | ろくろを回してみた »

モーションデザイナー」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 小さな事からUI化:

« 右手に宿りし黒竜は神の力か悪魔のそれか | トップページ | ろくろを回してみた »