ラッパーは、ベクトルや行列などの単純なオブジェクトに使用します。通常、ラッパーはパブリックなコンストラクタとデストラクタを含む、完全実装 C++ クラスです。メソッドがラッパーを返した場合、以下の操作が必要です。ユーザーが参照するラッパーは、常にユーザー自身の所有となります。
必要に応じて、ラッパーを割り当てたり、割り当てを解除できます。通常、スコープを離れさえすればラッパーは削除されます。
重要: ラッパー宣言(MIntArray や MFloatArray など)をできるだけループの少ない場所に移動してください。多くの場合、ラッパーのコンストラクタが新規に呼び出されるのは、内部の Maya オブジェクトを割り当てる場合です。したがって、ループの深い場所でラッパーを宣言すると、メモリの配分と配分解除が繰り返し行われます。これは、MGlobal などの静的ラッパー クラスでは行われません。
以下は、らせん形のカーブを構築するプラグインです。NURBS ジオメトリの簡単な説明は、付録 A: NURBS ジオメトリを参照してください。
この例では、MPointArray と MDoubleArray がラッパーです。
#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 ビューに表示されます。