小さな事から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が表示されます。
▼スクリプト実行時のシーンの状態▼
既に存在するモデルと親子関係を結びたい場合はラジオボタンで選択し、
新しくモデルを作成する場合はテキスト入力させるようにUIを設定しました。
これによってわざわざ入力しなくても選択するだけで既存モデルと親子関係を
結ぶことができます。
ラジオボタンにチェックかテキスト入力したあとに
Runボタンをクリックすると処理が実行され、UIが閉じられます。
以上が改善点になります。
簡単なスクリプトもUI化することで誰にでもわかりやすく、
汎用性の高いものになりますので、勉強も兼ねてUI化するのも面白いと思います。
| 固定リンク
「モーションデザイナー」カテゴリの記事
- (´・ω・`) ←コイツの可愛さ異常だよね!(2012.02.17)
- 制約をものともしない挑戦的な(以下略(2012.02.16)
- 観劇!激見!!(2012.02.15)
- Logicは外(2012.02.14)
- リミテッドアニメーションの功罪(2012.02.13)












コメント