Logicは外
おはようございます。本日の当番、モーションデザイナーのR.Iです。
さて前回のブログで簡単なUI付きのスクリプトを作成しました。
そのスクリプト中に
#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!!") """ |
というUIのイベントを設定する部分がありました。
前回は「勉強ついでに」ということでLogicの書式に従ってスクリプトを
書いてましたが、このLogic部分だけですごく長いです。
これが一つのファイルに全部、記述されていると見にくいのでは?と思い、
いい方法はないかと調べていたら「外部から参照する方法」があることを知り、
さっそく試してみました。
外部から参照するので「Logicの部分」を外部参照用に書き換え、
「Logic.pys」として保存します。
#Logic.pys 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!!") |
次にメイン部分のスクリプトを「main.pys」として保存します。
#main.pys from win32com.client import constants as c App = Application;oRoot = App.ActiveSceneRoot Logic_Path = "C:\\" #パラメータの設定関数 引数 : なし 戻り値 : カスタムプロパティ def fParm_Set(): oProp = XSIFactory.CreateObject( "CustomProperty" ) oProp.Name = "CreateModel_Tool" oProp.AddParameter3( "Model_List" , c.siString , "Model" ) oProp.AddParameter3( "Model_Name" , c.siString , "" ) return oProp #レイアウトを設定する関数 引数 : カスタムプロパティ 戻り値 : レイアウト後のカスタムプロパティ def fLayout_Set(CP_Parms): oLayout = CP_Parms.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" oLayout.SetAttribute("LogicFile" , Logic_Path + "Logic.pys") #PPGLayout.Logicを外部から参照 return CP_Parms #メイン関数 def main(): oProp = fLayout_Set(fParm_Set()) App.InspectObj(oProp , "" , oProp.Name , c.siFollow , 0) #処理 main() |
「main.pys」を実行すると前回と同じ処理結果になります。
oLayout.SetAttribute("LogicFile" , Logic_Path + "Logic.pys")
上記の処理が外部参照の部分になります。
PPGLayout.SetAttribute PPGLayout.SetAttribute("LogicFile" , 外部参照するスクリプトのパス)
というように記述すれば、外部参照が可能です。
これによって処理が小分けになって見やすくなったり、
スクリプトエディタによっては、文字列、コメント、コマンドごとに
色分けされるので見やすくなると思います。
ちなみに前回、Logic部分は全て文字列の判定だったため、
Logic以下は同じ色になってしまい、とても見にくかったです・・・(=_=;)
Logicの外部参照については以上になります。
昔、自分が書いたスクリプトのほとんどは一つのファイルにドサッと
書いてあるので、機会があれば、今回のように整理していきたいなと思います。
| 固定リンク
「モーションデザイナー」カテゴリの記事
- 連休の過ごし方(2012.05.09)
- 睡眠記録アプリ使用の結果、私は7時間寝ないとダメって分かった!(`・ω・´)+(2012.05.08)
- 旅行と発見(2012.05.07)
- セルフコントロール(2012.05.02)
- 外からイジル(2012.05.01)












コメント