マニピュレータ(MPxManipulatorNode と MPxManipContainer)は、次のインタフェースを使用して、旧式のビューポートに描画されます。
ビューポート 2.0(Viewport 2.0)のインタフェースは、旧式のインタフェースと使用方法を一致させようとしていますが、MUIDrawManager とフレーム コンテキスト(MFrameContext)にアクセスできる点が異なります。
ビューポート 2.0(Viewport 2.0)と旧式のビューポートの間の主な違いの 1 つは、描画時に M3dView (3D ビューポートのラッパ)を使用できなくなった点です。同等の状態情報は、フレーム コンテキストから抽出されます。
サンプル プラグイン footPrintLocatorManip のサンプル コードを以下に示します。
void footPrintLocatorManip::preDrawUI( const M3dView &view ) { // Update text drawing position fTextPosition = // DG evaluation } void footPrintLocatorManip::drawUI( MHWRender::MUIDrawManager& drawManager, const MHWRender::MFrameContext& frameContext ) const { // Draw some text drawManager.beginDrawable(); drawManager.setColor( MColor( 0.0f, 1.0f, 0.1f ) ); drawManager.text( fTextPosition, “Some text", MHWRender::MUIDrawManager::kLeft ); drawManager.text2d( MPoint(100,100), “Some text in 2D", MHWRender::MUIDrawManager::kLeft ); drawManager.endDrawable(); }
ここでは、テキストの位置を計算し、fTextPosition に格納します。この値は、MUIDrawManager インスタンスを使用してテキストを描画する位置を設定するために、描画時に使用されます。
選択するには、MPxManipContainer に含まれる一連のマニピュレータを使用することをお勧めします。プラグインでサブパーツ(handle)を選択する必要がある場合は、void MUIDrawManager::beginDrawable(unsigned int name, bool nameIsPickable); メソッド使用することができます。name 引数はデバイスから独立しており、MPxManipulatorNode::glActiveName()メソッドと一緒に使用することができます。name は、選択のためだけに使用され、通常の描画パスでは無視されます。
lineManip プラグインは、サンプルの使用方法を示します。
void lineManip::drawUI( MHWRender::MUIDrawManager& drawManager, const MHWRender::MFrameContext& frameContext ) const { // Find out if we should draw using selected color bool drawAsSelected = false; shouldDrawHandleAsSelected(lineName, drawAsSelected); // Everything from begin/endDrawable has the lineName handle and is considered to be pickable drawManager.beginDrawable(lineName, true); drawManager.setColorIndex( drawAsSelected ? fSelectedLineColorIndex : fLineColorIndex ); drawManager.line( fLineStart, fLineEnd ); drawManager.endDrawable(); // The text is not considered to be pickable drawManager.beginDrawable(); drawManager.setColorIndex( fLineColorIndex ); drawManager.text( fLineStart, MString("line manip")); drawManager.endDrawable(); // The 2d line is considered to be pickable and has the same handle. drawManager.beginDrawable(lineName, true); drawManager.setColorIndex( drawAsSelected ? fSelectedLineColorIndex : fLineColorIndex ); drawManager.line2d(MPoint(100, 100), MPoint(200, 100)); drawManager.setLineWidth(5.0f); drawManager.endDrawable(); // The 2d text is not considered to be pickable drawManager.beginDrawable(); drawManager.setColorIndex( fLineColorIndex ); drawManager.setLineWidth(5.0f); drawManager.text2d(MPoint(100, 105), MString("line manip 2D")); drawManager.endDrawable(); }