選択されたオブジェクトを選択不可にして、次にワンクリックでこの選択不可にしたオブエクとを選択可に戻す。
という依頼でした。
別にスクリプト屋やってるわけではないけど、10分あればすぐに作れそうなスクリプトだったから書いてみました。
ていうかグループを使えばいいんじゃない?と今は思うけど。
カスタムプロパティを作って、選択リストをそこに記録しておくとその後にそこから読みこめばいいでしょう。
ところで、XSIなんだからそんな簡単にはいかないんですね・・・。
テスト用のヌルを3個を作って、このコードで試してみました。
//JScriptvar oSel = GetValue("selectionlist")
AddProp("Custom_parameter_list", ActiveSceneRoot, "", "CustomPSet", null);
SIAddCustomParameter("CustomPSet", "list", siString, oSel, 0, 1, null, 4, 0, 1, null, null);
これで選択リストがカスタムパラメータに残ってるはずなんですが、

ないんですよ!
ログにちゃんと載ってるけどね:
//JScript LOGSIAddCustomParameter("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作るときと同じようにプロパティを作って、プロパティのパラメータを作るというやりかたで試してみたら
//JScriptvar 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)}