シェイプ作成のゴールは、定義したジオメトリ クラスを取り、DAG オブジェクトの形式でそのジオメトリを Maya に統合することです。
ジオメトリ固有の情報は、ジオメトリ クラス内に維持してください。こうすると、ディペンデンシー グラフ データとしてジオメトリを表現しやすくなります。ジオメトリ固有の情報をジオメトリ クラス内に維持すると、ジオメトリ固有の描画情報を Maya の描画要求待ち行列に描画データとして渡す場合に描画を処理しやすくなります。
ユーザ定義シェイプは、描画機能、選択機能、コンポーネント機能が加わるため、DG ノードより複雑です。コードを書き始める前に、まずシェイプ ノードの設計から始めるのがよいでしょう。シェイプ ノードの設計には、入出力アトリビュートの定義と、アトリビュート間のリレーションシップ(関係、影響)の決定が含まれます。
最も単純なシェイプは、コンポーネントやジオメトリ データを含まないシェイプです。たとえば、入力半径、X ディビジョン、Y ディビジョンを取り、球のジオメトリを計算して openGL で描画する球シェイプがあります。
シェイプを段階的に作成することもよい考えです。まず、MPxSurfaceShape と MPxSurfaceShapeUI から派生させます。MPxSurfaceShape クラスの作成は、MPxNode クラスの作成と同じです。その他の仮想関数は、必要に応じてオーバーライドすることができます。
ユーザ定義シェイプの作成方法の詳細については、http://around-the-corner.typepad.com/adn/2012/09/custom-shapes-in-the-maya-api-1.html の記事を参照してください。この記事では、ユーザ定義のシェイプおよびいくつかのサンプル プラグインを作成するプロセスについて説明します。
Maya へのシェイプの登録は、DG ノードの登録に似ています。唯一の違いは、シェイプ ノードと同時に登録する必要がある、独立した UI クラスがあることです。シェイプの登録には、MFnPlugin::resgisterShape 関数を使用します。シェイプの登録解除は、ノードの登録解除とまったく同じです。以下はシェイプ登録の例です。
MStatus initializePlugin( MObject obj ) { MFnPlugin plugin( obj,"Autodesk","2.0", "Any"); return plugin.registerShape( "yourShape", yourShape::id, &yourShape::creator, &yourShape::initialize, &yourShapeUI::creator ); } MStatus uninitializePlugin( MObject obj ) { return plugin.deregisterNode( yourShape::id ); }