Maya命令型插件

本文介绍了Maya命令型插件开发的基础概念,包括对象类型(Wrappers、Objects、Function Sets、Proxies)、错误校验及插件类型。重点讲述了命令插件的工作原理,通过派生自MPxCommand创建自定义命令,实现doIt、undoIt和redoIt接口。还给出了一个简单的HelloWorld命令插件的创建和注册过程,以及如何在Python和MEL中调用该插件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 基础概念

这里主要介绍用Maya C++ API进行插件开发的一些基本概念。

1 对象类型

Maya API包含了四种类型的对象:Wrappers,Objects,Function Sets以及Proxies,这四种对象构成了Maya API所有内容。

<1> Wrappers

Wrapper是API提供的一个基础性的类,它包含了一些基础数据类,实用的工具类以及迭代器。数据类包括array,vector,matrix,quaternion等,实用工具类包含selection lists,DAG paths,viewports等。这两种类型的以”M”为前缀,如MIntArray,MFloatArray,MSelectionList等。

Wrapper包含的迭代器,用于遍历数据序列,API中提供了用于遍历maya依赖图、网格顶点、变、面、法线等的迭代器,以”MIt”开头,如有MItMesh,MITDependencyGraph等。

<2> Objects

这里的对象指的是maya里面的对象,例如曲线、DAG节点、光照、IK解算器等,maya里面所有对象都派生自类MObject,这种设计方式允许maya中许多不同派生自MOject的类型可以在API中方便传递。每个MObject的实例代表一个节点或者节点上的属性,但是需要注意的MObject并是就是这个节点或属性,而仅仅是这个节点或属性的句柄。这使得Maya可以保持节点和属性的所有权,保证maya顺畅运行。由于MObject仅仅是maya内部对象的一个句柄,而这个对象可以在运行过程中被maya移除,所以在插件的函数调用中不能依赖于MObject,因为它可能在某个时刻已经是失效的句柄。要获取MObject引用的节点的功能,应该使用Function Set。

<3> Function Sets

MAYA中真正的对象又种类繁多,那么要将功能性的接口写到MObject中显然是不现实的,但是又是需要的(由于API中进行对象句柄的获取或传递的类型一般都是MObject),所以就有了Maya中的Fuction Set类。

代码示例如下:

if ( obj.hasFn( MFn::kMesh ) )

{

    MFnMesh fnMesh( obj );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值