« 友愛その1。 | トップページ | アエ~。 »

2010年7月 3日 (土)

友愛その2。

その1からの続き。
ボタンを押したときに何かの処理が実行されるようにします。


前回のコードにちょっと書き足し。

//    CustomProperty を SceneRoot に作る。Branch はオフ。 
//    名前は "hoge"。 作られた CustomPropety は oProp に代入される

var oProp = ActiveSceneRoot.AddProperty ( "CustomProperty",  false,  "hoge" );

//    oProp(さっき作った CustomProperty)に、パラメータを追加する
oProp.AddParameter2 ( "Icon",  siInt4,  1,  0,  10 );
oProp.AddParameter2 ( "Size",  siDouble,  1,  0.01,  100 );

//    PPGLayoutを作る
var oLayout = oProp.PPGLayout;

//    さっき作ったPPGLayout に、すでに作成してあるパラメータを登場させる
//    AddItem メソッドで、作成済みのパラメータ名、UI に登場させる時の名前を指定

oLayout.AddItem ( "Icon", "愛根" );
oLayout.AddItem ( "Size",  "砕図" );

//    ボタンを作るときは AddButton メソッドを使う
oLayout.AddButton ( "Set",  "切吐" );

//  言語を指定しないといけない
oLayout.Language = "JScript";

//  ロジック設定
oLayout.Logic = Set_OnClicked.toString( );

//  クリックされた時に実行される Function
function Set_OnClicked( )
{
    Logmessage ( "愛根 = " + PPG.Icon.value );
    Logmessage ( "砕図 = " + PPG.Size.value );
}

//  表示しておしまい。
InspectObj ( oProp );




赤字の部分が書き足された部分です。

「ボタンが押された」 「パラメータの値が変わった」 とかいうのを検出するためには Logic とかいうものを設定しないといけないようです。 実は俺もよくわかっておらず、丸暗記でやってるだけです。


まずは言語を明示しないといけないそうです。
oLayout.Language = "JScript";

こういうもんだと覚えてしまえばよろしい。


次にボタンの設定。
oLayout.Logic = Set_OnClicked.toString( );

この Set というのは、先に AddButton メソッドで
oLayout.AddButton( "Set",  "切吐" );

と指定しているので、それと一致した名前でなくてはいけません。

そして アンダーバー でつなぎ、 OnClicked と書きます。そして続けて .toString( ) と書きます。理屈はわかりません。こういうもんなんです。

そして、そのボタンが押された時に実際に呼び出される function を書きます。
function Set_OnClicked( )
{
    Logmessage ("愛根 = " + PPG.Icon.value);
    Logmessage ("砕図 = " + PPG.Size.value);
}

function の名前は、Logic の所で設定した名前と完全に一致していなくてはいけません。

function の { } の間に、やりたい処理を何でも書けば良いです。
今回の場合は、PPG 内の Icon パラメータの値と Size パラメータの値を単にログしているだけです。

ここで、
PPG.パラメータ名.value

という言い方が出来ます。
PPG はいわば自分自身を表します。 自分自身、つまりこのカスタムプロパティ内にある Icon という名前のパラメータの値 (Value)にアクセスしてるわけですね。

Ui_20
ボタンを押すと、ログされますた。
基本的には以上。




もうちょっとやりますか。では、Set_OnClicked( )ファンクションの部分を、以下のように書き換えてみましょう。

function Set_OnClicked( )
{
    var oNull = ActiveSceneRoot.AddNull( 'NullNull' );
    oNull.primary_icon.value = PPG.Icon.value;
    oNull.size.value = PPG.Size.value;
    InspectObj ( oNull );
    SelectObj ( oNull );
}


まず、シーンルートに AddNull の呪文を使って null を1つ取り出しています。カッコの中のオプションは null の名前です。そして結果として出てきた null は oNull に代入されます。

次に、null の primary_icon の値を、PPG の Icon で設定した値で上書きしています。
次に、null の size の値を、PPG の Size の値で上書きしています。

そして InspectObj コマンドでその null の PPG を表示し、
最後に SelectObj コマンドで null を選択状態にして終わりです。

つまり、アイコンの種類とサイズをあらかじめ決めてから null を取り出すというツールになりました。
Ui_21
なんの役にも立ちません。


ところで、function の中から別の function を呼び出すことはできるのでしょうか。
以下のように書き換えてみます。

oLayout.Language = "JScript";
oLayout.Logic = Set_OnClicked.toString( );

function Set_OnClicked( )
{
    var oNull = ActiveSceneRoot.AddNull ( 'NullNull' );
    oNull.primary_icon.value = PPG.Icon.value;
    oNull.size.value = PPG.Size.value;
    InspectObj ( oNull );
    SelectObj ( oNull );
    HogeHoge( );
}

function HogeHoge( )
{
    Logmessage ( "ほげほげ~" );
}


赤字が追加部分です。
最初の function の中で、最後に HogeHoge ファンクションを呼び出しています。
続く HogeHoge ファンクションでは、 ほげほげ~ とログするコマンドが書かれています。
つまり、PPG のボタンを押すと、ひと通り null の処理をやった後、最後に ほげほげ~ とログされるスクリプトになったはずです。

しかし実行してみると、
Ui_22
このようにエラーで止まってしまいます。 ほげほげ~ はログされません。

どうやら、HogeHoge ファンクションも、あからじめ Logic の所で設定しておかねばならないようです。 以下のように書き換えます。

oLayout.Language = "JScript";
oLayout.Logic = Set_OnClicked.toString( )
+ HogeHoge.toString( );

function Set_OnClicked( )
{
    var oNull = ActiveSceneRoot.AddNull ( 'NullNull' );
    oNull.primary_icon.value = PPG.Icon.value;
    oNull.size.value = PPG.Size.value;
    InspectObj ( oNull );
    SelectObj ( oNull );
    HogeHoge( );
}

function HogeHoge( )
{
    Logmessage ( "ほげほげ~" );
}


赤字が追加部分です。 Logic の行のところに、HogeHoge ファンクションも書いておきます。 + (プラス符号)でつなぎます。 toString メソッドを使っているので結果は文字列に変換され、そして文字列同士をつなぐのに + を使っている、という考え方なのでしょう。たぶん。

すると、
Ui_23
今度はエラーではなく、ちゃんと ほげほげ~ がログされました。

これ、こういうもんなんですかね? function は全部 Logic の所に書いておかなければいけないの? めんどくさいよね? 俺もよくわかってません。わかる人、教えて下さい。


ちなみに Self-Installing 形式のプラグインにすると、Logic の設定は要らないし、また、スコープって言うんですか、function の有効範囲というか? 違う? ともかく、どこに function を書いてもOKになるので、実にラクです。 この辺はまた別の機会に書くかもしれません。書かないかもしれません。知りません。

それと、この 「ボタン押されたら」 とか 「値が変わったら」 の部分って、スクリプト言語によってだいぶ書き方が違ったような気がします。 なので、JScript 以外では全く別の表記になると思うので、この記事は参考にならないと思います。

思えばその昔、VBScript でこれを書いていて、function を全部クォーテーションで囲まなければいけないとかなんとか、すんごく不便だったのでブチ切れて、それをきっかけに JScript に移行していったという経緯を思い出しました。これに関しては JScript の方が VBScript より 1024倍ラクです。 Python はどうなのでしょう?




次回は何しましょうか。
「ボタンが押されたら」 だけじゃなくて 「値が変わったら」 もやりましょうかね。
あとは、Icon パラメータが現在はスライダが付いた整数ですが、null の PPG みたいにドロップダウンメニューにしたいですよね。 あとは、ボタンの大きさでも変えてみるか。


そんな程度のことしかしません。



次回以降があれば、の話です。
わかりません。


.

|

« 友愛その1。 | トップページ | アエ~。 »

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: 友愛その2。:

« 友愛その1。 | トップページ | アエ~。 »