« C4DにMenuPluginフレームワーク「test_plug」を組み込んだら… | トップページ | C.O.F.F.E.E.プラグインでダイアログを使うには…復習 »

前回のフレームワークを修正

前回の確認作業よりフレームワークを修正。
ごめんなさい。同じような記事が続きます。

では、変更したフレームワークです。

/*
test_plug MenuPlugin
2009.2.5
*/


// グローバル変数 ------------------------------------------


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

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(){
  //アイコンの読み込み
  var Icon_Bitmap = new(BaseBitmap , 1 , 1);
  var f_pass = GeGetRootFilename();
  f_pass->RemoveLast();
  f_pass->AddLast("icon.tif");
  Icon_Bitmap->Load(f_pass);
  return Icon_Bitmap;
}
//メニューのアイコンを返します。


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



TestPlugMenuPlugin::Execute(doc){
  var op = doc->GetActiveObject();
  if(!instanceof(op , BaseObject))return;
  //メニュー項目が選ばれる時に呼ばれる
}

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



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

main()//C4D起動時のPluginを組み込む時に実行されます。
{
  //プラグインをC4Dに組み込む
  Register(TestPlugMenuPlugin);
}

MenuPluginクラスのGetIcon()は、C4Dの起動時のみ実行されるようなので、アイコン用の変数はローカル変数にします。
ローカル変数にするのでアイコン用画像ファイルもmain()で読み込まず、GetIcon()の中で読み込むことにしました。

TestPlugMenuPlugin::GetIcon(){
  //アイコンの読み込み
  var Icon_Bitmap = new(BaseBitmap , 1 , 1);
  var f_pass = GeGetRootFilename();
  f_pass->RemoveLast();
  f_pass->AddLast("icon.tif");
  Icon_Bitmap->Load(f_pass);
  return Icon_Bitmap;
}

アイコン画像用ファイル名は「icon.tif」に変えました。これでプラグインを作るたびファイル名を変更する必要がないと思います。
アイコンをただ読み込んで返すだけならGetIcon()を修正する必要がありません。

main()はプラグインの組み込むためのRegister()のみにしました。

main()//C4D起動時のPluginを組み込む時に実行されます。
{
  //プラグインをC4Dに組み込む
  Register(TestPlugMenuPlugin);
}

GetState()は、アクティブオブジェクトがあればメニューは可視、無ければ不可視。
オブジェクトの複数選択や、タグの場合は変更が必要。
ユーザスクリプトに合わせてアクティブオブジェクト用変数はopにしました。わざわざ合わせる必要は無いのですが…

TestPlugMenuPlugin::GetState(){
  var doc = GetActiveDocument();
  var op = doc->GetActiveObject();
  if(op)return CMD_ENABLED; else return FALSE;
}

Execute()もユーザスクリプトに合わせてアクティブオブジェクト用変数はopにしました。
アクティブオブジェクトのクラスチェックをするためのinstanceof()まで書き込んであります。
後は、適切なクラスに変更してください。
これも、タグを処理するならば変更が必要です。

TestPlugMenuPlugin::Execute(doc){
  var op = doc->GetActiveObject();
  if(!instanceof(op , BaseObject))return;
  //メニュー項目が選ばれる時に呼ばれる
}

では、新しいフレームワークは、「new_test_plug.ZIP」です。
前回の「test plug」は破棄してください。

|

« C4DにMenuPluginフレームワーク「test_plug」を組み込んだら… | トップページ | C.O.F.F.E.E.プラグインでダイアログを使うには…復習 »

コメント

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