(new in Rev2.40)
MQStationPlugin クラスは MQBasePlugin クラスを継承し、常駐型プラグインの実装に必要な関数を提供します。
この MQStationPlugin クラスを継承して、必要な仮想関数の実装を行うことにより、本体との複雑なメッセージ処理を隠ぺい化して簡便な実装で常駐型プラグインを作成することができます。
MQStationPlugin クラス内には各プラグイン・メッセージ処理関数が仮想関数として宣言されており、継承クラスで各仮想関数を実装する必要があります。
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)
環境設定が変更された時に呼び出されます。
virtual bool MQStationPlugin::OnQueryInterpolate(MQDocument doc, MQObject dstobj, MQObject srcobj, INTERPOLATE_TYPE type, INTERPOLATE_REASON reason);
(new in Rev4.72)
頂点や面内頂点が持つ属性値の補間が行われる際に、このプラグイン内で独自の属性値の補間が必要かどうかを確認するために呼び出されます。
補間処理が必要なときのみtrueを返してください。falseを返すとOnInterpolateVertexData()やOnInterpolateApexData()は呼び出されません。
補間理由によってはdstobjとsrcobjが同じオブジェクトであることがあります。
virtual bool MQStationPlugin::OnInterpolateVertexData(MQDocument doc, MQObject obj, int vert, INTERPOLATE_VERTEX_PARAM *valarray, int valnum);
(new in Rev4.72)
プラグイン独自の頂点の属性値の補間が必要な場合に呼び出されます。属性値の補間処理を独自に実装してください。
virtual bool MQStationPlugin::OnInterpolateApexData(MQDocument doc, MQObject obj, int face, int apex, INTERPOLATE_APEX_PARAM *valarray, int valnum);
(new in Rev4.72)
プラグイン独自の面内頂点の属性値の補間が必要な場合に呼び出されます。属性値の補間処理を独自に実装してください。
virtual bool MQStationPlugin::OnUseClipboard(MQDocument doc, MQObject obj, CLIPBOARD_METHOD method, CLIPBOARD_PARAM& param);
(new in Rev4.72)
クリップボードを使用するコピー・ペースト操作が行われる際に呼び出されます。プラグイン独自の内容を格納・取り出す必要がある場合はtrueを返します。
methodがCLIPBOARD_QUERY_COPYの場合、param内のSelectedVertexCount, SelectedLineCount, SelectedFaceCountまたはプラグイン独自の選択要素の数に基づいて、コピーが可能かどうかを戻り値として返します。
methodがCLIPBOARD_COPYの場合、paramのAllocBuffer()を呼び出し、返されるバッファにクリップボードへ転送する内容を格納する必要があります。objには選択面のみが切り出されて一つのオブジェクトに合成された結果が格納されており、元のオブジェクトのどの頂点・面に該当するかをparamのMakeOrgVertexIDTable(), MakeOrgFaceIDTable(), MakeOrgVertexIDToNewIndexMap(), MakeOrgFaceIDToNewIndexMap()の各関数を経由して取得することができます。
methodがCLIPBOARD_PASTEの場合、param内のBuffer,BufferSizeのバッファ内から値を取り出すことで独自のペースト処理を行います。objはペースト処理によって新しく作成されたオブジェクトとなります。
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() が呼び出されたら、その時点で削除してください。
MQMaterial MQStationPlugin::CreateDrawingMaterialByClone(MQDocument doc, MQMaterial clone_source, 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)
アンドゥバッファの内容を消去します。
void MQStationPlugin::SetUndoUsedMemory(MQDocument doc, int target_undo_state, size_t data_size)
(new in Rev4.60)
指定したアンドゥの状態カウンタにおける、プラグイン独自のデータによるメモリ使用量を設定します。
この関数を呼び出すとアンドゥ全体のメモリ使用量がチェックされ、必要に応じてアンドゥ可能な回数が更新されます。
(in Rev4.80)
引数が変更されました。
[旧型式]
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; // カレントオブジェクトを無視
};
|