MQBasePluginクラス

(new in Rev2.40)

MQBasePlugin クラスはすべての種類のプラグインの基底となるクラスで、MQBasePlugin.cpp および MQBasePlugin.h をプロジェクトに追加することでクラスライブラリとして利用します。MQBasePluginから派生したクラスを GetPluginClass() で返すことにより、本体との複雑なメッセージ処理を隠ぺい化して簡便な実装で各プラグインを作成することができます。

 

MQBasePlugin クラス内には各プラグイン関数が仮想関数として宣言されており、継承クラスで各仮想関数を実装する必要があります。

クラス
MQBasePlugin コンストラクタ
~MQBasePlugin デストラクタ
プラグイン
GetPlugInID プラグインIDの取得
GetPlugInName プラグイン名の取得
GetPlugInType プラグインの種類の取得
補助関数
OpenSetting 設定ファイルを開く
CloseSetting 設定ファイルを閉じる
GetResourceString リソース文字列を取得する
GetSettingValue 設定値を取得する
GetSystemColor システム色を取得する
GetResourceCursor 標準マウスカーソルを取得
GetScreenMouseCursor スクリーン用マウスカーソルを取得
SetScreenMouseCursor スクリーン用マウスカーソルを設定
GetLUTCount LUTの数を取得
GetLUTName LUT名を取得
GetLUTData LUTデータを取得
GetDefaultLUTData 標準LUTデータを取得
GetSceneOption シーンの表示オプションを取得
GetEditOption 編集オプションを取得
GetDisplayUnit 表示単位を取得
GetDisplayUnitString 表示単位の文字列とスケールを取得
GetFilename ファイル名を取得
SaveDocument ドキュメントの保存
EnumLoadableImages 読み込み可能な画像ファイルの種類を取得
SendUserMessage 他のプラグインにプラグイン独自のメッセージを送る
SetDrawProxyObject 描画代替オブジェクトを設定

MQBasePlugin::MQBasePlugin();

コンストラクタです。


virtual MQBasePlugin::~MQBasePlugin();

デストラクタです。仮想関数として定義されます。


virtual void MQBasePlugin::GetPlugInID(DWORD *Product, DWORD *ID);

Product
プロダクト名(制作者名)をセットすべきポインタ
ID
プロダクトIDをセットすべきポインタ

プロダクト名(制作者名)とIDを、全部で64bitの値として返します。

Product および ID の値は他と重複しないような適当にランダムなもので構いません。

純粋仮想関数として宣言されており、継承クラスで実装することにより MQGetPlugInID() を隠ぺい化します。


virtual const char *MQBasePlugin::GetPlugInName();

戻り値
プラグイン名

[プラグインについて]ダイアログ上で表示するプラグイン名を返します。

純粋仮想関数として宣言されており、継承クラスで実装することにより MQGetPlugInName() を隠ぺい化します。


virtual int MQBasePlugin::GetPlugInType();

戻り値
プラグインタイプ
[MQPLUGIN_TYPE_IMPORT] ファイル入力用
[MQPLUGIN_TYPE_EXPORT] ファイル出力用
[MQPLUGIN_TYPE_CREATE] オブジェクト作成用
[MQPLUGIN_TYPE_OBJECT] オブジェクト変形用
[MQPLUGIN_TYPE_SELECT] 選択部変形用
[MQPLUGIN_TYPE_STATION] 常駐型
[MQPLUGIN_TYPE_COMMAND] コマンド (new in Rev2.41)

プラグインの種類を返します。

純粋仮想関数として宣言されており、継承クラスで実装することにより MQGetPlugInType() を隠ぺい化します。


MQSetting *MQBasePlugin::OpenSetting();

戻り値
設定オブジェクト

Metasequoia が各種設定を保存する metaseq.setting.xml ファイルへのアクセスを行うためのクラスを取得します。

取得した設定クラスを操作することにより、プラグイン独自の設定情報を読み込み・保存することができます。

取得した MQSetting クラスは CloseSetting() で削除する必要があります。

(in Rev4.00)

アクセスするファイルは metaseq.ini から metaseq.setting.xml へ変更されました。


void MQBasePlugin::CloseSetting(MQSetting *setting);

setting
設定オブジェクト

OpenSetting() で開いた設定オブジェクトを閉じます。


std::wstring MQBasePlugin::GetResourceString(const char *id);

id
リソース文字列ID
戻り値
文字列

(new in Rev4.00)

現在の言語のcommand.xml内で定義される文字列を取得します。


std::wstring MQBasePlugin::GetSettingValue(MQSETTINGVALUE_TYPE type);

type
設定項目
[MQSETTINGVALUE_LANGUAGE] 言語
[MQSETTINGVALUE_ROTATION_HANDLE] 回転ハンドルの形状
[MQSETTINGVALUE_HANDLE_SIZE] ハンドルサイズ
[MQSETTINGVALUE_HANDLE_SCALE] ハンドルの拡大率
[MQSETTINGVALUE_NORMALMAP_FLIP] 法線マップの反転
戻り値
各設定の値

(new in Rev4.02)

システム内で設定されている値を取得します。


MQColor MQBasePlugin::GetSystemColor(MQSYSTEMCOLOR_TYPE color_type);

color_type
色の種類
[MQSYSTEMCOLOR_OBJECT] オブジェクト
[MQSYSTEMCOLOR_SELECT] 選択
[MQSYSTEMCOLOR_TEMP] 一時表示
[MQSYSTEMCOLOR_HIGHLIGHT] ハイライト表示
[MQSYSTEMCOLOR_UNACTIVE] 非選択
[MQSYSTEMCOLOR_MESH_YZ] YZ平面
[MQSYSTEMCOLOR_MESH_ZX] ZX平面
[MQSYSTEMCOLOR_MESH_XY] XY平面
[MQSYSTEMCOLOR_BLOB_PLUS] メタボール+
[MQSYSTEMCOLOR_BLOB_MINUS] メタボール-
[MQSYSTEMCOLOR_UV] UV展開
[MQSYSTEMCOLOR_AXIS_X] X軸
[MQSYSTEMCOLOR_AXIS_Y] Y軸
[MQSYSTEMCOLOR_AXIS_Z] Z軸
[MQSYSTEMCOLOR_AXIS_W] 中心軸
[MQSYSTEMCOLOR_AXIS_ACTIVE] アクティブな軸
[MQSYSTEMCOLOR_PREVIEW_BACK] プレビュー背景
戻り値

(new in Rev4.02)

システム内で設定されている色を取得します。


HCURSOR MQBasePlugin::GetResourceCursor(MQCURSOR_TYPE cursor_type);

cursor_type
マウスカーソルの種類
[MQCURSOR_SIZEALL] 4方向矢印
[MQCURSOR_HANDPOINT] 指先
[MQCURSOR_HELP] 疑問符付き
[MQCURSOR_NO] 禁止
[MQCURSOR_WAIT] 砂時計
[MQCURSOR_UPARROW] 上向き矢印
[MQCURSOR_SIZEWE] 左右を指す両方向矢印
[MQCURSOR_SIZENWSE] 左上と右下を指す両方向矢印
[MQCURSOR_SIZENS] 上下を指す両方向矢印
[MQCURSOR_SIZENESW] 右上と左下を指す両方向矢印
[MQCURSOR_CROSS] 十字
[MQCURSOR_NONE] 非表示
[MQCURSOR_DEFAULT] 標準
[MQCURSOR_RECT] 範囲
[MQCURSOR_ROPE] 投げ縄
[MQCURSOR_MOVE] 移動
[MQCURSOR_SCALE] 拡大
[MQCURSOR_ROTATE] 回転
戻り値
カーソルハンドル

(new in Rev2.46)

指定された種類のマウスカーソルを取得します。

取得したカーソルはSetScreenMouseCursor()MQCommandPlugin::SetMouseCursor()で利用します。


HCURSOR MQBasePlugin::GetScreenMouseCursor();

戻り値
カーソルハンドル

(new in Rev4.30)

現在のスクリーン用マウスカーソルを取得します。


void MQBasePlugin::SetScreenMouseCursor(HCURSOR cursor);

cursor
カーソルハンドル

(new in Rev4.30)

スクリーン用マウスカーソルを設定します。

設定するカーソルはGetResourceCursor()で取得したものか、またはWin32APIのLoadCursor()で得られるDLLのインスタンスが保持するリソースカーソルを指定して下さい。LoadCursor()でインスタンスにNULLを指定して得られる定義済みカーソルを指定した時の動作は保証されません。

3Dビューにカーソルを設定する場合はMQCommandPlugin::SetMouseCursor()を呼び出してください。

ウィジェットにカーソルを設定する場合はMQWidgetBase::SetCursor()を呼び出してください。


int MQBasePlugin::GetLUTCount();

戻り値
LUTの数

(new in Rev4.40)

システムで用意されているLUT(カラーマップ)の数を取得します。


const unsigned char *MQBasePlugin::GetLUTData(int index);

index
LUTのインデックス
戻り値
LUTデータ

(new in Rev4.40)

システムで用意されているLUT(カラーマップ)データを取得します。

戻り値のポインタ内にはRGB順に256色分、計768バイトのデータが格納されています。


const unsigned char *MQBasePlugin::GetDefaultLUTData();

戻り値
デフォルトLUTデータ

(new in Rev4.40)

システムの標準LUT(カラーマップ)を取得します。

戻り値のポインタ内にはRGB順に256色分、計768バイトのデータが格納されています。


void MQBasePlugin::GetSceneOption(MQScene scene, SCENE_OPTION& option);

scene
シーン
option
オプション

シーンの表示オプションを取得します。

struct SCENE_OPTION {
    BOOL ShowVertex;
    BOOL ShowLine;
    BOOL ShowFace;
    BOOL FrontOnly;
    BOOL ShowBkimg;
};
ShowVertex
頂点を表示
ShowLine
辺を表示
ShowFace
面を表示
FrontOnly
前面のみ表示
ShowBkimg
下絵を表示

void MQBasePlugin::GetEditOption(EDITOPTION& option);

option
編集オプション

編集オプションの状態を取得します。

取得された編集オプションは option に格納されます。

struct EDIT_OPTION {
    BOOL EditVertex;                // 頂点を編集可
    BOOL EditLine;                  // ラインを編集可
    BOOL EditFace;                  // 面を編集可
    BOOL SelectRect;                // 矩形選択
    BOOL SelectRope;                // 投げ縄選択
    BOOL SnapX;                     // X軸に沿った編集
    BOOL SnapY;                     // Y軸に沿った編集
    BOOL SnapZ;                     // Z軸に沿った編集
    COORDINATE_TYPE CoordinateType; // 座標軸の種類
    SNAP_GRID_TYPE SnapGrid;        // グリッドへの吸着
    BOOL Symmetry;                  // 対称編集
    float SymmetryDistance;         // 対称とみなす距離
    BOOL CurrentObjectOnly;         // カレントオブジェクトのみを編集
    SNAP_PLANE_TYPE SnapPlane;      // 平面への吸着 (new in Rev 4.20)
    MQPoint SnapPlanePos;           // 吸着する平面の位置 (new in Rev 4.20)
    MQPoint SnapPlaneDir;           // 吸着する平面の向き (new in Rev 4.20)
    BOOL SnapVertex;                // 頂点への吸着 (new in Rev 4.20)
    BOOL SnapLine;                  // 辺への吸着 (new in Rev 4.20)
    BOOL SnapFace;                  // 面への吸着 (new in Rev 4.20)
};
CoordinateType
座標軸の種類
[COORDINATE_SCREEN] スクリーン座標
[COORDINATE_WORLD] ワールド座標
[COORDINATE_LOCAL] ローカル座標
SnapGrid
グリッドへの吸着(複数指定可のため、&演算子で調べる)
[SNAP_GRID_X] X軸方向に吸着
[SNAP_GRID_Y] Y軸方向に吸着
[SNAP_GRID_Z] Z軸方向に吸着

MQDISPLAYUNIT MQBasePlugin::GetDisplayUnit();

戻り値
表示単位
[MQDISPLAYUNIT_NONE] なし
[MQDISPLAYUNIT_MM] ミリメートル
[MQDISPLAYUNIT_CM] センチメートル
[MQDISPLAYUNIT_M] メートル
[MQDISPLAYUNIT_INCH] インチ
[MQDISPLAYUNIT_FEET] フィート

(new in Rev4.59)

長さの表示単位を取得します。


static const wchar_t *MQBasePlugin::GetDisplayUnitString(MQDISPLAYUNIT unit, double *scale)

unit
表示単位
[MQDISPLAYUNIT_NONE] なし
[MQDISPLAYUNIT_MM] ミリメートル
[MQDISPLAYUNIT_CM] センチメートル
[MQDISPLAYUNIT_M] メートル
[MQDISPLAYUNIT_INCH] インチ
[MQDISPLAYUNIT_FEET] フィート
scale
表示単位のスケール
戻り値
表示単位の文字列

(new in Rev4.60)

長さの表示単位の文字列とスケールを取得します。


std::wstring MQBasePlugin::GetFilename(MQDocument doc);

doc
ドキュメント
戻り値
ファイル名

(new in Rev4.59)

ドキュメントの読み込み元・保存先のファイル名を取得します。ファイル名が付けられていない場合、空文字列が返ります。


bool MQBasePlugin::SaveDocument(MQDocument doc, const wchar_t *filename, const SAVE_DOCUMENT_OPTION& option);

doc
ドキュメント
filename
ファイル名
option
保存オプション
戻り値
保存に成功したか

(new in Rev4.59)

ドキュメントをファイルに保存します。

保存オプション内でプラグインIDを指定すると、指定したIDに対応するExportプラグインによる保存が行われます。プラグインIDを指定しない場合、拡張子によってファイル形式が自動的に判別されます。

struct SAVE_DOCUMENT_OPTION {
	DWORD ExportProductID;
	DWORD ExportPluginID;
	int ExportIndex;
};
ExportProductID
出力プラグインの製造者ID
ExportPluginID
出力プラグインのプラグインID
ExportIndex
出力プラグインのインデックス

std::vector<std::wstring> MQBasePlugin::EnumLoadableImages()

戻り値
読み込み可能な画像ファイルの種類

(new in Rev4.60)

読み込み可能な画像ファイルの種類を取得します。


int MQBasePlugin::SendUserMessage(MQDocument doc, DWORD target_product, DWORD target_id, const char *description, void *param);

doc
ドキュメント
target_product
送出先プラグインのプロダクトID
target_id
送出先プラグインのプラグインID
description
メッセージの種類を示す任意の文字列
message
任意のメッセージ
戻り値
プラグインから返された値

(new in Rev2.41)

他の常駐型・コマンドプラグインに任意のメッセージを送ります。

プラグインに渡すデータは任意のものを message にポインタとして与えることができます。

target_product と target_id に 0 を指定すると、すべてのプラグインに通知されます。

送出されたメッセージは受け取り側のプラグイン側の MQStationPlugin::OnReceiveUserMessage() で受け取ります。

 

注意:Ver2.4.4または以前のバージョンでは、戻り値が正しく取得できません。


void MQBasePlugin::SetDrawProxyObject(MQObject obj, MQObject proxy, bool sync_select = false);

obj
オブジェクト
proxy
描画代替オブジェクト(NULL可)
sync_select
選択状態の同期

(new in Rev4.30)

描画代替オブジェクトは通常のオブジェクトの頂点・辺・面の代わりに別のオブジェクトに差し替えて表示します。代替されるのは表示のみで、各操作には影響しません。

通常objはドキュメントに登録されているオブジェクトを、proxyにはMQ_CreateObject()またはCreateDrawingObject() で作成したオブジェクトを指定します。

OnDraw()内でCreateDrawingObject()でinstantをTRUEにして作成したオブジェクトを描画代替オブジェクトとして指定すると、その呼び出し1回のみに必要なオブジェクトを用意することができ、OnDraw()の呼び出し後に描画代替オブジェクトは自動的に削除されます。

instantをFALSEにしたり、MQ_CreateObject()で作成したオブジェクトを描画代替オブジェクトとして指定すると、描画代替オブジェクトを削除するか別の描画代替オブジェクト(NULLも可)を指定するまでその描画代替オブジェクトでの表示が行われます。

sync_selectにtrueを指定すると、元のオブジェクトの頂点・辺・面の選択状態が代替オブジェクトに反映されます。選択状態の同期には、頂点・面数が一致している必要があります。