(new in Rev2.40)
MQStationPlugin クラスは MQBasePlugin クラスを継承し、常駐型プラグインの実装に必要な関数を提供します。
この MQStationPlugin クラスを継承して、必要な仮想関数の実装を行うことにより、本体との複雑なメッセージ処理を隠ぺい化して簡便な実装で常駐型プラグインを作成することができます。
MQStationPlugin クラス内には各プラグイン・メッセージ処理関数が仮想関数として宣言されており、継承クラスで各仮想関数を実装する必要があります。
クラス | |
MQStationPlugin | コンストラクタ |
~MQStationPlugin | デストラクタ |
CreateNewPlugin | 新しいプラグインクラスの作成 |
上位クラスの宣言 | |
GetPlugInID | プラグインIDの取得 |
GetPlugInName | プラグイン名の取得 |
プラグイン | |
GetPlugInType | プラグインの種類の取得 |
EnumString | メニューまたはボタンに表示される文字列を返す |
EnumSubCommand | サブコマンドの列挙 |
GetSubCommandString | サブコマンドの表示名の取得 |
Initialize | アプリケーションの初期化 |
Exit | アプリケーションの終了 |
メッセージ処理 | |
Activate | 表示・非表示切り替え要求 |
IsActivated | 表示・非表示状態の返答 |
OnSubCommand | サブコマンドの呼び出し |
OnSwitchSubCommand | サブコマンドの切り替え |
OnMinimize | ウインドウの最小化への返答 |
OnReceiveUserMessage | プラグイン独自のメッセージの受け取り |
OnDraw | 描画時の処理 |
OnNewDocument | ドキュメント初期化時 |
OnEndDocument | ドキュメント終了時 |
OnSaveDocument | ドキュメント保存時 |
OnSavePastDocument | クラッシュ時など、最新以外の状態のドキュメント保存時 |
OnUndo | アンドゥ実行時 |
OnRedo | リドゥ実行時 |
OnUpdateUndo | アンドゥ状態更新時 |
OnObjectModified | オブジェクトの編集時 |
OnObjectSelected | オブジェクトの選択状態の変更時 |
OnUpdateObjectList | カレントオブジェクトの変更時 |
OnMaterialModified | マテリアルのパラメータ変更時 |
OnUpdateMaterialList | カレントマテリアルの変更時 |
OnUpdateScene | シーン情報の変更時 |
OnChangeEditOption | 編集オプションの変更時 |
OnConfigurationChanged | 環境設定の変更時 |
上位クラスの補助関数 | |
OpenSetting | 設定ファイルを開く |
CloseSetting | 設定ファイルを閉じる |
GetResourceString | リソース文字列を取得する |
GetSettingValue | 設定値を取得する |
GetSystemColor | システム色を取得する |
GetResourceCursor | 標準マウスカーソルを取得 |
GetScreenMouseCursor | スクリーン用マウスカーソルを取得 |
SetScreenMouseCursor | スクリーン用マウスカーソルを設定 |
SendUserMessage | 他のプラグインにプラグイン独自のメッセージを送る |
SetDrawProxyObject | 描画代替オブジェクトを設定 |
GetSceneOption | シーンの表示オプションを取得 |
GetEditOption | 編集オプションを取得 |
補助関数 | |
WindowClose | ウインドウを閉じる |
BeginCallback | コールバック処理の開始 |
ExecuteCallback | コールバックに対する実装部 |
CreateDrawingObject | OnDraw()時に描画オブジェクトを追加 |
CreateDrawingObjectByClone | OnDraw()時に描画オブジェクトを追加 |
CreateDrawingMaterial | OnDraw()時に描画オブジェクト用マテリアルを追加 |
CreateDrawingText | OnDraw()時に描画テキストを追加 |
DeleteDrawingObject | 描画オブジェクトを削除する |
DeleteDrawingMaterial | 描画オブジェクト用マテリアルを削除する |
DeleteDrawingText | 描画テキストを削除する |
GetCurrentUndoState | 現在のアンドゥの状態カウンタを取得 |
ExecuteUndo | アンドゥの実行 |
ExecuteRedo | リドゥの実行 |
ClearUndoBuffer | アンドゥバッファの消去 |
GetSnappedPos | スナップ位置を取得 |
MQStationPlugin::MQStationPlugin();
コンストラクタです。
virtual MQStationPlugin::~MQStationPlugin();
デストラクタです。仮想関数として定義されます。
virtual MQBasePlugin *MQStationPlugin::CreateNewPlugin();
別のドキュメント用に新しいプラグインクラスを作成します。
Mac版のみの関数で、純粋仮想関数として定義されます。
virtual int MQStationPlugin::GetPlugInType();
MQBasePlugin::GetPlugInType() で宣言された仮想関数を実装しています。継承クラス内で新たに実装を行う必要はありません。
virtual const char *MQStationPlugin::EnumString();
メニュー(常駐型)またはボタン(コマンド)上に表示する文字列を返します。
純粋仮想関数として宣言されており、継承クラスで実装することにより MQEnumString() を隠ぺい化します。
virtual const char *MQStationPlugin::EnumSubCommand(int index);
ショートカットキーの割り当てが可能なサブコマンドの名前を返します。
indexが0から順に一つずつ増加しながらこの関数が繰り返し呼び出されます。戻り値にNULLを指定すると、サブコマンドの列挙が終了します。
仮想関数として宣言されており、MQStationPlugin内ではそのままNULLを返してサブコマンドの登録は行いません。サブコマンドが必要な場合は、継承クラスでEnumSubCommand()、GetSubCommandStringとOnSubCommand()をオーバーライドして実装してください。
また、MQWidgetBase::RegisterSubCommandButton()でボタンとの対応付けを行うと、サブコマンドに割り当てられたショートカットキーがボタン上に表示されるようになります。
virtual const wchar_t *MQStationPlugin::GetSubCommandString(int index);
指定されたインデックスのサブコマンドの表示文字列を取得します。
virtual BOOL MQStationPlugin::Initialize();
メタセコイア起動時、または「プラグインについて」でインストールまたは使用状態が指定され、プラグインDLLがロードされた直後に呼び出されます。
純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。
実装すべき内容に決まりはありませんが、一般的にはメニューから呼び出されたときに表示されるウインドウの作成などを行います。
注意:Ver2.4.3またはそれ以前のバージョンでは、実装上の不具合のためDLLロード直後以外にも「プラグインについて」から Initialize() が多重に呼び出されます。Ver2.4.4以降ではDLLロード直後以外では呼び出されません。
virtual void MQStationPlugin::Exit();
メタセコイア終了時、または「プラグインについて」で非使用状態が指定され、DLLがアンロードされる前に呼び出されます。
純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。
実装すべき内容に決まりはありませんが、一般的には Initialize() で確保されたリソースの解放を行います。
virtual BOOL MQStationPlugin::Activate(MQDocument doc, BOOL flag);
メニューがクリックされたときに、アクティブ・非アクティブ状態を切り替えるために呼び出されます。
純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。
実装すべき内容に決まりはありませんが、一般的には Initialize() 内で作成したウインドウを、要求された状態に応じて表示または非表示状態にします。
要求されたアクティブ状態に関わらず、関数呼び出し後のアクティブ状態を戻り値として返す必要があります。
virtual BOOL MQStationPlugin::IsActivated(MQDocument doc);
Activate() で操作されるオブジェクトがアクティブ状態にあるかどうかを返します。
純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。
実装すべき内容に決まりはありませんが、一般的にはプラグイン内部で管理されているウインドウが表示中ならTRUEを、非表示状態ならFALSEを返します。
virtual BOOL MQStationPlugin::OnSubCommand(MQDocument doc, int index);
EnumSubCommand() で返したサブコマンドに割り当てたショートカットキーが押されたとき、この関数が呼び出されます。
仮想関数として宣言されており、MQStationPlugin内では何も行いません。継承クラス内でサブコマンドへの処理を実装してください。
virtual BOOL MQStationPlugin::OnSwitchSubCommand(MQDocument doc);
コマンドに割り当てられているショートカットキーが連続で押されたときに呼び出されます。
仮想関数として宣言されており、MQStationPlugin内では何も行いません。継承クラス内でサブコマンドへの処理を実装してください。
必ずサブコマンドを切り替える必要はなく、実際に行う処理の内容はコマンドごとに任意に定義することができます。
virtual BOOL MQStationPlugin::OnMinimize(MQDocument doc, BOOL flag);
メタセコイア本体のウインドウが最小化されるときに呼び出されます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラスで必要に応じて何らかの実装を行うことができます。
virtual int MQStationPlugin::OnReceiveUserMessage(MQDocument doc, DWORD src_product, DWORD src_id, const char *description, void *message);
(new in Rev2.41)
他のプラグインから MQBasePlugin::SendUserMessage() によりメッセージが送出された場合に呼び出されます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラスおよび送出元プラグインに実装を行うことにより、プラグイン間でのデータ交換などの処理を行うことができます。
virtual void MQStationPlugin::OnDraw(MQDocument doc, MQScene scene, int width, int height);
描画時に呼び出されます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて実装を行うことにより、プラグイン独自のオブジェクトをシーン内に描画することができます。
描画に用いるオブジェクト・マテリアルは補助関数 CreateDrawingObject(), CreateDrawingMaterial() によって作成する必要があります。
virtual void MQStationPlugin::OnNewDocument(MQDocument doc, const char *filename, NEW_DOCUMENT_PARAM& param);
ドキュメント初期化時に呼び出されます。
filename はMQOファイルが読み込まれたときにのみセットされ、他の形式がインポートされた場合はNULLとなります。
param.elem にはファイル保存時に OnSaveDocument() でXML要素を登録した場合に、そのXML要素がセットされています。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。
struct NEW_DOCUMENT_PARAM { MQXmlElement elem; };
|
virtual void MQStationPlugin::OnEndDocument(MQDocument doc);
ドキュメント終了時に呼び出されます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。
CreateDrawingObject(), CreateDrawingMaterial() で instant をFALSE にして生成した描画オブジェクトを保持したままになっている場合、DeleteDrawingObject(), DeleteDrawingMaterial() で削除して下さい。
virtual void MQStationPlugin::OnSaveDocument(MQDocument doc, const char *filename, SAVE_DOCUMENT_PARAM& param);
ドキュメントがMQOファイルに保存される直前に呼び出されます。
param.elem にはXML要素がセットされており、子要素を登録することによりプラグイン独自のデータをMQOファイルに付随させて保存することができます。XML要素はMQOファイルとは別の外部XMLファイルとして保存され、MQOファイル内からリンクする形となります。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて実装を行うことができます。
struct SAVE_DOCUMENT_PARAM { MQXmlElement elem; BOOL bSaveUniqueID; int PastState; };
|
virtual void MQStationPlugin::OnSavePastDocument(MQDocument doc, const char *filename, SAVE_DOCUMENT_PARAM& param);
(new in Rev4.60)
クラッシュ時など、最新以外の状態のMQOファイルが保存される前に呼び出されます。
OnSaveDocument()と同様にプラグイン独自のデータを保存することができ、 基本的に、param.PastStateに対応するデータを保存します。
保存のため以外にも、ユニークIDを保存する必要があるかどうかを調べるために param.elemがnullptrで呼び出されることがあります。この場合、必要に応じてparam.bSaveUniqueIDを書き換えます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて実装を行うことができます。
virtual BOOL MQStationPlugin::OnUndo(MQDocument doc, int undo_state);
アンドゥ実行時に呼び出されます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。
現段階では、プラグインでドキュメント内のデータ操作を行う独自のアンドゥ処理を行うことは認めておりません。ドキュメント内のデータの参照を行ったり、状態カウンタに応じてプラグイン内部のデータ処理を行うことはできますが、ドキュメントの操作は行わず必ずFALSEを返してください。戻り値は今後のバージョンのために予約されています。
virtual BOOL MQStationPlugin::OnRedo(MQDocument doc, int redo_state);
リドゥ実行時に呼び出されます。
仮想関数として宣言されており、標準動作は何も行いませんが、継承クラス内で必要に応じて何らかの実装を行うことができます。
現段階では、プラグインでドキュメント内のデータ操作を行う独自のリドゥ処理を行うことは認めておりません。ドキュメント内のデータの参照を行ったり、状態カウンタに応じてプラグイン内部のデータ処理を行うことはできますが、ドキュメントの操作は行わず必ずFALSEを返してください。戻り値は今後のバージョンのために予約されています。
virtual void MQStationPlugin::OnUpdateUndo(MQDocument doc, int undo_state, int undo_size);
アンドゥの状態が更新されたときに呼び出されます。
この関数内ではオブジェクトの内容を更に変更してはいけません。
virtual void MQStationPlugin::OnObjectModified(MQDocument doc);
オブジェクトが編集された時に呼び出されます。
この関数内ではオブジェクトの内容を更に変更してはいけません。
virtual void MQStationPlugin::OnObjectSelected(MQDocument doc);
オブジェクトの頂点・辺・面・UVが選択された時に呼び出されます。
この関数内ではオブジェクトの内容・選択状態を更に変更してはいけません。
virtual void MQStationPlugin::OnUpdateObjectList(MQDocument doc);
カレントオブジェクトの変更や、オブジェクトの追加・削除が行われた時に呼び出されます。
この関数内ではオブジェクトの内容・選択状態を更に変更してはいけません。
virtual void MQStationPlugin::OnMaterialModified(MQDocument doc);
マテリアル内のパラメータが変更された時に呼び出されます。
この関数内ではオブジェクト・マテリアルの内容を更に変更してはいけません。
virtual void MQStationPlugin::OnUpdateMaterialList(MQDocument doc);
カレントマテリアルの変更や、マテリアルの追加・削除が行われた時に呼び出されます。
この関数内ではマテリアルの内容を更に変更してはいけません。
virtual void MQStationPlugin::OnUpdateScene(MQDocument doc, MQScene scene);
カメラの向きやズームなど、シーン情報が変更された時に呼び出されます。
この関数内ではシーンを更に変更してはいけません。
virtual void MQStationPlugin::OnChangeEditOption(MQDocument doc, EDITOPTION_TYPE trigger);
(new in Rev4.40)
編集オプションが変更された時に呼び出されます。
virtual void MQStationPlugin::OnConfigurationChanged(MQDocument doc);
(new in Rev4.64)
環境設定が変更された時に呼び出されます。
void MQStationPlugin::WindowClose();
プラグインが管理しているウインドウが閉じられたときにこの関数を呼び出すと、本体側に通知されメニュー上のチェックが外れるようになります。
void MQStationPlugin::BeginCallback(void *option);
Windowsメッセージに対する応答をプラグイン内で処理する場合、この関数を呼び出すと必要な初期化処理が行われた後に ExecuteCallback() が呼び出され、MQDocumentに対する処理を行うことができます。
virtual bool MQStationPlugin::ExecuteCallback(MQDocument doc, void *option);
BeginCallback() によって呼び出されるコールバック関数を実装します。
純粋仮想関数として宣言されており、継承クラスで実装を行う必要があります。
MQObject MQStationPlugin::CreateDrawingObject(MQDocument doc, DRAW_OBJECT_VIISIBILITY visibility, BOOL instant=TRUE);
OnDraw()時に描画するオブジェクトを追加します。
作成されたオブジェクトは MQObject::DeleteThis() や MQDocument::DeleteObject() で削除してはいけません。
instant に TRUE を指定して作成されたオブジェクトは描画が完了すると自動的に破棄されます。
instant に FALSE を指定して作成したオブジェクトは、不要になった時点で DeleteDrawingObject() で削除してください。また、オブジェクトが保持されたまま OnEndDocument() が呼び出されたら、その時点で削除してください。
MQObject MQStationPlugin::CreateDrawingObjectByClone(MQDocument doc, MQObject clone_source, DRAW_OBJECT_VISIBILITY visibility, BOOL instant=TRUE);
OnDraw()時に描画するオブジェクトを元となるオブジェクトを複製して追加します。
作成されたオブジェクトは MQObject::DeleteThis() や MQDocument::DeleteObject() で削除してはいけません。
instant に TRUE を指定して作成されたオブジェクトは描画が完了すると自動的に破棄されます。
instant に FALSE を指定して作成したオブジェクトは、不要になった時点で DeleteDrawingObject() で削除してください。また、オブジェクトが保持されたまま OnEndDocument() が呼び出されたら、その時点で削除してください。
MQMaterial MQStationPlugin::CreateDrawingMaterial(MQDocument doc, int& index, BOOL instant=TRUE);
OnDraw() 時の CreateDrawingObject() で作成したオブジェクト描画に使用するマテリアルを追加します。
index には MQObject::SetFaceMaterial() に指定するインデックスが返されます。
作成されたマテリアルは MQMaterial::DeleteThis() で削除してはいけません。
instantにTRUEを指定して作成されたマテリアルは描画が完了すると自動的に破棄されます。
instantにFALSEを指定して作成したマテリアルは、不要になった時点で DeleteDrawingMaterial() で削除してください。また、マテリアルが保持されたまま OnEndDocument() が呼び出されたら、その時点で削除してください。
MQDrawingText MQStationPlugin::CreateDrawingText(MQDocument doc, const wchar_t *text, DRAWING_TEXT_PARAM& param, BOOL instant=TRUE);
(new in Rev4.50)
OnDraw()時に描画するテキストを追加します。
instant に TRUE を指定して作成されたテキストは描画が完了すると自動的に破棄されます。
instant に FALSE を指定して作成したテキストは、不要になった時点で DeleteDrawingText() で削除してください。また、オブジェクトが保持されたまま OnEndDocument() が呼び出されたら、その時点で削除してください。
struct DRAWING_TEXT_PARAM { MQPoint ScreenPos; MQColor Color; float FontScale; DRAWING_TEXT_ALIGNMENT HorzAlign; DRAWING_TEXT_ALIGNMENT VertAlign; };
|
void MQStationPlugin::DeleteDrawingObject(MQDocument doc, MQObject obj);
CreateDrawingObject() で instant を FALSE にして作成したオブジェクトを削除します。
void MQStationPlugin::DeleteDrawingMaterial(MQDocument doc, MQMaterial mat);
CreateDrawingMaterial() で instant を FALSE にして作成したマテリアルを削除します。
void MQStationPlugin::DeleteDrawingText(MQDocument doc, MQDrawingText text);
(new in Rev4.50)
CreateDrawingText() で instant を FALSE にして作成したテキストを削除します。
int MQStationPlugin::GetCurrentUndoState(MQDocument doc);
bool GetCurrentUndoState(MQDocument doc, UNDO_STATE& undo_state)
現在のアンドゥの状態カウンタを取得します。
(new in Rev4.59)
struct UNDO_STATE { int state; bool can_undo; bool can_redo; };
|
bool MQStationPlugin::ExecuteUndo(MQDocument doc);
(new in Rev4.59)
アンドゥを実行します。
bool MQStationPlugin::ExecuteRedo(MQDocument doc);
(new in Rev4.59)
リドゥを実行します。
bool MQStationPlugin::ClearUndoBuffer(MQDocument doc);
(new in Rev4.59)
アンドゥバッファの内容を消去します。
[旧型式]
MQPoint MQStationPlugin::GetSnappedPos(MQScene scene, const MQPoint& p, SNAP_GRID_TYPE type);
(new in Rev4.20)
MQPoint MQStationPlugin::GetSnappedPos(MQScene scene, const MQPoint& p, const EDIT_OPTION& option, const GET_SNAP_PARAM& snap_param);
編集オプションで指定されているグリッド・平面・頂点・辺・面などへのスナップが行われたときの位置を取得します。
編集オプションで指定している状態以外へのスナップを行う場合、optionの内容を変更してください。
注意:旧型式の関数は互換性のため残されていますが、グリッド以外へのスナップを有効にするため新しい形式へ置換してくだい。
struct GET_SNAP_PARAM {
BOOL SnapEyeDir; // 視線方向へのスナップ
BOOL IgnoreSelected; // 選択部を無視
BOOL IgnoreCurObj; // カレントオブジェクトを無視
};
|