ツール コンテキスト

ツール コンテキスト(MPxContextMPxTexContext)の基本的なインタフェースは次のとおりです。

ビューポート 2.0(Viewport 2.0)のインタフェースは、旧式のインタフェースと使用方法を一致させようとしていますが、MUIDrawManager とフレーム コンテキスト(MFrameContext)にアクセスできる点が異なります。

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 セレクション ボックスをシンプルに描画するマウス ドラッグ コードを例示しています。