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)}


Comments

SIAddCustomParameter("CustomPSet", "list", siString, oSel.GetAsText(), 0, 1, null, 4, 0, 1, null, null);

と書けば通ります。 GetAsText の呪文です。 oSel の中身を、カンマも含めてストリングに変換するとでも言うか。

でもなぜ、Property.AddParameter2 でやるときは GetAsText メソッドを使わなくてもいいのか。 知りません。

これもオブジェクトモデルを使う利点ということになるんでしょうか。 わかりません。

引数でコレクションをくれと言っているコマンドに対しては GetAsText は要らなかったような気もする。リストをくれと言っているコマンドには必ずストリング型で渡してやらないといけないとか。 違うかな。 すいませんテキトーに言っています。淋しいだけです。

  • 2012/01/31(火) 23:36:13 |
  • URL |
  • 潤樹 #W4WqU6sQ
  • [ Edit ]

Re: No title

なるほどです! ストリング化にすればいいですね!!
今試してみたら上手く行きました。
因みに JScript の String(oSel) でも上手くいきました。

  • 2012/02/01(水) 00:00:32 |
  • URL |
  • myara #-
  • [ Edit ]

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/56-82f01598
Use trackback on this entry.