前言
本系列(Maya插件)讲解的是关于用C++开发Maya插件. 首先安装Maya, 用到的文件如下(按安装顺序):
1. isscript.msi (系统缺少这个,Maya将安装失败);
2. Maya2009.msi (Maya安装包);
3. Maya_Docs_en_US2009.msi (Maya开发文档).
安装完毕后,本人的Maya相关路径如下, 以后的Maya插件中将使用该路径.
1. 安装目录:C:/Program Files/Autodesk/Maya2009/
2. 用户目录:D:/Backup/我的文档/maya/
Mel Command命令插件
Mel(Maya Embeded Language)命令指的能够在命令解释器里运行的命令。所有的自定义命令要从MPxCommand类继承,
看如下代码MyCommand.h
SimpleCommand类需要改写virtual函数 doIt(const MArglist &args); static void* creator()用于生成一个类对象.
下面看一下SimpleCommand的实现代码SimpleCommand.cpp
可以看到SimpleCommand::doIt()只是简单地打印出字符串, 这是为观察SimpleCommand对象的行为做准备. SimpleCommand类的实例用于执行具体的任务,那么该对象由谁创建并触发doIt()呢?
命令对象的注册
我们需要注册该命令对象,并且在输入命令的时候(这里使用"HelloWorld"), Maya创建该对象并触发doIt(). 看如下注册代码
plugMain.cpp
Maya中的插件是一个动态链接库,只不过后缀名为mll. MLL_EXPORT MStatus initializePlugin(MObject obj) 和
MLL_EXPORT MStatus uninitializePlugin(MObject obj)是该DLL的导出函数,前者将在DLL加载时被调用;后者将在DLL
被卸载时调用.
/// register the command
MStatus status = plugin.registerCommand("HelloWorld", SimpleCommand::creator); 注册了命令"HelloWorld",并
告诉Maya:函数SimpleCommand::creator()将会返回命令对象.
/// deregister the PxCommand
MStatus status = plugin.deregisterCommand("HelloWorld"); 注销命令.
完整的Source Code下载URL:http://download.csdn.net/source/2700425
运行并观察
1. 将Build成功的插件MyCommand.mll放入Maya的安装目录下的/bin/plug-ins/;
2. 在Maya中加载插件, 菜单路径为: Window --> Settings/Preferences --> PluginManager;
3. 在脚本命令窗口输入:HelloWorld
4. 查看输入结果
由此看出,每执行一次HelloWorld, 都会创建一个SimpleCommand对象实例,执行完毕后销毁!