« このブログを読んでくれている方は? | トップページ | C4D C.O.F.F.E.E.Undo… »

C4D C.O.F.F.E.E.のグローバル変数

アプリケーション等のグローバル変数は、プログラムが起動して終了するまで、使える変数ですが…

C.O.F.F.E.E.は?

C.O.F.F.E.E.エクスプレッションから

/*
グローバル変数のテスト
C.O.F.F.E.E.エクスプレッション
2009.7.27
*/


var g_value = 10;

main(doc , op)
{
  println(g_value);
}

10
10
10

イベントが起こるたびに、コンソールに表示されますが、常に10なので、これでは寿命の確認はできません。

次のように変更。

/*
グローバル変数のテスト
C.O.F.F.E.E.エクスプレッション
2009.7.27
*/


var g_value;

main(doc , op)
{
  if(!g_value)g_value = 10;
  g_value++;
  println(g_value);
}

11
12
13

これですと、イベントが起こるたび加算されます。

で、寿命は何時から?
エクスプレッションエディタの実行/コンパイルボタンが押されてからや、シーンファイルが読み込まれた時から。

グローバル変数の宣言部が実行されるのは、実行/コンパイルボタンが押された時と、ファイルが読み込まれた時という事だろう。
イベントが起こればmain()関数が実行される、と…

で寿命が尽きるのはシーンファイルが、閉じられるまで。
実行/コンパイルボタンが押されるまでも、そうだろうが…

ドキュメントが非アクティブになっても存在はしているものの、エベントを受けないので加算はされません。

これは、XPressoのC.O.F.F.E.E.ノードでも同じです。

/*
グローバル変数のテスト
C.O.F.F.E.E.ノード
2009.7.27
*/


var g_value;

main()
{
  if(!g_value)g_value = 10;
  g_value++;
  println(g_value);
}

11
12
13

C.O.F.F.E.E.ノードは、実行/コンパイルの実行もそうですが、打ち終わって最初のイベントからもです。
実行/コンパイルを実行しなくても、エベントが起こると自動的に開始されます。それと、シーンファイルが読み込まれたときから。
終了は、同じくシーンファイルが閉じるまで。

ユーザスクリプトだと…

/*
グローバル変数のテスト
ユーザスクリプト
2009.7.27
*/


var g_value;

main(doc , op)
{
  if(!g_value)g_value = 10;
  g_value++;
  println(g_value);
}

11
11
11

実行ボタンを押しても、レイアウト上のアイコン、メニューから実行しても常に11で変化しません。
ユーザスクリプトの場合は、ユーザスクリプトが実行されている間のみの寿命なのです。
スクリプトが実行されるたび、グローバル変数の宣言部が実行されるのです。

残念ながらC4D起動中、ずっと存在しているわけではないのです。

では、メニュープラグインはどうだろう?

テストメニュープラグイン「test.ZIP」です。

/*
グローバル変数のテスト
メニュープラグイン
2009.7.27

これは、ユーザスクリプトではありません。
テキストエディタで保存して、拡張子をcofに変更してください。
C4DのPluginフォルダへ。
*/


var PluginID = 1000001;
var g_value;

class DummyMenuPlugin : MenuPlugin
{
  public:
  DummyMenuPlugin();
  GetID();
  GetName();
  GetHelp();
  GetState();
  Execute(doc);
}

DummyMenuPlugin::DummyMenuPlugin(){super();}
DummyMenuPlugin::GetID(){return PluginID;}
DummyMenuPlugin::GetName(){return "dummy01";}
DummyMenuPlugin::GetHelp(){return "dummy01";}
DummyMenuPlugin::GetState(){return CMD_ENABLED;}
DummyMenuPlugin::Execute(doc)
{
  g_value++;
  println(g_value);
  return
;
}


main()
{
  if(!g_value)g_value = 10;

  Register(DummyMenuPlugin);
}

11
12
13

プラグインが実行されるたびに、数値が増えていきます。
プラグインの場合は、C4Dの起動時に組み込まれた時から、C4Dが終了するまで。
ドキュメントには関係ありません。

ユーザスクリプトのグローバル変数の寿命が一番短く…
プラグインのグローバル変数の寿命が一番長いと言う事です。

|

« このブログを読んでくれている方は? | トップページ | C4D C.O.F.F.E.E.Undo… »