資料室 ページ指定表示
資料室 ページ指定表示
 ■Report Liblary..._____________
| HOME | | 最新3ページ | | 最新100リスト | | 10回毎一覧 | | ANDOR  | | 辞書 |

Close

Only
000027.metasequoiaプラグインを作る 
  (2002年02月16日(土) 16:02)

Open
metasequoiaのプラグインを作成する基礎を纏めます。

mqsdkをhttp://www1.sphere.ne.jp/mizno/metaseq/index.htmlからダウンロードしてきて、
C:\Program Files\metaseq\mqsdk\に展開します。
付属のmqsdk.htmlに書いてあるとおりですが、一応、私なりのやり方で書きます。
開発環境はWindows2000、VisualC++6.0で、Objectプラグインを作成してみます。

1.VC++6.0を起動し、ファイル−新規作成で、Win32 Dynamic-Link Libraryを選択し、
 位置を「C:\Program Files\metaseq\mqsdk\mqsdk\Object\」にします。
 位置は任意ですが、プラグインの種類ごとに分けたかったので上記の階層にしました。

2.プロジェクト名に「boolian」と入力します。今回はboolianプラグインを作成します。
 位置が自動的に「C:\Program Files\metaseq\mqsdk\mqsdk\Object\boolian」に変化します。
 

3.とりあえず、ベースとなるプラグインのソースをコピーしてきます。
 今回はWired\Wired.cppをboolian.cppとしてC:\Program Files\metaseq\mqsdk\mqsdk\Object\boolian\にコピーしました。

4.プロジェクト−設定でダイアログを開き、C/C++のプリプロセッサのインクルードファイルのパスに
 「../..」を入力します。
 mqsdkマニュアルだと「..」ですが、私は1階層深くしたので、「../..」になります。
 

5.C:\Program Files\metaseq\mqsdk\mqsdk\にある、MQ3DLib.cpp、MQ3DLib.h、MQInit.cpp、MQPlugin.hを
 ワークスペースに追加します。
 

6.metasequoiaを起動して、ヘルプ−プラグインについてから、
 debug用のC:\Program Files\metaseq\mqsdk\mqsdk\Object\boolian\debug\boolian.dllをインストールする必要があります。
 プロジェクト−設定のリンクタブの出力ファイル名をC:\Program Files\metaseq\Plugins\Object\boolian.dllにしておくと
 次回からインストールの操作をしなくてよくなります。
 C:\Program Files\metaseq\Plugins\Object\には、VC++の中間ファイル*.ilkが生成されます。
 削除しても問題ありませんが、リンクのたびに生成されます。
 

7.デバッグ用にプロジェクト−設定から、デバッグセッションの実行可能ファイルにmetaseq.exeを選択し、
 プログラムの引数に、デバッグ用に用意したmqoファイル名を指定します。
 これで、F5で実行したときに自動でmetasequoiaが起動して、デバッグ用オブジェクトが開かれます。
 

以上で、プラグインを作成するベースが出来上がりました。
次に、どのへんをいじっていくかを簡単に説明します。

//---------------------------------------------------------------------------
//
//   Boolian(test)
//
//          Copyright(C) 2002, BOMBER
//
//     カレントオブジェクトと、次のオブジェクトをマージするプラグインのサンプル。
//     作成したDLLは"Plugins\Object"フォルダに入れる必要がある。
//
//
//---------------------------------------------------------------------------

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "MQPlugin.h"
#include "MQ3DLib.h"
以下の1行を追加し、ライブラリを使用可能にしておきます。
>#include "MQ3DLib.h"
あとは好みによりコメント欄でも変更しましょう。
//---------------------------------------------------------------------------
//  DllMain
//---------------------------------------------------------------------------
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	//プラグインとしては特に必要な処理はないので、何もせずにTRUEを返す
    return TRUE;
}
  特に何もしなくて良いです。
//---------------------------------------------------------------------------
//  MQGetPlugInID
//    プラグインIDを返す。
//    この関数は起動時に呼び出される。
//---------------------------------------------------------------------------
MQPLUGIN_EXPORT void MQGetPlugInID(DWORD *Product, DWORD *ID)
{
	// プロダクト名(制作者名)とIDを、全部で64bitの値として返す
	// 値は他と重複しないようなランダムなもので良い
	*Product = (long)"TEST";
	*ID      = (long)"SAMP";
}
  ProductとIDに自分の名前の先頭4バイトとか、開発コードを入れます。
//---------------------------------------------------------------------------
//  MQGetPlugInName
//    プラグイン名を返す。
//    この関数は[プラグインについて]表示時に呼び出される。
//---------------------------------------------------------------------------
MQPLUGIN_EXPORT const char *MQGetPlugInName(void)
{
	// プラグイン名
	return "Boolian Test    Copyright(C) 2002, BOMBER";
}
metasequoiaの「プラグインについて」で表示されるプラグイン名と作者名を入力しておきます。
//---------------------------------------------------------------------------
//  MQGetPlugInType
//    プラグインのタイプを返す。
//    この関数は起動時に呼び出される。
//---------------------------------------------------------------------------
MQPLUGIN_EXPORT int MQGetPlugInType(void)
{
	// オブジェクト変形用プラグインである
	return MQPLUGIN_TYPE_OBJECT;
}
今回はオブジェクト変形プラグインなのでMQPLUGIN_TYPE_OBJECTを指定しておきます。
プラグインの種類は以下のものがあります。
MQPLUGIN_TYPE_IMPORT....ファイル入力
MQPLUGIN_TYPE_EXPORT....ファイル出力
MQPLUGIN_TYPE_CREATE....オブジェクト作成
MQPLUGIN_TYPE_OBJECT....オブジェクト変形
MQPLUGIN_TYPE_SELECT....選択部変形
//---------------------------------------------------------------------------
//  MQEnumString
//    ポップアップメニューに表示される文字列を返す。
//    この関数は起動時に呼び出される。
//---------------------------------------------------------------------------
MQPLUGIN_EXPORT const char *MQEnumString( int index )
{
	switch( index ) {
		case 0: return "ブーリアン(加算)";
	}
	return NULL;
}
metasequoiaのプラグインメニューに表示される名称を入力しておきます。
私は日本語派なので、全角文字で入力しておきます。
indexに対応して、複数のプラグインを1つのDLLに纏めることも出来ます。
//---------------------------------------------------------------------------
//  MQModifyObject
//    メニューから選択されたときに呼び出される。
//---------------------------------------------------------------------------
MQPLUGIN_EXPORT BOOL MQModifyObject(int index, MQDocument doc)
{
	switch( index ) {
		case 0: return BoolianAdd( doc );
	}
	return FALSE;
}
indexに対応したプラグイン関数を設定します。
index0に登録したブーリアン(加算)を選んだとき、BoolianAdd( doc )を実行することを示します。
//ブーリアン(加算)
BOOL BoolianAdd( MQDocument doc ) {
	int obj_index, face_count, vert_count;

	//オブジェクトの取得
	obj_index = doc->GetCurrentObjectIndex();
	if( obj_index < 0 )  return FALSE;
	MQObject obj1 = doc->GetObject( obj_index );
	if( obj1 == NULL )  return FALSE;
	MQObject obj2 = doc->GetObject( obj_index+1 );
	if( obj2 == NULL )  return FALSE;

	face_count = obj1->GetFaceCount();
	vert_count = obj1->GetVertexCount();

	obj1->Merge( obj2 );		//obj1にobj2をマージする
	
	return TRUE;
}
もともとのWired.cppの動作部分をほとんど削りました。
カレントと、その次のオブジェクトをマージするだけの動作で終わります。
この関数にいろいろ追加してやることで、プラグインを作成していきます。
ここまでで、F5で実行すれば、プラグインの動作を確認できるかと思います。 この状態ではデバッグ用のdllが生成されますので、実際に完成してどこかに掲載する場合は ビルド−アクティブな構成の設定からReleaseを選択してビルドし、Release\に生成されるdllを使いましょう。 DebugとReleaseで動作が異なってしまう場合もありますので、 Releaseプラグインで動作を確認する必要もあるかと思います。 今回はここまでです。boolianプラグインなんぞ作り始めましたが、完成するかどうかは未定です。 尚、metasequoiaにブーリアンが欲しかったわけではなく、なんとなく作りたかっただけです。 ダウンロード:デバッグ用mqoファイル 関連リンク: metasequoia

| HOME | | 最新3ページ | | 最新100リスト | | 10回毎一覧 |
■0x112 ■0x227 ■0x55F ■0xDDF ■0xF36 ■0xF8B ■0xEBC ■0x114 ■0x33F ■0x77F ■0xAAF ■0xEEF
____________Report Library Ver2.00β 2003/08/27_bomber@xps.jp_http://bomber.xps.jp/_