次に、必要最小限のカスタム .NET コマンドの例を示します。
using System; using Autodesk.Maya.Runtime; using Autodesk.Maya.OpenMaya; [assembly: MPxCommandClass(typeof(MayaNetPlugin.helloWorldCmd), "helloWorldCmd")] [assembly: ExtensionPlugin(typeof(MayaNetPlugin.helloWorldPlugin), "Autodesk", "1.0", "Any")] namespace MayaNetPlugin { public class helloWorldPlugin : IExtensionPlugin { bool IExtensionPlugin.InitializePlugin() { return true; } bool IExtensionPlugin.UninitializePlugin() { return true; } String IExtensionPlugin.GetMayaDotNetSdkBuildVersion() { String version = ""; return version; } } public class helloWorldCmd : MPxCommand,IMPxCommand { public override void doIt(MArgList argl) { MGlobal.displayInfo("Hello World\n"); } } }
この単純な例では、Maya 出力(Output)ウィンドウに文字列を出力する helloWorld Maya コマンドを C# で作成する方法を例示します。
2 つの using Autodesk.Maya… ディレクティブは、.NET SDK のネームスペースを追加します。このようにすると、これらのネームスペースの型を修飾なしで使用できます。ディレクティブを使用しないと、Autodesk.Maya.OpenMaya.MPxCommand のように、ファイル内で型の完全な名前を記述する必要があります。
このプラグインは、2 つの論理的な部分で構成されます。IExtensionPlugin インタフェースの実装と、コマンド自体です。
ExtensionPlugin アセンブリ アトリビュートは、IExtensionPlugin の実装を指します。
IExtensionPlugin.InitializePlugin() を実装するとき、初期化を続行できる場合は true を返します。プラグインをロードできない場合は、false が返されて、Maya はロード処理を中止します。IExtensionPlugin.UninitializePlugin() についても同じです。
IExtensionPlugin.GetMayaDotNetSdkBuildVersion() を実装するときは、プラグインのビルドに使用している API のバージョン番号を返すか、または空の文字列を返すことができます。
MPxCommandClass アセンブリのアトリビュートは、プラグインのタイプを .NET SDK に対して示します。MPxCommandClass アトリビュートは、ユーザ定義コマンドを実装しているクラスの型とコマンドの名前をパラメータとして受け取る必要があります。クラスの型を指定するには、typeof 演算子を使用します。アトリビュートは MayaNetPlugin ネームスペースの外部にあるので、typeof 演算子にはネームスペースを含むクラスのフル パスを指定する必要があります。
namespace MayaNetPlugin: すべての型は、ネームスペース内で宣言されている必要があります。C# のネームスペースは、クラス、構造体、インタフェース、列挙を含むことができます。ネームスペースは、コードを整理したり、名前の衝突を防ぐのに役立ちます。
public class helloWorldCmd : MPxCommand, IMPxCommand: helloWorldCmd クラスは、MPxCommand クラスから派生し、IMPxCommand インタフェースを実装します。複数のインタフェースを使用できますが、1 つのクラスからのみ派生できます。MPxCommand はユーザ コマンドの基本クラスであり、すべてのコマンドはこのクラスから派生します。
public override void doIt(MArgList argl): コマンドのアクションを実行するには、doIt() を使用します。