myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Toggle Selectability

さっきbaseでスクリプトが欲しいというメッセージが来ました。

選択されたオブジェクトを選択不可にして、次にワンクリックでこの選択不可にしたオブエクとを選択可に戻す。
という依頼でした。

別にスクリプト屋やってるわけではないけど、10分あればすぐに作れそうなスクリプトだったから書いてみました。


ていうかグループを使えばいいんじゃない?と今は思うけど。


カスタムプロパティを作って、選択リストをそこに記録しておくとその後にそこから読みこめばいいでしょう。

ところで、XSIなんだからそんな簡単にはいかないんですね・・・。

テスト用のヌルを3個を作って、このコードで試してみました。

//JScript

var oSel = GetValue("selectionlist")
AddProp("Custom_parameter_list", ActiveSceneRoot, "", "CustomPSet", null);
SIAddCustomParameter("CustomPSet", "list", siString, oSel, 0, 1, null, 4, 0, 1, null, null);



これで選択リストがカスタムパラメータに残ってるはずなんですが、

togglesel.jpg

ないんですよ!

ログにちゃんと載ってるけどね:

//JScript LOG

SIAddCustomParameter("CustomPSet", "list", siString, "null2,null1,null", null, null, null, null, null, null, null, null);




色々試してみたけど、駄目でした。

UPDATE : ストリング化にすれば良いです。XSI のGetAsText か、JScriptの String()を使えば良いです。VBscriptの場合は Cstr() 
例: oSel.GetAsText()      String(oSel)     Cstr(oSel)



でPPG作るときと同じようにプロパティを作って、プロパティのパラメータを作るというやりかたで試してみたら

//JScript

var oPSet = ActiveSceneRoot.AddProperty( "CustomProperty", false, "ToggleSel" )
oPSet.AddParameter2("list", siString, oSel);



なんと上手くいきました。

なんで?

よく分からんけど、メモっておく。

結局10分ではなく20~30分ぐらい掛かってしまったorz

このどうでも良いスクリプトのコード:

var oSel = GetValue("selectionlist").expand()
var TList = ActiveSceneRoot.properties("ToggleSel")

if (!TList && oSel.count > 0) {
var oPSet = ActiveSceneRoot.AddProperty( "CustomProperty", false, "ToggleSel" )
oPSet.AddParameter2("list", siString, oSel);
for(var i=0; i<oSel.count; i++){
oSel(i).properties("visibility").selectability = false
}
selection.clear()
}
else if (TList){
var oSel1 = ActiveSceneRoot.properties("ToggleSel").list.value
SelectObj(oSel1);
for(var i=0; i<selection.count; i++){
selection(i).properties("visibility").selectability = true
}
DeleteObj(ActiveSceneRoot.properties("ToggleSel"))

}
else if (!TList && oSel.count == 0){logmessage("Nothing Selected", siWarning)}


Next page