説明された C++ の Hello World のサンプル

Hello World のサンプルは、プラグイン開発の重要なコンポーネントをいくつか示します。

doIt と MArgList

この単純な例では、doIt() は引数を解析して、Maya 出力ウィンドウに書き込みます。

MArgList はプラグインの引数を収集して、リストに保存します。また、C と C++ の標準の argc および argv にも同様な機能を提供します。

asString() 関数はリストの引数を MString オブジェクトとして返します。asChar() 関数は MString を C++ の char * に変換します。

MStatus helloWorld::doIt( const MArgList& args ) {
    cout << "Hello World " << args.asString( 0 ).asChar() << endl;
    return MS::kSuccess;
}

より複雑なコマンド プラグインでは、doIt() は引数を解析し、内部データを設定し、その他のハウスキーピング処理を行ってから、redoIt() 関数を呼び出します。その後、redoIt() 関数はコマンドのアクションを実行します。

ほとんどの API 関数と同様に、doIt()MStatus オブジェクトを返します。返されたステータスは、さらに複雑なプラグインでエラー処理やエラー ロギングに使用できます。この場合、プラグインは常に、成功を表すステータス コード MS:kSuccess を返します。

詳細については、「doIt() 関数と redoIt() 関数」を参照してください。

コマンドをインスタンス化する

コマンドは creator() を使用してインスタンス化されます。

void* helloWorld::creator() {
    return new helloWorld;
}

プラグインを初期化および初期化を解除する

すべてのプラグインは、initializePlugin() 関数を実装する必要があります。次に、この関数が registerCommand() を呼び出します。initializePlugin() が実装されていない場合、プラグインのロードは失敗します。

同様に、すべてのプラグインは uninitializePlugin() 関数を実装する必要があります。次に、この関数が deregisterCommand() を呼び出します。

詳細については、「プラグインの初期化と初期化解除」を参照してください。

MStatus initializePlugin( MObject obj ) {
    MFnPlugin plugin( obj, "Autodesk", "1.0", "Any" );
    plugin.registerCommand( "HelloWorld", helloWorld::creator );
    return MS::kSuccess;
}

MStatus uninitializePlugin( MObject obj ) {
    MFnPlugin plugin( obj );
    plugin.deregisterCommand( "HelloWorld" );
    return MS::kSuccess;
}