ラッパー

ラッパーは、ベクトルや行列などの単純なオブジェクトに使用します。通常、ラッパーはパブリックなコンストラクタとデストラクタを含む、完全実装 C++ クラスです。メソッドがラッパーを返した場合、以下の操作が必要です。ユーザーが参照するラッパーは、常にユーザー自身の所有となります。

必要に応じて、ラッパーを割り当てたり、割り当てを解除できます。通常、スコープを離れさえすればラッパーは削除されます。

重要: ラッパー宣言(MIntArrayMFloatArray など)をできるだけループの少ない場所に移動してください。多くの場合、ラッパーのコンストラクタが新規に呼び出されるのは、内部の Maya オブジェクトを割り当てる場合です。したがって、ループの深い場所でラッパーを宣言すると、メモリの配分と配分解除が繰り返し行われます。これは、MGlobal などの静的ラッパー クラスでは行われません。

以下は、らせん形のカーブを構築するプラグインです。NURBS ジオメトリの簡単な説明は、付録 A: NURBS ジオメトリを参照してください。

この例では、MPointArrayMDoubleArray がラッパーです。

#include <math.h>
#include <maya/MIOStream.h>
#include <maya/MSimple.h>
#include <maya/MPoint.h>
#include <maya/MPointArray.h>
#include <maya/MDoubleArray.h>
#include <maya/MFnNurbsCurve.h>
DeclareSimpleCommand( doHelix, "Autodesk - Example", "2017");
MStatus doHelix::doIt( const MArgList& )
{
    MStatus stat;
    const unsigned deg = 3; // Curve Degree
    const unsigned ncvs = 20; // Number of CVs
    const unsigned spans = ncvs - deg; // Number of spans
    const unsigned nknots = spans+2*deg-1; // Number of knots
    double radius = 4.0; // Helix radius
    double pitch = 0.5; // Helix pitch
    unsigned i;
    MPointArray controlVertices;
    MDoubleArray knotSequences;
    // Set up cvs and knots for the helix
    //
    for (i = 0; i < ncvs; i++)
        controlVertices.append( MPoint( radius * cos( (double)i ),
        pitch * (double)i, radius * sin( (double)i ) ) );
    for (i = 0; i < nknots; i++)
        knotSequences.append( (double)i );
    // Now create the curve
    //
    MFnNurbsCurve curveFn;
    MObject curve = curveFn.create( controlVertices,
        knotSequences, deg, MFnNurbsCurve::kOpen, false, false, MObject::kNullObj, &stat );
    if ( MS::kSuccess != stat )
        cout << "Error creating curve.\n";
    return stat;
}

このプラグインをコンパイルしてロードし、プロンプトに「doHelix」と入力してください。らせん形のカーブが Maya ビューに表示されます。