ツール コンテキスト(MPxContext と MPxTexContext)の基本的なインタフェースは次のとおりです。
virtual MStatus doPress ( MEvent & event );virtual MStatus doRelease ( MEvent & event );virtual MStatus doDrag ( MEvent & event );virtual MStatus doHold ( MEvent & event );ビューポート 2.0(Viewport 2.0)のインタフェースは、旧式のインタフェースと使用方法を一致させようとしていますが、MUIDrawManager とフレーム コンテキスト(MFrameContext)にアクセスできる点が異なります。
virtual MStatus doPress ( MEvent & event, MHWRender::MUIDrawManager& drawMgr, const MHWRender::MFrameContext& context);virtual MStatus doRelease( MEvent & event, MHWRender::MUIDrawManager& drawMgr, const MHWRender::MFrameContext& context);virtual MStatus doDrag ( MEvent & event, MHWRender::MUIDrawManager& drawMgr, const MHWRender::MFrameContext& context);virtual MStatus doHold ( MEvent & event, MHWRender::MUIDrawManager& drawMgr, const MHWRender::MFrameContext& context);virtual MStatus drawFeedback ( MHWRender::MUIDrawManager& drawMgr, const MHWRender::MFrameContext& context );drawFeedback() は、3D カーソルを常に描画するなどの連続的な更新が必要となるシナリオを可能とするために存在します。
marqueeTool プラグイン サンプルは、描画を実行する MUIDrawManager のインスタンスの使用例を示します。旧式の既定ビューポート(Legacy Default Viewport)では、描画するものをドライブするために入力イベントを使用することができます。
Mstatus marqueeContext::doDrag (
MEvent & event,
MHWRender::MUIDrawManager& drawManager,
const MHWRender::MFrameContext& context)
{
// Get the marquee's new end position.
event.getPosition( last_x, last_y );
// Draw the marquee at its new position.
// Always drawn last so no need for complicated XOR
drawManager.beginDrawable();
drawManager.setColor( MColor(1.0f, 1.0f, 0.0f) );
drawManager.line2d( MPoint( start_x, start_y), MPoint(last_x, start_y) );
drawManager.line2d( MPoint( last_x, start_y), MPoint(last_x, last_y) );
drawManager.line2d( MPoint( last_x, last_y), MPoint(start_x, last_y) );
drawManager.line2d( MPoint( start_x, last_y), MPoint(start_x, start_y) );
drawManager.endDrawable();
return MS::kSuccess;
}
ビューポート 2.0(Viewport 2.0)では、XOR 描画を処理するために特別な描画コードは必要ありません。
すべてコンテキスト描画をオーバーレイの描画と考えることができるためです。**このため、各イベントでは、現在の描画のみを実行する必要があり、XOR 描画を使用して直前の描画を「削除」する必要はありません。
注: ビューポート 2.0 の描画では、
M3dView::beginXorDrawing()/endXorDrawing()を使用しないでください。
上のサンプルでは、現在の 2D セレクション ボックスをシンプルに描画するマウス ドラッグ コードを例示しています。