ラベル JScript の投稿を表示しています。 すべての投稿を表示
ラベル JScript の投稿を表示しています。 すべての投稿を表示

2009年4月29日水曜日

自動インストールプラグインバージョン更新メッセージ表示

- 追記 -
えぇっと・・・この記事間違ってたようです。
改めて職場で実験したら見事にXSIが立ち上がるたびにポップアップウインドウが表示されてしまいました・・・
むぅ・・・やはり外部にファイルを置くしかないのか・・・。orz


最近仕事でバリバリと自動インストールプラグインを作成しております。
お陰でだいぶ慣れてきました。
半年にくらべてかなり上達したんじゃぁないだろうか??ヽ(´ー`)ノ

半年前に作ったプラグインの中身なんて見た日にゃ、目も開けられない状態なのです。w|;゚ロ゚|w ヌォオオオオ!!
つい最近も半年ほど前に作ったプラグインの修正要望が来たついでに、
良くしようと思ったらフルスクラッチになってしまったという…

それはそうと、プラグインを大量に作るようになって、更新の際に関係者に告知をするのが面倒になってきました。
告知時に関係者が全員いないこともあるわけで…。
なので、ここはプラグインが更新されたら自動的にポップアップウインドウを出して告知しようと思いました。

今まで職場で使われてきた方法は

  1. バージョン情報を別ファイルに記録
  2. プラグイン更新時に別ファイル内のバージョンと見比べて更新されているか判断
  3. 更新されていたら告知

でした。
でもそれってスマートじゃない!!
別ファイルだったら消されちゃった日にゃ泣くしかないじゃん!!
…と思ったので別手口を模索。

プラグインの更新を行うコマンド Application.UpdatePlugins(); ってのがあるんですが、
これって更新されたかどうかスクリプトログには出力されるのに、なんにも返してくれないんです。
使えねぇやつめ…。ヽ( ・∀・)ノ┌┛ガッΣ(ノ`Д´)ノ

そこで XSILoadPluginコールバックに注目。
XSILoadPluginコールバックはプラグインがロードされたら呼ばれる関数です。
なのでここでポップアップウインドウ出せばいいのでは!!
ということで試してみました。


////////////////////////////////////////////////////////////////////////
function XSILoadPlugin( in_reg )
{
in_reg.Author = "mochio";
in_reg.Name = "hogehoge";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;

//コマンド登録
in_reg.RegisterCommand(hogehoge,hogehoge);
var msg = "\n" +
"■更新情報■\n"+
"いろいろと新しい昨日盛り込んでみました。\n" +
"詳しくはヘルプドキュメントをご覧下さい。";

XSIUIToolkit.MsgBox("――― Plugin " + in_reg.Name + "が更新されました。――――\n" + msg,siMsgOkOnly,"更新情報");

return true;
}
////////////////////////////////////////////////////////////////////////


  1.  プラグインファイルを更新
  2.  XSIでプラグインの更新をポチっとな
  3.  ポップアップウインドウが表示される。
  4.  もう一回XSIでプラグインの更新をポチっとな。
  5.  ポップアップウインドウは表示されず。

おぉ!!これいいのでは!?
しかし…
  1.  XSIを立ち上げる
  2.  かならずポップアップウインドウが表示される。∑ヾ( ̄0 ̄;ノ オーット!
という罠が…。
というのもXSIを立ち上げたときにもすべてのプラグインがロードされてるからですね。
そりゃそうか。ε=( ̄。 ̄;A フゥ…

まぁいっか~と放置して数日。
また気になり始めたので再度挑戦。

今度はXSILoadPluginコールバック内で、バージョン等を記述している点に注目。
ってことはその記述よりも前にバージョンを取得して、後に再度取得すればバージョンの比較ができんじゃねぇだろうか??
ということで試してみたのがρ( ̄∇ ̄o) コレ

////////////////////////////////////////////////////////////////////////
function XSILoadPlugin( in_reg )
{
//旧プラグインバージョンの確認(文字列なのはわざとよ~)
var Old_Plugin_Version = in_reg.Major + "." + in_reg.Minor;

in_reg.Author = "
mochio";
in_reg.Name = "hogehoge";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;

//新プラグインバージョンの確認
var New_Plugin_Version = in_reg.Major + "." + in_reg.Minor;

//コマンド登録
in_reg.RegisterCommand(hogehoge,hogehoge);

if(Old_Plugin_Version != New_Plugin_Version){
var msg = "\n" +
"■バージョン情報■\n"+
Old_Plugin_Version + " >> "+ New_Plugin_Version + " \n\n" +
"■更新情報■\n"+
"いろいろと新しい昨日盛り込んでみました。\n" +
"詳しくはヘルプドキュメントをご覧下さい。";

XSIUIToolkit.MsgBox("――― Plugin " + in_reg.Name + "が更新されました。――――\n" + msg,siMsgOkOnly,"更新情報");

}

return true;
}
////////////////////////////////////////////////////////////////////////


こんどこそ出来た~~!!d(>_< )Good!!
これで更新情報を告知したいときはバージョン情報を書き換えればOKだわ~~!
一応個人的要件は満たしてるから満足。

…でももっと簡単な方法あったりします??
だれか知ってたら教えて下さいーー (;^_^A アセアセ・・・



拍手する

2009年1月19日月曜日

さらにタンジェントくん改造中

どうも。

まだタンジェントくん改造してます。
終わったと思ってたのに…。
なんかいろいろとやろうと思うとほんとに終わらないですねー。
今回は内部的なところをイジっておりました。
今後のバージョンアップを見据えてカスタムプリファレンス内にバージョン情報を持たせてみたりしました。
前回の記事に書いたカスタムプリファレンスを消去するには\Data\Preferencesディレクトリにある
関連したPresetファイルを削除するのが唯一の方法という件ですが、
どうしてもそれを手動でやるのが許せなかったので、バージョンアップしたら自動的に作り直されるようにしました。ヾ(*´∀`*)ノキャッキャ

手法は簡単でした。
まず、既存のカスタムプリファレンス内に保持しているバージョンと現在のプラグインバージョンを比較
バージョンが古ければカスタムプリファレンスを破棄、新しいカスタムプリファレンスを作る。
です。

最初はユーザーファイルの中にあるPresetファイルを直接削除していたんですが、その必要はないようでした。
かといって、新しいものを作るだけでは重複してしまうので、XSI内での消去は必要のようです。

次に、困ったのは新しいカスタムプリファレンスを作った際にPPGの見た目が更新されない点に苦労させられました。
内容的には更新されているようなのですが、レイアウトが更新されないのです。
これは前々から疑問だったんです。
まぁそもそもあまりレイアウトを作りかえることなんてないでしょうから普段は問題ないんでしょうけど…。

カスタムプリファレンスは Defineコールバック や DefineLayoutコールバック を使っています。
SDKでDefineコールバックの説明は以下のようになっています。

**********************************************************************
プロパティページ上のコントロールの基礎になるパラメータもすべて含め、プロパティセットを定義します。
プロパティのインスタンスを作成するときに発生します
**********************************************************************

ということなので、カスタムプロパティを作った際に必ず実行されるので、XSI内で何度作っても問題ないです。
GJです。期待どおりです。

つぎにDefineLayoutコールバックですが、この説明は以下のようになっています。

**********************************************************************
プロパティページに表示されるコントロールのレイアウトを定義します。
**********************************************************************

これは問題ありません。
これだけならば作り直した時点で新しいレイアウトは変わっているはずです。
変わりません…。(#^ω^)ビキビキ
どうなっとんじゃ!(#゚Д゚)ゴルァ!!
(XSIを立ち上げなおすと更新されています。)
ということでさらに詳しく見ると以下の文章が。

**********************************************************************
XSIセッションでDefineコールバックが初めて実行された直後に発生します。
**********************************************************************

ということは…XSIを立ち上げてから最初にカスタムプリファレンス(パラメータ)を作った時にしか実行されないってこと??
意味あんの??
Defineコールバックとセットで呼び出してくれた方が使い勝手よくない??
ねぇ違うの??XSIさん?( ゚Д゚)∂゛チョットコイヤ
なんて言っていてもラチがあかないので、さらに見てみると以下の記述が。

**********************************************************************
また、PPG.Refreshメソッドを使用すると、このコールバックを強制的に発生させることができます。
**********************************************************************

んん?
PPG.Refreshメソッドって今回の場合使えなくない?
Defineコールバック や DefineLayoutコールバック を使わないカスタムプロパティならよく使ってるけど…。
たぶん方法があるんでしょう。
でもわかりません。
知りません。
誰か教えて…。

ということで違う方法を探してみますか…。
見つけました。
XSIUtils.Reload()メソッド君です。
PPG.Refreshメソッドとあまり変わらないようです。
カスタムプロパティをインスペクトする前に実行する必要があるようですねー。
注意としてはそのくらいかな?
ということで具体的には

var hogehoge = ActiveSceneRoot.AddProperty( OptionName );
XSIUtils.Reload(hogehoge);
InspectObj(hogehoge);

こんな感じでしょうか。
う~ん、なんとか解決…かなぁ? +(0゚・∀・) + テカテカ +

あと、カスタムパラメータ―を作りなおした際に、バージョン情報用のパラメータにも新しい数値を
初期値としてセットしているはずなんですが、これも更新されないようでした。
カスタムプリファレンスだからかな~~??
実験してないから分かんないですが…。
なので作ったあとに自分でセットしなおすという手間が発生しました。
その値セットの際になぜか値がバグるという不具合も…。
これはなぜだかはわかりませんでした…。
分かんないこと多いです。ホント…。orz

そうそう説明ページもまだ作ってます。
どうしてもある程度キチンと作ろうとしてしまいまうんですよー。
たぶん性分でしょう。うん。
しょうがない…じっくり作りますか。
まぁ待ってる人もいないだろうし…。
早くしやがれ(#゚Д゚)ゴルァ!!って方もしもいらっしゃったらコメントくださいませ。
では~。

追記:一応Ver2.5を公開しました。
以下のページよりDLしてください。

http://mochi-mochi-web.hp.infoseek.co.jp/

今回からZIP形式にしときました。
使い方なんかも中に書いてありますので。m(_ _)m



拍手する

2009年1月16日金曜日

タンジェントくん改造中

どうも。
ただいまの時間、午前4時半です。
明日会社なのに、こんな時間までタンジェントくん改造してます。
完全にプラグイン開発魂に火がついております。
バカです。
社会人失格です。ヽ(*´∀`)ノ キャッホーイ!!

でもようやくできました。
タンジェントくんVer2.5です。
改造できただけで、まだ説明ページとか作れてないので、公開はまた後日ということで。

Ver1.0を公開してからいろいろとご意見や要望をいただいたので、機能拡張をしました。

まず、基準フレームの指定方法の変更です。
Ver1.0では自分でコピーするフレームを指定していましたが、Ver2.5では以下のようになります。

・junkiさまよりご提案いただいたフレーム指定ではなくFカーブからマスターキーとスレイブキーを割りだしタンジェントをコピーするという方法
・PlayControlのインとアウトからキーを参照する方法

の2種類となりました。(これはVer2.0からです。)

次に、各種設定機能が加わりました。

・PlayControl参照の場合、キー検索の許容範囲
・マスターキーの値をスレイブキーにコピーするかどうか
・キーが見つからなかった場合、新たにキーを追加するかどうか

の3つの設定を行えるようにしました。
この設定はjunkiさまの神プラグイン『はいカラさん』を参考とさせていただき、
カスタムプリファレンスに登録、XSIを再起動しても設定が保持されるようにしました。

ご存じの方も多いかと思いますが、上記『はいカラさん』、ホントに(×100)神プラグインです。
リギングの際などないと死にます。
その他『ぬるぬる』などなど、多数のないと発狂して死んでしまうプラグインの開発をされていて、ホント尊敬します。
すごいです。
恩恵を受けている方は数知れずでしょう。
ビールウェアなのでjunkiさまはビールの海の上で暮していけますね。絶対。
自分もそうなれたらいいなー、という夢を見つつ頑張ります。はい。

さてさて、今回初挑戦のカスタムプリファレンスですが、結構苦労させられました。
それは自分で作ったカスタムプロパティをカスタムプリファレンスにインストールした後、『あ、レイアウトが変だわ。コード間違えてた!』となった時に起こりました。
カスタムプロパティを作るプラグインを修正して、再度インストールしなおしてもレイアウトが更新されやがらねぇ!!
何度やっても何度やっても…!!!
挙句の果てには自分の手で消去後にXSIを再起動しても復活してやがるのです。
キィィィィィーーーーーーーー!!!
と発狂後、SDKを読み直してみました。

ありましたよ!!
原因判明!!

*********** XSI SDKより抜粋 ************************************************

また、CustomPropertyオブジェクトを作成すること、およびInstallCustomPreferencesを呼び出すことによってもカスタム設定は作成できます。
このようなカスタム設定を削除す唯一の方法は、\Data\Preferencesディレクトリにある関連したPresetファイルを削除することです。

*****************************************************************************

消してやりました。
消えました。
せいせいしました。( `д´) ケッ!
もう帰ってくんな(#゚Д゚)ゴルァ!!

で、作りなおしたらようやくレイアウトが思い通りになりました
…が、値がデフォルトじゃねぇじゃねーか!!(`Д´)ゴゴゴ…━(ノдヽ)━( 乂 )━━━ヽ(゚Д゚)ノゴルァァア!!
またSDKを読み直してみました。
発見!!

*********** さらにXSI SDKより抜粋 ************************************************

ユーザが設定の値を変更する場合、新しい値は、デフォルトの.xsiprefファイルに保管されます。

*****************************************************************************

こいつの中身直接消してやりましたわ!!☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ
…なかなかの強敵だった…orz

カスタムプリファレンスってこんな風にして保持してたんですねぇー。
大変勉強になりました。
あぁーーー楽しかった。

というのが言いたかっただけです。はい。(∀`*ゞ)エヘヘ
タンジェントくんVer2.5は説明のページができたらまた後日ご紹介しますのでー。
ではーー(´∀`*)ノシ バイバイ


拍手する

2009年1月12日月曜日

なんとなくLogicが嫌いです。

どうもです。
前回のタンジェントくんですが、なんとソッコーXSI道場さまで紹介していただけました。
投稿して寝て起きたらもう載ってました。
感無量っす+(0゚・∀・) + テカテカ +
アリガトウゴザイマス!!

それにしても前回投稿時間を間違ったような…。
知ってはいましたが、XSI道場さま主催の
懇親会の日だったのです。
(行きたかった…。今度は是非昼からにしてください~!)
朝起きると参加者のみなさまのお疲れ様記事の洪水によって
XSI道場さまの最新の記事一覧から押し流されておりました…。
紹介していただかなければ今頃下水処理施設に到達して跡形もなく処理されていたでしょう…。

それにしても前回の記事、拍手もたくさん頂けたのですが、どのくらいの方がDLしてくださったんでしょうか…。
使って下さった方もいるのかな~~??
ごみ箱に直行してなければいいなぁ~。
などなどやっぱりそのあたり興味あります。

そういえば先のことも考えてプラグインをまとめたページも作らなきゃですね。
なので、タンジェントくんの置場は変わってしまうかもです。
もちろんそのときはリンク先も編集しときますが。

さてさて本題ですが、XSIのスクリプトでPPGを表示するときなどに出てくる
Logicってなぜかあんまり好きになれません。
Logicで宣言してやった関数しかPPG内から利用できないないし、グローバル変数とか読み取ってくれないし…。
めんどくさいんです。(´;ω;`)ウッ…

かといって_Defineとかは、カスタムプロパティの実体が残ってしまうし…。
まぁ消せばいいんですが、右上の「×」とかでPPG閉じられたりしたら消せないし…。
なんというかシーンにカスタムパラメータを残す方が適しているような気がします。
まぁ知識不足なだけでもっとスマートな方法があったりするんだとおもうんですが…。

ちなみに今日PPG内のパラメータを変数で指定して取得するのに手間取ってしまいました。
簡略化すると

PPG.hogehoge.value

となるんですが、今回このhogehogeの部分を変数にしたかったのです。
正解は、

PPG.Inspected(0).Parameters("hogehoge").value

だったのですね。(゚∀゚)キタコレ!!
これならばhogehogeは文字列なので変数で置き換えが可能ですね~。
当初 PPG.Parameters("hogehoge").value とかだと思って『あれれ~?』と困ってました。
あと関係ないですが最近の個人的な流行りは

var oHoge1 = Dictionary.getobject("hogehoge",false);
var oHoge2 = oHoge1 .NestedObjects();

の2つです。
1つ目は指定したオブジェクトを取得するんですが、falseを指定してやれば指定のオブジェクトがない場合
nullを返すのでエラー処理にも使えますし、
2つ目はオブジェクトにどんなプロパティがあるのかが取得できるってのが便利です。
(そこっ!!SDK見ればいいとか言わない!)
ついでにoHoge1 .NestedObjects("hogehoge").value;と直接プロパティ名を指定してやることもできますしね。
こっちの方が便利なこともありました。たぶん。

みなさんもスクリプトで好きなコマンドとか嫌いなコマンドとかありそうですよねー。
…自分だけかな(;^ω^)


拍手する

2009年1月11日日曜日

MOCHI-MOCHIプラグイン第一弾:タンジェントくん

どうもです。
やはり仕事がはじまるとこまめに更新は難しくなりますね…。
でも頑張ります!!!

さて、今回ですがようやくオリジナルプラグインの公開を致します。
というのも、このMOCHI-MOCHIプラグインプロジェクト、
『XSI道場さんのTOPトピックスに紹介されてるのいいなー、うらやまCcccc-!
自分も紹介されたいーーー!! ウワァァ-----。゚(゚´Д`゚)゚。-----ン!!!!』
…という不純な動機の下、始まった経緯が…


冗談です。
この当初からこのブログの目的の一つでしたからね。
ちゃんとやらないと。
ということで記念すべき第一弾登場です。
その名も

タンジェントくん(右クリックで保存してください)
090119追記:場所が変わりました。以下の場所に飛んでDLしてください。
http://mochi-mochi-web.hp.infoseek.co.jp/

です。

……名前なんてこんなもんです。orz

で、肝心のなにをするプラグインかというと、簡単に言うと『ループモーション作成支援』です。
元ネタとなったものがSOFTIMAGE Japanのユーザ事例:株式会社スクウェア・エニックス「ラスト レムナント」内にありますので、ちと抜粋おば。

*****SOFTIMAGE Japanより抜粋************************************
-どんなツールを作成されたのでしょうか?

たとえば、F-curveの繰り返しを実施するときにキーの最初と最後のタンジェントの振る舞いが問題になるのですが、それを自動的に修正するツールや、カーブにフィルタをかける際に使うオプションの拡張などを行いました。

****************************************************************

これです。
『うぉーこれちょーべんりー!』ってことでこの発想をパクりました。
えぇ。パクりました。

いろいろな場面で多用されるループモーションですが、
そのループの開始フレームと終了フレームのFカーブキーの値と角度をキチンとあわせてあげないときれいなループにはなりません。
でもロケーターが多くなってきて、こといちいち手でやってると…やってられっか( ゚Д゚)ゴルァ!!となります。
そこでタンジェントくんの登場というわけです。はい。

インストール方法は…。

1.こちらのしてC:\users\<ユーザ名>\Softimage\XSI_6.0(バージョンにより可変)\Application\Plugins内に保存
090119追記:バージョン変更により、使い方など下記から多少変更されています。

以上です。
XSIを立ち上げると以下のような感じで項目が追加されておれば完璧です。




さてさて、使い方ですが手順は以下の通りです。

1.任意のオブジェクトを選択する。(複数選択可)
2.カレントフレームをコピー元したいフレーム(マスターフレーム)に合わせる。
3.タイムスライダー上で中クリック(ドラッグ)をしてコピー先にしたいフレーム(スレイブフレーム)に緑色のバーを合わせる。
4.Animation>タンジェントくん:Fカーブキーのタンジェントを統一 を選ぶ。

で、完了です。
オブジェクトに移動・回転・スケールのFカーブが存在していたらそれぞれループ波形になっているはずです。



ちなみに、マスター・スレイブフレームともにキーが存在していなくても問題ありません。
勝手に作ります。
(まぁ普通はそんな使い方しないと思うけど)
バージョン1ですので、いろいろと注意点が…。(バージョン更新されるかどうかもわからないけど。

1つ目はキーフレームがきっかり整数値にないといけません。
小数点が入っていると無駄にキーが打たれてしまうことになります。

2つめは、マスターフレームからスレイブフレームへタンジェントの振る舞いがそのままコピーされてしまうので
マスターフレームのスロープが片方が極端に短いとかだと、ループがいい感じになってくれません。
逆に長すぎるとイビツなFカーブとなってしまいます。
まぁその時は手動でスロープ調整やってください。

このあたりの問題はそのうち解決させようと思っております。f(^_^; スンマセン


ちなみにXSI6.0でプラグインを作成しましたので、そのほかのバージョンでは動作確認を行っておりません。
なにか問題がおきましたら誰か教えてくださいませ。


う~ん…それにしても公開したはいいが、誰か使ってくれるんだろうか
…っていうかその前にダウンロードしてくれるんだろうか?
ダウンロードしてくださった方の中で使ってみた感想とか教えて頂けると幸いです。はい。


拍手する

2008年12月30日火曜日

XSIバッチモード

ブログ作ったからにはなにかやらねば!
ということで、なんかやります。

ゲーム作っていると(ゲームじゃなくてもそうだけど)同じことをする場面が多くなります。
何百回も何千回もいちいち手で同じことなんてやってられません。
それに一度にリグの入れ替えとか発生した日にゃ家帰って寝ます。( ▼Д▼)y─┛~~
そうなるとスクリプト様の出番なわけです。
スクリプト様万能です!スーパーマンです。 o(o|o)/ウルトラマン
仕事中にグデ~~~っとしてても代わりに仕事してくれます。
まぁ代わりに自分が白い目でみられるという副作用がありますが…。

が、それでも手持無沙汰で待ち切れずXSIに「いちいちプログレスバーとかだしてんじゃねーぞ遅くなんだろ(#゚Д゚)ゴラァ」とキレることが多々あるわけです。
エクセルのVBAにだって画面更新停止して処理速度向上させる機能があるのに天下のXSI様にはないんですかあぁん?
…ということでヘルプあさってたら見つけました『バッチモード』!!!
いや~あるんじゃないですか~それを早く言って下さいよ~。(ぇ?みんな知ってる?


ということで早速簡単なスクリプトで試してみたんで書いてみます。

スクリプトは超簡素なものです。
1.シーンにヌルを作ってアイコンを環にする。
2.Cドライブ直下Test_DBというデータベースにbat_test.scnという名前でシーンを保存する。
だけです。

***** test.js ******************************************************
var oRoot = ActiveProject.ActiveScene.Root;
var oNull = oRoot.AddNull("hogehoge");
oNull.primary_icon.value = 2;
SaveSceneAs("C:\\Test_DB\\Scenes\\bat_test.scn", null );
********************************************************************

ヌルのアイコンを変える意味はまったくありません。
やりたかっただけです。(A;´・ω・)アセアセ
とにかく、上記のスクリプトをCドライブ直下にtest.jsとして保存しときます。

で、次はコマンドプロンプトを立ち上げるわけですが…。
とりあえずヘルプによるとこんな感じ。

********************************************************************
Windowsの[スタート]メニューから[すべてのプログラム] > [SOFTIMAGE Products] > [SOFTIMAGE|XSI 5.0] > [Command Prompt]を選択します。
myscript.vbsという名前の単純なVBScriptファイルを実行するには、コマンドプロンプトに次の構文を入力します。
xsi -script "\My Files\myscript.vbs"
********************************************************************

…いちいちそこまでもぐってコマンドプロンプト立ち上げるのがめんどいんじゃ(#゚Д゚)ゴラァ
ってかヘルプも5.0から書き直してねぇだろ(#゚Д゚)ゴラァ
ってことでバッチファイルを作ります。
あと、実行後はコマンドプロンプトが自動的に閉じるようにしたいですね~。
ということで…( ̄ω ̄;)エートォ...
書けました!こんな感じです!!たぶん。

***** xsi.bat ******************************************************
CD C:\Softimage\XSI_6.0\Application\bin
rem スクリプトを実行 実行後ウインドウを閉じる
xsi -continue -script "c:\test.js"
********************************************************************

バッチファイルあんまり作った事ないんであれですが…。

1行目は C:\Softimage\XSI_6.0\Application\bin に移動しなさいって意味ですね。(XSI_6.0という部分は環境によってかわります。)
2行目はコメントです。バッチファイル起動時には無視されちゃいます。
3行目はXSIを立ち上げるコマンドです。 -continue は実行後画面を閉じる。 -script "c:\test.js" はc:\test.jsを実行しなさいって意味ですねー。

これをデスクトップとか適当な場所にxsi.batという名前で保存します。
あとはxsi.batをダブルクリックするだけで動きます!!たぶん。
下のような画面が表示されてシーンができあがります。
う~~~んらくちん!!v( ̄∇ ̄)v


あ、でも今のバッチファイルではスクリプトが以下のようにかわった場合はエラーで怒られちゃうようです。

***** test.js ******************************************************
function CreateNull( myName )
{
var oRoot = ActiveProject.ActiveScene.Root;
var oNull = oRoot.AddNull(myName);
oNull.primary_icon.value = 2;
SaveSceneAs("C:\\Test_DB\\Scenes\\" + myName + ".scn", null );
}
********************************************************************

ヌルの名前とシーン名が可変する場合ですねー。
そういう場合は関数名と引数を渡してやるときちんと動いてくれるようです。
こんなかんじですねー。

***** xsi.bat ******************************************************
CD C:\Softimage\XSI_6.0\Application\bin
rem スクリプトを実行 実行後ウインドウを閉じる
xsi -script "c:\test.js" -main CreateNull -args -myName hogehoge
********************************************************************

うん。
ちゃんと動いてくれました。
バッチモード、これは単純作業を多くこなす割と時間がかかるスクリプトの場合便利かもしれませんねー。
XSI様素敵です!可能性を感じちゃいます。
あぁ~でもバッチモードだからXSIすら立ち上げてないって周りにさらに白い目でみられるなぁ~~。
それは困る…。(-_-;ウーン
それとバッチレンダリングとかもあるようですね。(知らんかった…
これは映像関係の方は日ごろから使っているのでしょうか。
自分の場合はゲームなのであまり関わらないところではあるんですが…。

そういえば肝心の実行速度はというと…。
よう分かりません。ψ(`∇´)ψケケケケケ
簡単なスクリプトでしか試してませんから、もっと複雑なやつでやると真価を発揮してくれるんでしょうか。
あと、XSIがヽ(*´▽)ノオテアゲー♪って強制終了することも少なくなるんでしょうか…。
実際にやってみたらまた報告します。
まぁ単純なスクリプトでもXSIを立ち上げて~から始めると考えるとかなり違いますけどね。

今日はこんなとこでしょうか。
ブログってなかなか楽しい…
たぶん2008年はこれが最初で最後かな?
できれば明日も書きたいなー。
それにしてもいろいろ書いてると否応なしに文章長くなりますね。
こんなの誰か最後まで読んでくれるんだろうか…
読んで下さった方ありがとうございます。(いたらだけど)
それと1mmでもお役にたてれば幸いです。(A;´・ω・)アセアセ

あぁ、そういえば昨日ブログの目的は『自分の成長のため』って書きましたが、
それに加えて『あわよくば、どなたかのお役にたてることを願って』ですね。
それでは~(_´Д`)ノ~~サヨーナラー


拍手する