« GridData に色つけてポン。 | トップページ | NewSceneOptions。 »

2012年1月23日 (月)

取得 その7。 シーンのファイル名の取得。

某飲み会で某くんと話をしていて出た話題。


シーンのファイル名って取得できるんスか? と。
もちろん出来ます。
色んなスクリプトで使ってます。



var oProject = ActiveProject;
var oScene = oProject.ActiveScene;


Logmessage( oScene.Parameters( "filename" ).value );

Logmessage( oScene.filename.value );

Logmessage( ActiveProject.ActiveScene.filename.value );


Logmessage の3行は、どれも結果は同じです。


XSI のシーンというものに対して何かをしたい場合、この場合は「名前を調べたい」なわけですが、基本的にシーンオブジェクトというものを取得しなければいけないと考えればいいんじゃないですかね。 シーンオブジェクトさえ取得できれば、そのオブジェクトが、「私は HDD上のどこにどんな名前でセーブされているの?」 という情報を持っています。


で、シーンオブジェクトを取得するためには、先にアクティププロジェクトオブジェクトも取得しなければいけないんです。



と言うよりは、ActiveProject オブジェクトが持つプロパティのひとつに、ActiveScene というものがあり、これがシーンオブジェクトそのものだ、という方が正確な説明になるかと思います。



まあ、シーンオブジェクトなんていう基本的なものは、成り立ちなんてどうでもいいから、こうすりゃ取得できると覚えてしまえばよい。 それが、最初の2行です。 これで変数 oScene にシーンオブジェクトが取得できました。 



あとはマニュアルで Scene オブジェクトのページを見てみると、 FileName パラメータでフルパスが取得できると書いてあります。 なので Logmessage でそのパラメータの値を表示させています。


最初の

 Logmessage( oScene.Parameters( "filename" ).value );

これは、「 oScene が持つパラメータのうち、"filename" という名前のものだけを抽出し、その値( value )を表示せよ 」 と言っているわけですね。



でも Parameters( "ほにゃらら" ) ってのは、よく省略できます。 なので省略した書き方が、次に出てくる

 Logmessage( oScene.filename.value );

です。 結果は全く同じです。



いちいち変数に代入しなくても、直接アクセスもできまっせという例が、その次の、

 Logmessage( ActiveProject.ActiveScene.filename.value );

です。 この行は、最初の2行で書いた oActiveProject や oScene を使っていません。 一度も変数に代入してないわけです。 よってこの1行だけでも動きます。 

ファイル名を取得したいだけで他のパラメータにアクセスする必要はないだとか、スクリプトの中で何度も出てくるわけではない場合なら、このように、変数には代入せずに直接アクセスで書いてしまった方がコードは短くなるし、スッキリします。

でも俺なんかは、○○を取得してるんだぜっていう意識を明確にするために、どの時点でどこまでを取得できているのかを明確にするために、あるいは、冗長でもいいから後で見直した時に把握しやすいようにという意味で、わざといちいち変数に代入することもあります。 ケースバイケースですね。



まあこうしてごちゃごちゃ説明を書いてはいますが、「シーンのファイル名って、スクリプトで取得できるのん?」 などという段階の人、つまりスクリプティングにさほど慣れているわけではない段階の人であれば、めんどくさいこと考えずに、こう書いて実行させれば現在開いているシーンのファイル名がフルパスで表示されるって覚えちゃえばいいですよね。 理屈は後から着いて来ますから。







ごきげんよう。

|

« GridData に色つけてポン。 | トップページ | NewSceneOptions。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 取得 その7。 シーンのファイル名の取得。:

« GridData に色つけてポン。 | トップページ | NewSceneOptions。 »