« C4D CamMapCalib制作の為のテスト… 背景オブジェクト/カメラオブジェクトを追加してみる… | トップページ | C4D CamMapCalib制作の為のテスト… 修正… »

C4D CamMapCalib制作の為のテスト…プラグインの形式にしてみる…

まだ、試さなければならない事もあるけれど…プラグインの形式にして見ます。
プラグインの仮IDは、前回のダイアログユーザエリアのテストの時と同じ1000008を使います。
ベースになるソースコードも、ユーザエリアのテストの時のものを参考にします。

今回のベースになるソースコードです…
ここで表示するには、少し長いのですが…

/*
CamMapCalib
200.9.26
*/


var PlugID = 1000008;

//-------------------------------------------------------
enum
{
  //ダイアログガジェットid
  ua_id = 1000,//ユーザエリアid
  input_fn_tx,
  input_fn,
  input_fn_bt,

  //ユーザエリアのサイズ
  ua_w = 800,
  ua_h = 600
}



//-------------------------------------------------------
class testUserArea:GeUserArea
{
  public:
    testUserArea(id , dlg);
    GetUserWidth();
    GetUserHeight();
    Draw(x1 , y1 , x2 , y2);
    InputEvent(msg);
}

//-------------------------------------------
testUserArea::testUserArea(id , dlg){super(id , dlg);}
//-------------------------------------------
testUserArea::GetUserWidth(){return ua_w;}
//-------------------------------------------
testUserArea::GetUserHeight(){return ua_h;}
//-------------------------------------------
testUserArea::Draw(x1 , y1 , x2 , y2)
{
  SetClippingRegion(0 , 0 , ua_w - 1 , ua_h - 1);

  //黒ベース
  DrawSetPen(vector(0.0));
  DrawRectangle(0 , 0 , ua_w - 1 , ua_h - 1);
}

//-------------------------------------------
testUserArea::InputEvent(msg)
{
  Redraw();
}



//-------------------------------------------------------
class testDialog:GeModalDialog
{
  public:
    var ua;

    testDialog();
    CreateLayout();
    Init();
    Command(id , msg);
    AskClose();
}

//-------------------------------------------
testDialog::testDialog(){super();}

//-------------------------------------------
testDialog::CreateLayout()
{
  SetTitle("testDialog");
  AddUserArea(ua_id , 0 , ua_w , ua_h);
  ua = new(testUserArea , ua_id , this);

  AddGroupBeginV(10000 , BFH_SCALEFIT , 3 , "group1" , 0);
    AddGroupBorderSpace(20 , 10 , 20 , 10);

    AddStaticText(input_fn_tx , BFH_LEFT , 0 , 0 , "画像ファイル" , BORDER_NONE);
    AddEditText(input_fn , BFH_SCALEFIT , 0 , 0);
    AddButton(input_fn_bt , BFH_RIGHT , 10 , 0 , "...");
  AddGroupEnd();

  AddSeparatorH(0);

  AddDlgGroup(DR_DLGGROUP_OK|DR_DLGGROUP_CANCEL);
}

//-------------------------------------------
testDialog::Init()
{
 
}

//-------------------------------------------
testDialog::Command(id , msg)
{
  ua->Redraw();
}
//-------------------------------------------
testDialog::AskClose()
{
 
}



//-------------------------------------------------------
class testPlugin:MenuPlugin
{
  public:
    testPlugin();

    GetID();

    GetName();
    GetHelp();

    GetIcon();
    GetIconState();

    Execute(doc);
}

//-------------------------------------------
testPlugin::testPlugin(){super();}
//-------------------------------------------
testPlugin::GetID(){return PlugID;}
//-------------------------------------------
testPlugin::GetName(){return "CamMapCalib";}
//-------------------------------------------
testPlugin::GetHelp(){return "The Calibrate of the CameraObject for CameraMapping";}

//-------------------------------------------
testPlugin::GetIcon()
{
  var icon = new(BaseBitmap , 1 , 1);
  var fn = GeGetRootFilename();

  fn->RemoveLast();
  fn->AddLast("icon.tif");
 
  icon->Load(fn);
  return icon;
}

//-------------------------------------------
testPlugin::Execute(doc)
{
  var dlg = new(testDialog);
  dlg->Open(-1 , -1);
  if(!dlg->GetResult())return;
  println("ok");
}



//-------------------------------------------------------
main()
{
  Register(testPlugin);
}

ここから始めます…
すみません、ここからは、コードは非公開です… しばらく掛かります…

この記事を打ち始めて、3時間半ぐらい過ぎてしまいました…
もっとすんなり出来るかと思いましたが…
ソースコードが、ボロボロです…
一応プラグインの形になりました…

ダイアログはこんな感じ…

Guide_27

ちょっと大きめです…

先ほどのテスト背景を読み込んで見ました。
左上の数字は背景に入れ込んだ物なので、計算したものが表示されるわけではありません…

Guide_28

本当にカメラの方向と画角のみです。位置は(0.0 , 0.0 , 0.0)に出現します。
OKボタンを押すと背景画像用マテリアルとカメラと背景オブジェクトをシーンに追加します。

Guide_29

アイコンは、C4Dのカメラアイコンをまねました。
アイコンを適当に組み込んでみました…

Guide_30

PluginIDは、仮で1000008です。
あくまでも仮です。
バグも含んでいます。

CamMapCalib.ZIP

一応、今日中にプラグインとして形にすると言う目標は守れました。
正式なリリースは、近々…

レンズのディストーションには対応していません。
対応したいのですが、考えてもC.O.F.F.E.E.で、どう対処していいか、思い浮かびません…

一応、artist side C4Dコミュに、何らかのコメントを出した方が良いのだろうか…

更に、バグを発見してしまった…
背景画像のカメラが地平線より上を向いていても、カメラが下向きに設定されてしまう…???

角度のPの値が±の符号が、正確に判断できないようです。
他の画角などは、近い数値が出ますが…

今日は、ここまでです…

|

« C4D CamMapCalib制作の為のテスト… 背景オブジェクト/カメラオブジェクトを追加してみる… | トップページ | C4D CamMapCalib制作の為のテスト… 修正… »