0002 Maya插件开发之C++篇

Maya可以通过三种语言进行插件开发,分别是Python, C++, C#,我准备用几篇文章分别做个入门介绍,抛砖引玉。这里的插件是指使用API开发的结果,所以没有提到MEL。如果是写脚本的话建议直接使用Python好了,MEL可以看一下语法,看得懂就行。

这篇文章将包含三小部分:

1. 开发环境准备与项目模板

2. 写一个最简单的插件HiMaya

3. 正常包含多条命令的插件HelloMaya

首先是开发环境。要用C++开发肯定得装Visual Studio了。可是官方的说法几乎是一个Maya版本要装一个VS,有一点点坑人。就只有一条路,按它指定的VS版本通过向导一步步做。对于要跨多个版本支持的就有点烦了,谁都不想装一堆VS。

不想搞那么多没用的,直接装Visual Studio Community 2017吧,在这:https://visualstudio.microsoft.com/zh-hans/downloads/ 组件的话建议你大多数都装上,最少需要装上这二个(因为后面还要用到C#): 

Maya肯定也是需要都装好的,我机器上现在的版本是2014。没安装的当然先把Maya装上。

一般会再去安装Maya的SDK,不过不是必须的,有的版本Maya安装时就已经装上了。没有的话直接跑到Autodesk官网搜索maya devkit。

https://www.autodesk.com/developer-network/platform-technologies/maya

接下来创建C++空项目: 

创建源文件hi_maya.cpp后修改项目属性:(扩展名改为.mll, 类型为动态库)

接着修改包含目录:

加入预处理器指令:WIN32; NDEBUG; _DEBUG; _WINDOWS; NT_PLUGIN; REQUIRE_IOSTREAM; _USRDLL; MAYAPLUGIN1_EXPORTS; 

链接器附加库目录:

添加以下附加依赖项: Foundation.lib; OpenMaya.lib; OpenMayaUI.lib; OpenMayaAnim.lib; OpenMayaFX.lib; OpenMayaRender.lib; Image.lib; opengl32.lib;

命令行加入其它选项: /export:initializePlugin /export:uninitializePlugin

来写个最简单的插件:输入以下代码后编译生成插件文件HiMaya.mll(源代码会放到git上, 先看截图):

打开Maya, 通过Window/Settings Preferences/Plugin Manager/Browser到生成目录加载HiMaya.mll插件:

可以看到插件特性里有一条命令叫HiMaya,我们可以在脚本中通过MEL或Python来调用,测试:

到这里,已经成功写出了一个插件,给Maya添加了一条新的命令。只不过用了10行代码而已,简单吧。真的简单,不过正如代码中的DeclareSimpleCommand所言,这种方式只适合一条命令的插件。用于激励自己还是不错的^_^,可以随便看看其它插件:

那么类似普遍情况的、包含众多命令的插件怎么写呢?先不急,先把这个HiMaya项目导出成模板,免得后面每个项目要设置半天。

从VS项目/导出模板:

再创建或是添加新项目时就会发现惊喜:

创建HelloMaya项目。

实际上这种插件的结构大致是这样:

首先规范有二个函数是固定存在的,分别是initializePlugin和uninitializePlugin,它们用来加载与卸载插件。在加载与卸载的过程中分别注册、取消注册对应类(class),通过该类(class)的creator创建函数。

每个类(class)也有规范,首先它继承自MPxCommand, 至少有二个方法需要实现,一个creator返回一个新对象指针,另一个最重要的doIt方法用于实现你的命令具体做什么。

接下来写个含有二条命令的插件,分别包含在FirstClass与SecondClass里。可以写在一个HelloMaya.cpp文件里,也可以做得正式一点切分到头文件及多个实现中。

编译生成HelloMaya.dll后到Maya中加载插件,然后测试:

详细代码可以到这看,包括VS项目模板等:

https://github.com/WendyAndAndy/MayaDev

你如果有git的话也可以直接克隆项目到本地:

git clone https://github.com/WendyAndAndy/MayaDev.git

你可以关注我的公众号:

猜你喜欢

转载自blog.csdn.net/whwst/article/details/81604853