« ユーザスクリプトの始まり | トップページ | スクリプトマネージャの「メニューの状態」 »

実際にユーザスクリプトをチョロッと

それでは、チョロッとユーザスクリプトを打ってみる。
さて、ウィンドウメニューからスクリプトマネージャとコンソールを開きましょう。スクリプトマネージャで新規をして新しいスクリプトを作ります。名前は何でも良いのだ。あくまでもテストなので「main関数テスト」としました。COFFEEエクスプレッションもCOFFEEプラグインもmain関数がなければ実行されません。ついでにXPressoのCOFFEEノードも。では、ユーザスクリプトも?
実験してみよう。次のコードを入力します。

println("ok"); //コンソールに"ok"を表示

実行ボタンを押して実行すると、コンソールには、

ok

と表示されています。main関数無しで?もしや上から下に向かって一筋で打つのだろうか?新しい関数は作れないのか?
いきなり次のコードを打ってみる。

println(doc , op); //変数docとopをコンソールに表示

実行すると、コンソールには、

[Object-225A55D0][Object-225A55FC]

どうやら、メイン関数の中らしい。
docとopが使えるなら、選択されたオブジェクト1つに対しての効果ならGetActiveObject()を使わなくてもopが使えるし、GetActiveDocument()をしなくても現在のドキュメントが得られるということだね。複数選択されたオブジェクトに対してはGetActiveObject()は無理だけどね、GetFirstObject()とGetBit()とSearchNext()とwhile()の組み合わせだね。メイン関数以外の関数で引数で渡さなければ選択オブジェクトが1個でもGetActiveObject()等を使わなければいけないけどね。ま、具体的な実験は後々。
これで分かったことは、main関数だけで完結できるスクリプトは"main(doc , po){""}"を省力できるという事だね。

じゃあ新しい関数を定義するには?
次のコードを入力。

//2つの変数の足し算の関数
AddValue(a , b)
{
    return a + b; //2つの変数を足して、結果を返す
}

//メイン
main(doc , op)
{
    var x = 10 , y = 20;     //変数x,yの宣言と初期化
    println(AddValue(x , y)); //足し算関数にx,yを渡して結果をコンソールに表示
}

結果は

30

ここで分かったことは、新しい関数を定義するときは通常タイプするようにmain関数も定義する。main関数の引数doc , opはaa , bbでも問題なく動きます。ただ引数は使わなくても2個必要。いつも疑問に思うがdocはdocument。opは何だろう?opject?ありえない。operand(引数)?docも引数だけど…。どうでも良いか。
ユーザスクリプトはプラグインのメニュープラグインの部類になるんだろうね。main(doc , op)関数はMenuPluginクラスのExecute(doc , op)メンバ関数にあたるのかな。

ユーザスクリプトは既存のツールを実行することもできます。既存のツールの組み合わせで新しいツールを作る事もできます。スクリプトで既存のツールを実行させるには、BasicFunctionのCallCommand関数にコマンドIDを渡す。コマンドIDはウィンドウメニューのレイアウト/コマンドマネージャ。コマンドマネージャが開いたら適当にコマンドをクリックしてみよう。下の方に数字が表示される、これがコマンドID。
では、今後ユーザスクリプトの実験を始めるので、スクリプトマネージャとコンソールを開くスクリプトを作ってみよう。このツールはスクリプトを始める時に使うので、コンソールが開かれると既に表示されている内容を消去する事にします。
流れとコマンドIDは、

スクリプトマネージャを開く。1001084
コンソールを開く。12305
コンソールの中を消去する。13957


ではスクリプトマネージャで新規。名前を「スクリプトマネージャとコンソール」。
名前フィールドは「Japanese」で「スクリプトマネージャとコンソール」、
情報は「スクリプトマネージャとコンソールを表示」。
それで名前フィールドを「English」にして「ScriptManager & Console」、
情報を「It displays a console with the script manager.」。
これでインターフェイスが英語でも万事OK。でも英文自体はこれで良いのか?
メニューの状態はデフォルトのまま。
コードは次の通り。

/*
スクリプトマネージャとコンソールの表示

Copyright(c)2008/5/23 村人とC4D
*/

CallCommand(1001084); //スクリプトマネージャ
CallCommand(12305);   //コンソール
CallCommand(13957);   //コンソールの消去

main関数のみなので中身だけ。「たった3つのコマンドだけのユーザスクリプトに著作権を宣言するな。誰が作っても同じじゃないか!!」って言われそうですね。ごめんなさいね。
何のコードか分からなくなるのでコメントはなるべく入れるようにしないと後で思い出すまでコードの解析をしなければいけなくなるよ。ま、1行づつ入れる必要はないけどね。
これで保存して、実行ボタンを押す。既にスクリプトマネージャとコンソールは開いているけど、コンソールの中はクリアされたはず。エラーメッセージも出ていないはず。タイプミスをしていたらエラーメッセージが表示されます。問題なければスクリプトマネージャとコンソールを閉じてプラグインメニューのユーザスクリプト/スクリプトマネージャとコンソールを選択してください。見事2つとも開いているはず。自分の希望としては、開いているときに実行すると2とも閉じると良いのですが…無理ですね。
問題がなければレイアウトに組み込もう。いちいちメニューから選ぶのは面倒くさいし、スクリプトが増えてくると収集がつかなくなるのでパレットに並べよう。スクリプトマネージャの左上のアイコンをそのまま適当なパレットにドラッグ&ドロップ。ウィンドウメニュー/レイアウトの「初期レイアウトとして保存」もしくは「レイアウトを別名で保存...」。自分の場合は、

Palette

左からコンソール、ユーザスクリプト、ユーザスクリプトとコンソールとまとめました。
そういえばアイコンの話はしませんでしたね。ごめんね適当に作ってください。自分はシーンファイルをレンダリングしました。
今回は3個の実験と1個のツールを作ったけど、今後は実験のみになります。ごめんなさい具体的なツールを作るブログではありません。次回の更新は不明。今回の「ユーザスクリプトとコンソール」の.CSCファイルとアイコンのシーンファイルは、「ScriptManager_console.ZIP」です。
解凍してスクリプトマネージャのファイルメニュー/インポート してください。シーンファイルを開いてスクリプトマネージャのアイコンをレンダリングをしてください。と言ってもレンダリング済みですが…。

|

« ユーザスクリプトの始まり | トップページ | スクリプトマネージャの「メニューの状態」 »

コメント

この記事へのコメントは終了しました。