« 最近、「C4D 水 表現」で検索してこのブログへ… | トップページ | C4D C.O.F.F.E.E.メニュープラグインにダイアログを…01 »

C4D ユーザスクリプトでダイアログの使い方も大体把握できた事だし…

今回はC.O.F.F.E.E.Pluginの「メニュープラグインにダイアログを組み込む」の準備です。
メニュープラグインのフレームワークを把握している人は読み飛ばしてください。

ユーザスクリプトでダイアログの使い方の最低限の知識は、もう理解されたと思います。
http://villager-and-c4d.cocolog-nifty.com/blog/2009/08/c4d-247b.html
http://villager-and-c4d.cocolog-nifty.com/blog/2009/08/c4d--02-7a26.html
http://villager-and-c4d.cocolog-nifty.com/blog/2009/08/c4d--03-e989.html
http://villager-and-c4d.cocolog-nifty.com/blog/2009/08/c4d--04-e3f3.html

では、プラグイン(メニュープラグイン)でダイアログを使ってみよう。

で、メニュープラグイン自体はどうするのか?
それは、以前の記事を参考にして下さい…

自分でも、もうブログ中のどの記事なのか把握できない状態です。

では、基本的な事だけ…
メニュープラグインは、クラスを使います。
最低限の基本的なクラスの知識があれば、十分理解できると思います。
http://villager-and-c4d.cocolog-nifty.com/blog/2009/07/c4d-coffee-2b67.html
http://villager-and-c4d.cocolog-nifty.com/blog/2009/07/c4d-coffee-_02-.html
http://villager-and-c4d.cocolog-nifty.com/blog/2009/07/c4d-coffee-_03-.html

C4Dのメニュープラグインは、フォルダで整理できます。
C4DのPluginsフォルダにプラグイン毎にフォルダを作り格納します。

Dialog_05 Dialog_08

Pluginsフォルダの中にプラグイン毎のフォルダをまとめるフォルダを作ると、プラグインメニューにサブメニューができます。

Dialog_06 Dialog_07

ただし、まとめるフォルダに2個以上のプラグインが無ければサブメニューにはなりません。

C.O.F.F.E.E.プラグインのファイル拡張子は、「.cof」です。
ただし、.cofファイルは、プラグインに限ったファイルではありません。
C4Dは起動時に、所定の位置に置かれたcofファイルを読み込むそうです。

プラグインはC4D起動時に読み込まれ、問題が無ければ組み込まれます。
読み込まれた時にソースに誤りが有り、C.O.F.F.E.E.エラーになる場合は、組み込まれません。

プラグインは一度組み込まれると、C4Dの再起動なしで何度でも読み込み直し(プラグインの再読み込み)ができます。
C4D起動中にプラグインを変更した場合は、プラグインの再読み込みを実行しないと、変更されません。

C4D起動中に新たなプラグインをインストールした場合は、C4Dを再起動する必要があります。
プラグインの再読み込みは、一度読み込まれたプラグインのみにしか働きません。

この事から、C4DのC.O.F.F.E.E.プラグインをデバッグする時に、C4D起動時に確実に組み込まれれば、プラグインに変更を加えても、C4Dを再起動する事なく、何度でもプラグインを再読み込みし、デバッグを続けることができます。

では、最小限のプラグインを作成します。
最小限のプラグインをC4DのPluginsフォルダにインストールし、何事も無く組み込みができれば、C4Dを起動したまま開発ができます。(「変更して再読み込み」の繰り返し)
ユーザスクリプトと同じように変更を加えて試す事ができます。

/*
最小限のメニュープラグインの作成開始
エラーが出ます。
2009.08.09
*/


class test_plugin:MenuPlugin
{
  public:
    test_plugin();
}

test_plugin::test_plugin()
{
  super();
}



main()
{
  Register(test_plugin);
}

プラグインは、ユーザスクリプトとは違い、C4Dにプラグインが組み込まれるときに実行されます。
プラグインがメニュー等から実行された時では有りません。

main()関数には引数は有りません。
C4Dのプラグイン組み込み時に、MenuPluginクラスのサブクラスをRegister()でC4Dへ登録します。ただそれだけ…
クラス用の変数をnew()を使って用意する必要もありません。

ただし、このままPluginsフォルダにインストールしてもエラーがでます。

メニュープラグインとして必要な機能を登録するMenuPluginクラスのサブクラスにオーバーライドします。

では、上のコードに最低限必要な機能を追加しメニュープラグインの基本(フレームワーク)を作ります。
フレームワークが完成すれば、以後このフレームワークをコピーしC4Dに組み込ませC4Dを起動したまま開発をしていきます。
開発途中で、C4Dを終了する場合は、プラグインのソースを完全な状態にしておきます。
次回C4Dを起動した時に、確実に組み込ませる為です。
明らかにエラーを含んでいる場所は、エラーの箇所をコメント化しておくと良いかと…

では、メニュープラグインのフレームワークを作ります。

まずは、プラグインに必要なPluginIDです。
開発中なので、1000001~1000010を使います。

MenuPluginクラスのサブクラスからプラグインIDを返すメンバ関数GetID()を追加します。

test_plugin::GetID()
{
  return 1000001;
}

これは、メンバ関数の定義なので、クラスの定義にも追加してください。

組み込まれるとコマンドマネージャに現れます。組み込んだ時、確認してください。
この段階では組み込まないでください。まだエラーが出ます。

Dialog_01

次に必要なのは、メニューに表示される名前です。
GetName()メンバ関数で、名前を返します。

test_plugin::GetName()
{
  return "test plug";
}

組み込まれたときメニューに表示されます。確認してください。

Dialog_02

情報表示バーに表示するGetHelp()を追加します。

test_plugin::GetHelp()
{
  return "これはテストです。";
}

メニューやアイコンにマウスポインタを重ねると情報表示バーに表示されます。

Dialog_03

プラグインがメニュー等から呼ばれたときに実行する部分Execute()を追加します。
このメンバ関数は、BaseDocumentが引数として渡されます。
この、Execute()メンバ関数が、ユーザスクリプトのmain()関数に当たります。

test_plugin::Execute(doc)
{
  println("メニューから呼ばれると、実行します。");
}

このプラグインが組み込みが成功し、プラグインを実行するとコンソールに表示されます。

Dialog_04

念のため、クラスの定義を確認します。

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

これで、pluginsフォルダにインストールしても問題なく組み込まれメニューからも実行できます。

もし、インストールした場合は、組み込みが成功しているか、コマンドマネージャやプラグインメニュー、情報表示バー、コンソールを確認してください。

では、メニュープラグインのフレームワークのコードの全体をまとめておきます。

/*
最小限のメニュープラグインのフレームワーク
2009.08.09
*/


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

test_plugin::test_plugin()
{
  super();
}

test_plugin::GetID()
{
  return 1000001;
}

test_plugin::GetName()
{
  return "test plug";
}

test_plugin::GetHelp()
{
  return "これはテストです。";
}

test_plugin::Execute(doc)
{
  println("メニューから呼ばれると、実行します。");
}



main()
{
  Register(test_plugin);
}

このプラグインをインストールしコンソールにエラー表示が無いのに、プラグインメニューに「test plug」が表示され無い場合は、プラグインIDが他の開発中のIDと衝突している可能性があります。
IDを別のIDに変更してみてください。1000005とか…

これには、メニューの状態やプラグインアイコンの処理がありませんが、今回はダイアログなので組み込みません。

準備は終了です。

|

« 最近、「C4D 水 表現」で検索してこのブログへ… | トップページ | C4D C.O.F.F.E.E.メニュープラグインにダイアログを…01 »