ずっとMaya APIを作ろうとしていて放置していました。そのおかげでせっかく勉強したこともほとんど忘れてしまいました。
もう一度習得しなおそうと思います。そして今度こそMayaのプラグイン作ります。勉強したことをちょくちょく書いていこうと思います。
さて、とりあえず始めはAPIを作る上で最低限必要な関数をおさらいしておきます。
以下がMaya APIを作る上で最低限必要な関数です。
・initializePlugin() ⇒ プラグインロード時に実行される関数
・uninitializePlugin() ⇒ プラグインアンロード時に実行される関数
・コマンド用クラス ⇒ コマンドを定義するためにコマンドのclassはMPxCommandを継承する
例えばTestCmdというクラスの場合
class TestCmd:public MPxCommand{
public:
virtual MStatus doIt(const MArgList&);
static void *creator(){return new TestCmd}
}
というように定義します。
doItはコマンドの中身を実行するものです。creatorはコマンドが実行される毎にコマンドのインスタンスを生成します。これはundo、redoを可能にするためです。
・コマンドの実行する中身を定義する関数(doIt)
MStatus TestCmd::doIt(const MArgList& args){
}
以下はhelloと表示するだけのサンプルコードです。
#include <maya/MPxCommand.h>
#include <maya/MGlobal.h>
#include <maya/MFnPlugin.h>
class testCmd : public MPxCommand{
public:
virtual MStatus doIt(const MArgList&)
{
MGlobal::displayInfo("hello\n");
return MS::kSuccess;
}
static void *creator() {
return new testCmd;
}
};
MStatus initializePlugin( MObject obj ){
MFnPlugin plugin(obj,"wsp", "1.0");
MStatus stat;
stat = plugin.registerCommand("test", testCmd::creator);
if(!stat)
stat.perror("registerCommand failed");
return stat;
}
MStatus uninitializePlugin(MObject obj){
MFnPlugin plugin(obj);
MStatus stat;
stat = plugin.deregisterCommand("test");
if(!stat)
stat.perror("deregisterCommand failed");
return stat;
}