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



拍手する

0 件のコメント:

コメントを投稿