« ユーザスクリプトの作成に苦痛を感じなくなったら、Plugin作ってみようよ! | トップページ | C4DにMenuPluginフレームワーク「test_plug」を組み込んだら… »

自分が使うMenuPluginのフレームワークを作ろう!!

最初から、いちいち組むのは面倒なので、ベースになる枠組み(フレームワーク)を作っておこう。

C.O.F.F.E.E.SDKにフレームワークが収録されているので、各々で使いやすいように修正しておこう。

/*
test_plug MenuPlugin
2009.2.5
*/


// グローバル変数 ------------------------------------------
var Icon_Bitmap;


//関数、クラス ---------------------------------------------

class TestPlugMenuPlugin : MenuPlugin
{
  public:
  TestPlugMenuPlugin();

  GetID();
  GetName();
  GetHelp();

  GetIcon();
  GetState();
  Execute(doc);


//  RestoreLayout(secret);
}


TestPlugMenuPlugin::TestPlugMenuPlugin() {
  //親コンストラクタを呼びなさい。
  super();
  //ローカル変数などの初期化
}


TestPlugMenuPlugin::GetID() {return 1000006;}
//http://www.plugincafe.comからplugin idを取得してください。
//これはテストなので、1000001~1000010までが試しに使えます。



TestPlugMenuPlugin::GetName() {return "test plug";}
//メニューに表示するテキストを返します。


TestPlugMenuPlugin::GetHelp() {return "これはテストです。";}
//情報表示バーに表示するテキストを返します。


TestPlugMenuPlugin::GetIcon() {return Icon_Bitmap;}
//メニューのアイコンを返します。


TestPlugMenuPlugin::GetState() {return CMD_ENABLED;}
//メニュー項目の状態をコントロールするために、CMD_ENABLED、
//および/またはCMD_CHECKEDのコンビネーションを戻しなさい。
//使用させないときはFALSEを戻します。



TestPlugMenuPlugin::Execute(doc) {
  //メニュー項目が選ばれる時に呼ばれる
  println("test plugを実行しましたね…");
}

/*モードレスダイアログが必要ならば、ここでそれを再び開き、d->RestoreLayout(secret)を呼びなさい。
TestPlugMenuPlugin::RestoreLayout(secret) {
}
*/



// Main -------------------------------------------------

main()//C4D起動時のPluginを組み込む時に実行されます。
{

  //アイコンの読み込み
  Icon_Bitmap = new(BaseBitmap , 1 , 1);
  var f_pass = GeGetRootFilename();
  f_pass->RemoveLast();
  f_pass->AddLast("test_plug.tif");
  Icon_Bitmap->Load(f_pass);
 
  //プラグインをC4Dに組み込む
  Register(TestPlugMenuPlugin);
}

こんな具合だね。
SDKのフレームワークにはアイコンの読み込みが含まれていないので、これでファイル名を変えるだけで使えます。

では、上から説明。
アイコン用ビットマップ変数をグローバル変数で用意しました。

var Icon_Bitmap;

どうなんだろうか?いつも思うが、グローバルにする必要があるだろうか?
main()でHDDから読み込んでグローバル変数にしてGetIcon()でグローバルなアイコンをもらうわけだ。
GetIcon()でアイコンが取得できれば良いのだから、

TestPlugMenuPlugin::GetIcon()
{
  var Icon_Bitmap = new(BaseBitmap , 1 , 1);
  var f_pass = GeGetRootFilename();
  f_pass->RemoveLast();
  f_pass->AddLast("test_plug.tif");
  Icon_Bitmap->Load(f_pass);
  return Icon_Bitmap;
}

メンバ関数GetIcon()の中でアイコンファイルを読み込んで返してくれれば、グローバルにする必要がないんだけどね。
これだと、GetIcon()が呼ばれるたびHDDからファイルを読み込むことになるけど…
GetIcon()ってメニューが表示されるたび呼ばれるのだろうか?組み込み時のみなんだろうか?
メニューが表示されるたびにHDDからだとレスポンスが悪くなるけど…
細かいところは、よくわからないね。

クラスの宣言。MenuPluginを継承したTestPlugMenuPlugin。

class TestPlugMenuPlugin : MenuPlugin
{
  public:
  TestPlugMenuPlugin();//コンストラクタ

  GetID();             //プラグインIDを返す
  GetName();           //プラグインの名前を返す。メニューに表示される
  GetHelp();           //情報バーに表示されるテキストを返す

  GetIcon();           //メニューやパレット用のアイコンを返す
  GetState();          //メニューやパレットに表示されるアイコンの状態
  Execute(doc);        //プラグインの実行


//  RestoreLayout(secret);//モードレスダイアログを使うときに使う
}

使用するメンバ関数を宣言。コメントを入れてあるので説明しません。

次はTestPlugMenuPluginのコンストラクタ。
new(TestPlugMenuPlugin)された時に呼ばれる。
クラスのローカル変数等の初期化をしよう。

TestPlugMenuPlugin::TestPlugMenuPlugin() {
  //親コンストラクタを呼びなさい。
  super();
  //ローカル変数などの初期化
}

プラグインIDを返す。IDはhttp://www.plugincafe.comから取得しよう。
ただし完成してからね。ID請求の方法は以前に紹介しましたので、そちらを読んでください。

TestPlugMenuPlugin::GetID() {return 1000006;}
//http://www.plugincafe.comからplugin idを取得してください。
//これはテストなので、1000001~1000010までが試しに使えます。

IDがバッティングしていてもC4Dは起動しますが、バッティングしたプラグインは組み込まれません。
組み込まれないと言えば、タイプミスしたものや、エラーが出ているプラグインも組み込まれません。

次はアイコンに矢印(マウスポインター)重ねたときやメニューを選んだとき、情報バーに表示するテキストを返します。
スクリプトマネージャの「情報」にあたります。

TestPlugMenuPlugin::GetHelp() {return "これはテストです。";}
//情報表示バーに表示するテキストを返します。

Frame_01

メニューやパレットのアイコンを返します。
先ほど触れましたが、ここでHDDからアイコンファイルを読み込んでも良いと思う。

TestPlugMenuPlugin::GetIcon() {return Icon_Bitmap;}
//メニューのアイコンを返します。

Frame_02

メニューやパレットのアイコンの状態。CMD_ENABLEだと可視。FALSEだと不可視。
スクリプトマネージャの「メニューの状態」にあたります。

TestPlugMenuPlugin::GetState() {return CMD_ENABLED;}
//メニュー項目の状態をコントロールするために、CMD_ENABLED、
//および/またはCMD_CHECKEDのコンビネーションを戻しなさい。
//使用させないときはFALSEを戻します。

ユーザスクリプトの実行部分に当たるところ。
このフレームワークはPluginフォルダに入れてもエラーが起こらず、C4Dに組み込まれます。実行すると、コンソールに「test plugを実行しましたね…」と表示されます。

TestPlugMenuPlugin::Execute(doc) {
  //メニュー項目が選ばれる時に呼ばれる
  println("test plugを実行しましたね…");
}

最後にC4Dの起動時にプラグインを組み込むときに実行される部分。
アイコンをHDDから読み込んでプラグインを組み込みます。

main()//C4D起動時のPluginを組み込む時に実行されます。
{

  //アイコンの読み込み
  Icon_Bitmap = new(BaseBitmap , 1 , 1);//最小限のビットマップ
  var f_pass = GeGetRootFilename();     //このプラグインのファイルパスの取得
  f_pass->RemoveLast();                 //ファイルパスのファイル名を削除
  f_pass->AddLast("test_plug.tif");     //パスの最後にアイコン用ファイル名を追加
  Icon_Bitmap->Load(f_pass);            //ビットマップの読み込み
 
  //プラグインをC4Dに組み込む
  Register(TestPlugMenuPlugin);
}

今回のこのフレームワークは、「test_plug.ZIP」です。
解凍して、C4DのPluginsフォルダに入れてください。

プラグインの拡張子は.cofです。
テスト用アイコンも付属です。.tifです。
Frame_06

こんな具合です。

|

« ユーザスクリプトの作成に苦痛を感じなくなったら、Plugin作ってみようよ! | トップページ | C4DにMenuPluginフレームワーク「test_plug」を組み込んだら… »

コメント

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