MQStationPluginクラス

(new in Rev2.40)

MQStationPlugin クラスは MQBasePlugin クラスを継承し、常駐型プラグインの実装に必要な関数を提供します。

この MQStationPlugin クラスを継承して、必要な仮想関数の実装を行うことにより、本体との複雑なメッセージ処理を隠ぺい化して簡便な実装で常駐型プラグインを作成することができます。

MQStationPlugin クラス内には各プラグイン・メッセージ処理関数が仮想関数として宣言されており、継承クラスで各仮想関数を実装する必要があります。

クラス
MQStationPlugin コンストラクタ
~MQStationPlugin デストラクタ
上位クラスの宣言
GetPlugInID プラグインIDの取得
GetPlugInName プラグイン名の取得
プラグイン
GetPlugInType プラグインの種類の取得
EnumString メニューまたはボタンに表示される文字列を返す
EnumSubCommand サブコマンドの列挙
GetSubCommandString サブコマンドの表示名の取得
Initialize アプリケーションの初期化
Exit アプリケーションの終了
メッセージ処理
Activate 表示・非表示切り替え要求
IsActivated 表示・非表示状態の返答
OnSubCommand サブコマンドの呼び出し
OnMinimize ウインドウの最小化への返答
OnReceiveUserMessage プラグイン独自のメッセージの受け取り
OnDraw 描画時の処理
OnNewDocument ドキュメント初期化時
OnEndDocument ドキュメント終了時
OnSaveDocument ドキュメント保存時
OnUndo アンドゥ実行時
OnRedo リドゥ実行時
OnUpdateUndo アンドゥ状態更新時
OnObjectModified オブジェクトの編集時
OnObjectSelected オブジェクトの選択状態の変更時
OnUpdateObjectList カレントオブジェクトの変更時
OnMaterialModified マテリアルのパラメータ変更時
OnUpdateMaterialList カレントマテリアルの変更時
OnUpdateScene シーン情報の変更時
上位クラスの補助関数
OpenSetting 設定ファイルを開く
CloseSetting 設定ファイルを閉じる
GetResourceString リソース文字列を取得する
GetSettingValue 設定値を取得する
GetSystemColor システム色を取得する
GetResourceCursor 標準マウスカーソルを取得
GetScreenMouseCursor スクリーン用マウスカーソルを取得
SetScreenMouseCursor スクリーン用マウスカーソルを設定
SendUserMessage 他のプラグインにプラグイン独自のメッセージを送る
補助関数
WindowClose ウインドウを閉じる
BeginCallback コールバック処理の開始
ExecuteCallback コールバックに対する実装部
CreateDrawingObject OnDraw()時に描画オブジェクトを追加
CreateDrawingMaterial OnDraw()時に描画オブジェクト用マテリアルを追加
DeleteDrawingObject 描画オブジェクトを削除する
DeleteDrawingMaterial 描画オブジェクト用マテリアルを削除する
SetDrawProxyObject 描画代替オブジェクトを設定
GetCurrentUndoState 現在のアンドゥの状態カウンタを取得
GetSceneOption シーンの表示オプションを取得

MQStationPlugin::MQStationPlugin();

 コンストラクタです。


virtual MQStationPlugin::~MQStationPlugin();

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


virtual int MQStationPlugin::GetPlugInType();

戻り値
プラグインタイプ
[MQPLUGIN_TYPE_STATION] 常駐型

MQBasePlugin::GetPlugInType() で宣言された仮想関数を実装しています。継承クラス内で新たに実装を行う必要はありません。


virtual const char *MQStationPlugin::EnumString();

戻り値
メニューまたはボタンに表示する文字列

メニュー(常駐型)またはボタン(コマンド)上に表示する文字列を返します。

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


virtual const char *MQStationPlugin::EnumSubCommand(int index);

index
サブコマンドのインデックス
戻り値
サブコマンドの識別文字列

ショートカットキーの割り当てが可能なサブコマンドの名前を返します。

indexが0から順に一つずつ増加しながらこの関数が繰り返し呼び出されます。戻り値にNULLを指定すると、サブコマンドの列挙が終了します。

仮想関数として宣言されており、MQStationPlugin内ではそのままNULLを返してサブコマンドの登録は行いません。サブコマンドが必要な場合は、継承クラスでEnumSubCommand()、GetSubCommandStringOnSubCommand()をオーバーライドして実装してください。

また、MQWidgetBase::RegisterSubCommandButton()でボタンとの対応付けを行うと、サブコマンドに割り当てられたショートカットキーがボタン上に表示されるようになります。


virtual const wchar_t *MQStationPlugin::GetSubCommandString(int index);

index
サブコマンドのインデックス
戻り値
サブコマンドの表示文字列

指定されたインデックスのサブコマンドの表示文字列を取得します。


virtual BOOL MQStationPlugin::Initialize();

戻り値
初期化に成功したかどうか
[TRUE] 初期化に成功
[FALSE] 初期化に失敗

メタセコイア起動時、または「プラグインについて」でインストールまたは使用状態が指定され、プラグインDLLがロードされた直後に呼び出されます。

純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。

実装すべき内容に決まりはありませんが、一般的にはメニューから呼び出されたときに表示されるウインドウの作成などを行います。

注意:Ver2.4.3またはそれ以前のバージョンでは、実装上の不具合のためDLLロード直後以外にも「プラグインについて」から Initialize() が多重に呼び出されます。Ver2.4.4以降ではDLLロード直後以外では呼び出されません。


virtual void MQStationPlugin::Exit();

メタセコイア終了時、または「プラグインについて」で非使用状態が指定され、DLLがアンロードされる前に呼び出されます。

純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。

実装すべき内容に決まりはありませんが、一般的には Initialize() で確保されたリソースの解放を行います。


virtual BOOL MQStationPlugin::Activate(MQDocument doc, BOOL flag);

doc
ドキュメント
flag
要求されるアクティブ状態
[TRUE] アクティブ化が要求された
[FALSE] 非アクティブ化が要求された
戻り値
アクティブ状態
[TRUE] アクティブ状態にある
[FALSE] 非アクティブ状態にある

メニューがクリックされたときに、アクティブ・非アクティブ状態を切り替えるために呼び出されます。

純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。

実装すべき内容に決まりはありませんが、一般的には Initialize() 内で作成したウインドウを、要求された状態に応じて表示または非表示状態にします。

要求されたアクティブ状態に関わらず、関数呼び出し後のアクティブ状態を戻り値として返す必要があります。


virtual BOOL MQStationPlugin::IsActivated(MQDocument doc);

doc
ドキュメント
戻り値
アクティブ状態かどうか
[TRUE] アクティブ状態にある
[FALSE] 非アクティブ状態にある

Activate() で操作されるオブジェクトがアクティブ状態にあるかどうかを返します。

純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。

実装すべき内容に決まりはありませんが、一般的にはプラグイン内部で管理されているウインドウが表示中ならTRUEを、非表示状態ならFALSEを返します。


virtual BOOL MQStationPlugin::OnSubCommand(MQDocument doc, int index);

doc
ドキュメント
index
サブコマンドのインデックス
戻り値
[TRUE] ドキュメントに何らかの変更が行われた
[FALSE] ドキュメントは何も変更されなかった

EnumSubCommand() で返したサブコマンドに割り当てたショートカットキーが押されたとき、この関数が呼び出されます。

仮想関数として宣言されており、MQStationPlugin内では何も行いません。継承クラス内でサブコマンドへの処理を実装してください。


virtual BOOL MQStationPlugin::OnMinimize(MQDocument doc, BOOL flag);

doc
ドキュメント
戻り値
最小化されるかどうか
[TRUE] 最小化される
[FALSE] 最小化以外の状態に戻る

メタセコイア本体のウインドウが最小化されるときに呼び出されます。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラスで必要に応じて何らかの実装を行うことができます。


virtual int MQStationPlugin::OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id, const char *description, void *message);

doc
ドキュメント
src_product
送出元プラグインのプロダクトID
src_id
送出元プラグインのプラグインID
description
メッセージの内容を表す任意の文字列
message
メッセージの内容
戻り値
送出元プラグインに返す任意の値

(new in Rev2.41)

他のプラグインから MQBasePlugin::SendUserMessage() によりメッセージが送出された場合に呼び出されます。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラスおよび送出元プラグインに実装を行うことにより、プラグイン間でのデータ交換などの処理を行うことができます。


virtual void MQStationPlugin::OnDraw(MQDocument doc, MQScene scene, int width, int height);

doc
ドキュメント
scene
シーン
width
描画領域の横幅
description
描画領域の縦幅

描画時に呼び出されます。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて実装を行うことにより、プラグイン独自のオブジェクトをシーン内に描画することができます。

描画に用いるオブジェクト・マテリアルは補助関数 CreateDrawingObject(), CreateDrawingMaterial() によって作成する必要があります。


virtual void MQStationPlugin::OnNewDocument(MQDocument doc, const char *filename, NEW_DOCUMENT_PARAM& param);

doc
ドキュメント
filename
ファイル名
[NULL以外] MQOファイルが読み込まれた場合のファイル名
[NULL] 新規ドキュメントとして生成された
param
初期化パラメータ

ドキュメント初期化時に呼び出されます。

filename はMQOファイルが読み込まれたときにのみセットされ、他の形式がインポートされた場合はNULLとなります。

param.elem にはファイル保存時に OnSaveDocument() でXML要素を登録した場合に、そのXML要素がセットされています。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。

struct NEW_DOCUMENT_PARAM {
    MQXmlElement elem;
};
elem
[NULL以外] ファイル保存時に付加されたXML要素
[NULL] 新規ドキュメントとして生成された、またはXML要素は保存されていない。

virtual void MQStationPlugin::OnEndDocument(MQDocument doc);

doc
ドキュメント

ドキュメント終了時に呼び出されます。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。

CreateDrawingObject(), CreateDrawingMaterial() で instant をFALSE にして生成した描画オブジェクトを保持したままになっている場合、DeleteDrawingObject(), DeleteDrawingMaterial() で削除して下さい。


virtual void MQStationPlugin::OnSaveDocument(MQDocument doc, const char *filename, SAVE_DOCUMENT_PARAM& param);

doc
ドキュメント
filename
MQOファイル名
param
保存パラメータ

ドキュメントがMQOファイルに保存される直前に呼び出されます。

param.elem にはXML要素がセットされており、子要素を登録することによりプラグイン独自のデータをMQOファイルに付随させて保存することができます。XML要素はMQOファイルとは別の外部XMLファイルとして保存され、MQOファイル内からリンクする形となります。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて実装を行うことができます。

struct SAVE_DOCUMENT_PARAM {
    MQXmlElement elem;
    BOOL bSaveUniqueID
};
elem
[NULL以外] ファイル保存時に付加されたXML要素
[NULL] 新規ドキュメントとして生成された、またはXML要素は保存されていない。
bSaveUniqueID
MQOファイル内にユニークIDを保存するかどうか

virtual BOOL MQStationPlugin::OnUndo(MQDocument doc, int undo_state);

doc
ドキュメント
undo_state
アンドゥの状態カウンタ
戻り値
プラグイン独自のアンドゥ処理を行ってドキュメント内データを操作したかどうか
[FALSE] 操作を行わなかった

アンドゥ実行時に呼び出されます。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。

現段階では、プラグインでドキュメント内のデータ操作を行う独自のアンドゥ処理を行うことは認めておりません。ドキュメント内のデータの参照を行ったり、状態カウンタに応じてプラグイン内部のデータ処理を行うことはできますが、ドキュメントの操作は行わず必ずFALSEを返してください。戻り値は今後のバージョンのために予約されています。


virtual BOOL MQStationPlugin::OnRedo(MQDocument doc, int redo_state);

doc
ドキュメント
redo_state
アンドゥの状態カウンタ
戻り値
プラグイン独自のリドゥ処理を行ってドキュメント内データを操作したかどうか
[FALSE] 操作を行わなかった

リドゥ実行時に呼び出されます。

仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。

現段階では、プラグインでドキュメント内のデータ操作を行う独自のリドゥ処理を行うことは認めておりません。ドキュメント内のデータの参照を行ったり、状態カウンタに応じてプラグイン内部のデータ処理を行うことはできますが、ドキュメントの操作は行わず必ずFALSEを返してください。戻り値は今後のバージョンのために予約されています。


virtual void MQStationPlugin::OnUpdateUndo(MQDocument doc, int undo_state, int undo_size);

doc
ドキュメント
undo_state
アンドゥの状態カウンタ
undo_size
アンドゥ可能な回数

アンドゥの状態が更新されたときに呼び出されます。

この関数内ではオブジェクトの内容を更に変更してはいけません。


virtual void MQStationPlugin::OnObjectModified(MQDocument doc);

doc
ドキュメント

オブジェクトが編集された時に呼び出されます。

この関数内ではオブジェクトの内容を更に変更してはいけません。


virtual void MQStationPlugin::OnObjectSelected(MQDocument doc);

doc
ドキュメント

オブジェクトの頂点・辺・面・UVが選択された時に呼び出されます。

この関数内ではオブジェクトの内容・選択状態を更に変更してはいけません。


virtual void MQStationPlugin::OnUpdateObjectList(MQDocument doc);

doc
ドキュメント

カレントオブジェクトの変更や、オブジェクトの追加・削除が行われた時に呼び出されます。

この関数内ではオブジェクトの内容・選択状態を更に変更してはいけません。


virtual void MQStationPlugin::OnMaterialModified(MQDocument doc);

doc
ドキュメント

マテリアル内のパラメータが変更された時に呼び出されます。

この関数内ではオブジェクト・マテリアルの内容を更に変更してはいけません。


virtual void MQStationPlugin::OnUpdateMaterialList(MQDocument doc);

doc
ドキュメント

カレントマテリアルの変更や、マテリアルの追加・削除が行われた時に呼び出されます。

この関数内ではマテリアルの内容を更に変更してはいけません。


virtual void MQStationPlugin::OnUpdateScene(MQDocument doc, MQScene scene);

doc
ドキュメント
scene
シーン

カメラの向きやズームなど、シーン情報が変更された時に呼び出されます。

この関数内ではシーンを更に変更してはいけません。


void MQStationPlugin::WindowClose();

プラグインが管理しているウインドウが閉じられたときにこの関数を呼び出すと、本体側に通知されメニュー上のチェックが外れるようになります。


void MQStationPlugin::BeginCallback(void *option);

option
コールバック関数に渡す任意のデータ

Windowsメッセージに対する応答をプラグイン内で処理する場合、この関数を呼び出すと必要な初期化処理が行われた後に ExecuteCallback() が呼び出され、MQDocumentに対する処理を行うことができます。


virtual bool MQStationPlugin::ExecuteCallback(MQDocument doc, void *option);

doc
ドキュメント
option
BeginCallback()から渡された任意のデータ
戻り値
[TRUE] ドキュメントに何らかの変更が行われた
[FALSE] ドキュメントは何も変更されなかった

BeginCallback() によって呼び出されるコールバック関数を実装します。

純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。


MQObject MQStationPlugin::CreateDrawingObject(MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility, BOOL instant=TRUE);

doc
ドキュメント
visibility
[DRAW_OBJECT_POINT] 頂点を表示
[DRAW_OBJECT_LINE] 辺を表示
[DRAW_OBJECT_FACE] 面を表示
instant
一時的なオブジェクトとして生成するか

OnDraw()時に描画するオブジェクトを追加します。

作成されたオブジェクトは MQObject::DeleteThis()MQDocument::DeleteObject() で削除してはいけません。

instant に TRUE を指定して作成されたオブジェクトは描画が完了すると自動的に破棄されます。

instant に FALSE を指定して作成したオブジェクトは、不要になった時点で DeleteDrawingObject() で削除してください。また、オブジェクトが保持されたまま OnEndDocument() が呼び出されたら、その時点で削除してください。


MQMaterial MQStationPlugin::CreateDrawingMaterial(MQDocument doc, int& index, BOOL instant=TRUE);

doc
ドキュメント
index
生成されたマテリアルのインデックス
instant
一時的なオブジェクトとして生成するか

OnDraw() 時の CreateDrawingObject() で作成したオブジェクト描画に使用するマテリアルを追加します。

index には MQObject::SetFaceMaterial() に指定するインデックスが返されます。

作成されたマテリアルは MQMaterial::DeleteThis() で削除してはいけません。

instantにTRUEを指定して作成されたマテリアルは描画が完了すると自動的に破棄されます。

instantにFALSEを指定して作成したマテリアルは、不要になった時点で DeleteDrawingMaterial() で削除してください。また、マテリアルが保持されたまま OnEndDocument() が呼び出されたら、その時点で削除してください。


void MQStationPlugin::DeleteDrawingObject(MQDocument doc, MQObject obj);

doc
ドキュメント
obj
描画オブジェクト

CreateDrawingObject() で instant を FALSE にして作成したオブジェクトを削除します。


void MQStationPlugin::DeleteDrawingMaterial(MQDocument doc, MQMaterial mat);

doc
ドキュメント
mat
描画マテリアルオブジェクト

CreateDrawingMaterial() で instant を FALSE にして作成したマテリアルを削除します。


void MQStationPlugin::SetDrawProxyObject(MQObject obj, MQObject proxy);

obj
オブジェクト
proxy
描画代替オブジェクト(NULL可)

(new in Rev4.30)

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

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

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

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


int MQStationPlugin::GetCurrentUndoState(MQDocument doc);

doc
ドキュメント
戻り値
アンドゥの状態カウンタ

現在のアンドゥの状態カウンタを取得します。


void MQStationPlugin::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
下絵を表示