(new in Rev2.41)
MQCommandPlugin クラスは MQStationPlugin クラスを継承し、コマンドプラグインの実装に必要な関数を提供します。
この MQCommandPlugin クラスを継承して、必要な仮想関数の実装を行うことにより、本体との複雑なメッセージ処理を隠ぺい化して簡便な実装で常駐型コマンドプラグインを作成することができます。
MQCommandPlugin クラス内には各プラグイン・メッセージ処理関数が仮想関数として宣言されており、継承クラスで各仮想関数を実装する必要があります。
| クラス | |
| MQCommandPlugin | コンストラクタ |
| 上位クラスの宣言 | |
| GetPlugInID | プラグインIDの取得 |
| GetPlugInName | プラグイン名の取得 |
| EnumString | ボタンに表示される文字列を返す |
| Initialize | アプリケーションの初期化 |
| Exit | アプリケーションの終了 |
| Activate | 表示・非表示切り替え要求 |
| IsActivated | 表示・非表示状態の返答 |
| OnMinimize | ウインドウの最小化への返答 |
| OnReceiveUserMessage | プラグイン独自のメッセージの受け取り |
| OnDraw | 描画時の処理 |
| OnNewDocument | ドキュメント初期化時 |
| OnEndDocument | ドキュメント終了時 |
| OnSaveDocument | ドキュメント保存時 |
| OnUndo | アンドゥ実行時 |
| OnRedo | リドゥ実行時 |
| OnUpdateUndo | アンドゥ状態更新時 |
| OnObjectModified | オブジェクトの編集時 |
| OnObjectSelected | オブジェクトの選択状態の変更時 |
| OnUpdateObjectList | カレントオブジェクトの変更時 |
| OnMaterialModified | マテリアルのパラメータ変更時 |
| OnUpdateMaterialList | カレントマテリアルの変更時 |
| OnUpdateScene | シーン情報の変更時 |
| プラグイン | |
| GetPlugInType | プラグインの種類の取得 |
| メッセージ処理 | |
| OnLeftButtonDown | 左ボタンが押されたとき |
| OnLeftButtonMove | 左ボタンが押されながらマウスが移動したとき |
| OnLeftButtonUp | 左ボタンが離されたとき |
| OnMiddleButtonDown | 中ボタンが押されたとき |
| OnMiddleButtonMove | 中ボタンが押されながらマウスが移動したとき |
| OnMiddleButtonUp | 中ボタンが離されたとき |
| OnRightButtonDown | 右ボタンが押されたとき |
| OnRightButtonMove | 右ボタンが押されながらマウスが移動したとき |
| OnRightButtonUp | 右ボタンが離されたとき |
| OnMouseMove | マウスが移動したとき |
| OnMouseWheel | マウスのホイールが回転したとき |
| OnKeyDown | キーが押されたとき |
| OnKeyUp | キーが離されたとき |
| 上位クラスの補助関数 | |
| OpenSetting | 設定ファイルを開く |
| CloseSetting | 設定ファイルを閉じる |
| GetResourceString | リソース文字列を取得する |
| GetSettingValue | 設定値を取得する |
| GetSystemColor | システム色を取得する |
| GetResourceCursor | 標準マウスカーソルを取得 |
| GetScreenMouseCursor | スクリーン用マウスカーソルを取得 |
| SetScreenMouseCursor | スクリーン用マウスカーソルを設定 |
| GetLUTCount | LUTの数を取得 |
| GetLUTName | LUT名を取得 |
| GetLUTData | LUTデータを取得 |
| GetDefaultLUTData | 標準LUTデータを取得 |
| GetSceneOption | シーンの表示オプションを取得 |
| GetEditOption | 編集オプションを取得 |
| GetDisplayUnit | 表示単位を取得 |
| GetDisplayUnitString | 表示単位の文字列とスケールを取得 |
| GetFilename | ファイル名を取得 |
| SaveDocument | ドキュメントの保存 |
| InsertDocument | ドキュメントの挿入 |
| EnumLoadableImages | 読み込み可能な画像ファイルの種類を取得 |
| SendUserMessage | 他のプラグインにプラグイン独自のメッセージを送る |
| SetDrawProxyObject | 描画代替オブジェクトを設定 |
| UpdateUndo | アンドゥバッファを更新する |
| WindowClose | ウインドウを閉じる |
| BeginCallback | コールバック処理の開始 |
| ExecuteCallback | コールバックに対する実装部 |
| CreateDrawingObject | OnDraw()時に描画オブジェクトを追加 |
| CreateDrawingMaterial | OnDraw()時に描画オブジェクト用マテリアルを追加 |
| CreateDrawingText | OnDraw()時に描画テキストを追加 |
| DeleteDrawingObject | 描画オブジェクトを削除する |
| DeleteDrawingMaterial | 描画オブジェクト用マテリアルを削除する |
| DeleteDrawingText | 描画テキストを削除する |
| GetCurrentUndoState | 現在のアンドゥの状態カウンタを取得 |
| ExecuteUndo | アンドゥの実行 |
| ExecuteRedo | リドゥの実行 |
| ClearUndoBuffer | アンドゥバッファの消去 |
| SetUndoUsedMemory | アンドゥのメモリ使用量を設定 |
| GetSnappedPos | スナップ位置を取得 |
| 補助関数 | |
| RedrawScene | シーンの再描画を予約する |
| RedrawAllScene | すべてのシーンの再描画を予約する |
| HitTest | 対象物の検知 |
| HitTestObjects | 指定オブジェクト内での対象物の検知 |
| SetMouseCursor | ビュー用マウスカーソルを設定 |
| SetStatusString | ステータスバーの表示文字列を設定 |
| SetHelpPage | ヘルプページを設定 |
| ApplyLayoutToOptionPanel | オプションパネルへのレイアウトの適用 |
struct MOUSE_BUTTON_STATE {
POINT MousePos; // マウスカーソルの位置
int Wheel; // マウスホイールの回転量(WHEEL_DELTAの倍数または約数)
BOOL LButton; // 左ボタンが押されているか
BOOL MButton; // 中ボタンが押されているか
BOOL RButton; // 右ボタンが押されているか
BOOL Shift; // Shiftキーが押されているか
BOOL Ctrl; // Ctrlキーが押されているか
BOOL Alt; // Altキーが押されているか
float Pressure; // タブレットやタッチ操作時の圧力 (0-1)
};
マウスボタン・キーボードの状態を格納する構造体です。
(new in Rev4.20)
Pressureが追加されました。
MQCommandPlugin::MQCommandPlugin();
コンストラクタです。
virtual int MQCommandPlugin::GetPlugInType();
MQBasePlugin::GetPlugInType()で宣言された仮想関数を実装しています。継承クラス内で新たに実装を行う必要はありません。
virtual BOOL MQCommandPlugin::OnLeftButtonDown(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
左ボタンが押されたときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnLeftButtonMove(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
左ボタンが押されながらマウスが移動したときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnLeftButtonUp(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
左ボタンが離されたときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnMiddleButtonDown(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
中ボタンが押されたときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnMiddleButtonMove(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
中ボタンが押されながらマウスが移動したときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnMiddleButtonUp(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
中ボタンが離されたときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnRightButtonDown(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
右ボタンが押されたときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnRightButtonMove(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
右ボタンが押されながらマウスが移動したときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnRightButtonUp(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
右ボタンが離されたときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnMouseMove(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
マウスが移動したときに呼び出されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnMouseWheel(MQDocument doc, MQScene scene, MOUSE_BUTTON_STATE& state);
マウスのホイールが回転したときに呼び出されます。
ホイールの回転量は state.Wheel に WHEEL_DELTA の倍数または約数で入力されます。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnKeyDown(MQDocument doc, MQScene scene, int key, MOUSE_BUTTON_STATE& state);
キーが押されたときに呼び出されます。
key の仮想キーコードは WM_KEYDOWN で得られる内容と同じものです。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
virtual BOOL MQCommandPlugin::OnKeyUp(MQDocument doc, MQScene scene, int key, MOUSE_BUTTON_STATE& state);
キーが離されたときに呼び出されます。
key の仮想キーコードは WM_KEYUP で得られる内容と同じものです。
プラグイン独自の動作を行った場合にはTRUEを、独自処理を行わず標準動作を行わせる場合にはFALSEを戻り値として返します。
void MQCommandPlugin::RedrawScene(MQScene scene);
シーンの再描画を予約します。
この関数は再描画の更新を予約するだけであり、実際の描画の更新はプラグインのイベント制御処理を終了して Metasequoia 本体側にへ処理が戻ってから行われます。
void MQCommandPlugin::RedrawAllScene();
すべてのシーンの再描画を予約します。
この関数は再描画の更新を予約するだけであり、実際の描画の更新はプラグインのイベント制御処理を終了して Metasequoia 本体側にへ処理が戻ってから行われます。
BOOL MQCommandPlugin::HitTest(MQScene scene, POINT p, HIT_TEST_PARAM& param);
(new in Rev2.49)
シーン内の指定された位置上または付近にある面・ライン・頂点を検知します。
param内のTestVertex、TestLine、TestFaceにそれぞれ検知を行う対象を入力してこの関数を呼び出すと、戻り値にTRUEが返ったときにHitTypeに対象物の種類、HitPosに位置、ObjectIndex・VertexIndex・LineIndex・FaceIndexにインデックスが格納されます。
struct HIT_TEST_PARAM {
// input
BOOL TestVertex; // 頂点の検知を行う
BOOL TestLine; // ラインを検知
BOOL TestFace; // 面を検知
BOOL DisableFrontOnly; // 前面のみの検知を無効化
BOOL DisableCoverByFace; // 手前の面による頂点・ラインの遮蔽を無効化
// output
HIT_TYPE HitType; // 検知されたタイプ
MQPoint HitPos; // 検知された位置
int ObjectIndex; // 検知されたオブジェクト
int VertexIndex; // 頂点のインデックス(頂点が検知されたときのみ)
int LineIndex; // ラインのインデックス(ラインが検知されたときのみ)
int FaceIndex; // 面のインデックス(ラインまたは面が検知されたときのみ)
};
|
// 編集オプションを取得
EDIT_OPTION option;
GetEditOption(option);
// 対象物の検知して選択する
HIT_TEST_PARAM param;
param.TestVertex = option.EditVertex;
param.TestLine = option.EditLine;
param.TestFace = option.EditFace;
if(HitTest(scene, state.MousePos, param)){
if(param.HitType == HIT_TYPE_VERTEX){
doc->AddSelectVertex(param.ObjectIndex, param.VertexIndex);
}else if(param.HitType == HIT_TYPE_FACE){
doc->AddSelectFace(param.ObjectIndex, param.FaceIndex);
}else if(param.HitType == HIT_TYPE_LINE){
doc->AddSelectLine(param.ObjectIndex, param.FaceIndex, param.LineIndex);
}
}
BOOL MQCommandPlugin::HitTestObjects(MQScene scene, POINT p, const std::vector<MQObject>& objects, HIT_TEST_PARAM& param);
(new in Rev4.02)
指定オブジェクト内から、指定された位置上または付近にある面・ライン・頂点を検知します。
objects にはドキュメント内のオブジェクトだけではなく、CreateDrawingObject() で作成された描画オブジェクトや MQ_CreateObject() で作成されたドキュメント未登録のオブジェクトも含めることができます。
検知された場合、param.ObjectIndex には objects 配列内のインデックスが格納されます。
void MQCommandPlugin::SetMouseCursor(HCURSOR cursor);
(new in Rev2.46)
3Dビューにマウスカーソルを設定します。
設定するカーソルはMQBasePlugin::GetResourceCursor()で取得したものか、またはWin32APIのLoadCursor()で得られるDLLのインスタンスが保持するリソースカーソルを指定して下さい。LoadCursor()でインスタンスにNULLを指定して得られる定義済みカーソルを指定した時の動作は保証されません。
ウィジェットにカーソルを設定する場合はMQWidgetBase::SetCursor()を呼び出してください
3Dビュー、ウィジェット以外を含む画面全体に対してのマウスカーソルを変更する場合はMQBasePlugin::SetScreenMouseCursor()を呼び出してください。
void MQCommandPlugin::SetStatusString(const char *str);
void MQCommandPlugin::SetStatusString(const wchar_t *str);
(new in Rev2.49)
ステータスバー上に表示する文字列を設定します。
void MQCommandPlugin::SetHelpPage(const wchar_t *url);
(new in Rev4.11)
コマンドに連動して表示するヘルプページのURLを設定します。
ヘルプページが別途必要になるため通常のプラグインでは使用しません。標準組み込みのプラグインで使用されます。
void MQCommandPlugin::ApplyLayoutToOptionPanel();
(new in Rev4.50)
オプションパネルに既定のレイアウトを適用します。
レイアウトの定義ファイルが別途必要になるため通常のプラグインでは使用しません。標準組み込みのプラグインで使用されます。