今回は、Maya APIを使って単純なコマンドプラグインを作成してみましょう。
PythonではなくC++を使い、Visual Studio 2017のプロジェクト設定方法から行います。
入門にしたつもりがちょっと難しい内容になってしまったかもしれません…。
是非チャレンジしてみてくださいね!
管理人がYouTubeで解説!
DeclareSimpleCommand?
簡単にコマンドを作れるマクロです。
ただ、1つのプラグインに対して1つのコマンドしか作成できません。
開発ではMPxCommandといったものを使うケースが多いですが、今回は入門としてDeclareSimpleCommandを利用しました。
DeclareSimpleCommandの引数について
DeclareSimpleCommand(HelloMayaCommand, “TECH ART ONLINE”, “2020”)
これの HelloMayaCommand, “TECH ART ONLINE”, “2020” ってところです。
これは、
・コマンドを実装しているクラス名
・コマンドの作者名
・コマンドのバージョン番号
となります。
注:DeclareSimpleCommandではUndoの実装ができません。
そもそもコマンドプラグインの基本は、Undoも自身で実装する必要があります!
MELやPythonのコマンドではUndo/Redoも勝手にやってくれてましたよね。
それはMayaのMELやPythonの内部でしっかりUndoを定義してくれているからです。
自身でコマンドプラグインを作るときは、自身でUndoも定義する必要があります。
これが結構面倒くさいんですよね…。
サンプルコード:スクリプトエディタに「Hello Maya Command」と表示する
#include <maya/MSimple.h>
#include <maya/MGlobal.h>
DeclareSimpleCommand(HelloMayaCommand, "TECH ART ONLINE", "2020");
MStatus HelloMayaCommand::doIt(const MArgList& args)
{
MString text = "Hello Maya Command";
MGlobal::displayInfo(text);
return MS::kSuccess;
}
サンプルコード:選択したポリゴンメッシュの頂点数をスクリプトエディタに表示する
#include <maya/MSimple.h>
#include <maya/MGlobal.h>
#include <maya/MSelectionList.h>
#include <maya/MFnMesh.h>
#include <maya/MDagPath.h>
#include <maya/MItSelectionList.h>
DeclareSimpleCommand(getMeshVertexCount, "TECH ART ONLINE", "2020");
MStatus getMeshVertexCount::doIt(const MArgList& args)
{
MSelectionList selection;
MGlobal::getActiveSelectionList(selection);
MItSelectionList iter(selection, MFn::kMesh);
MDagPath dagPath;
MFnMesh fnMesh;
for (; !iter.isDone(); iter.next())
{
iter.getDagPath(dagPath);
fnMesh.setObject(dagPath);
int numVertices = fnMesh.numVertices();
char text[100];
sprintf_s(text, "%s, vertex count = %d", dagPath.partialPathName().asChar(), numVertices);
MGlobal::displayInfo(text);
}
return MS::kSuccess;
}
コメント