从Maya2012开始我们迎来了新的Python API,对API不熟悉的朋友也许会问为什么要出个2.0的新API.其实1.0是通过SWIG来对大部分(基本是全部)C++ API来自动转换的,好处是我们能使用绝大部分的C++ API,而且制作速度快,但也有很多问题,首先API是为C++设计的,C++和Python的最大区别之一就是指针,API中使用指针的地方非常多,为了解决这个问题,Python API里多了一个专门处理指针的类(令Pythoner蛋疼的东西),而且很多类方法都是没有Python版本的,很多的Python特性也不支持,其实就感觉跟使用C++版本没太多的区别.
2.0就是他们重新给Maya设计的Python API,支持Python的特性,优化运行速度,更加Pythonic.
这里我要介绍的是MSelectionList,要能正常运行下面的Python代码,你需要Maya2012 HotFix 1以上版本,om代表1.0的版本模块,newom是2.0.
MSelectionList是存储在MAYA中被选中的物体集,其实不是当前选中的物体也行.
获取当前选中的五体物体
你可以看到1.0的用法跟C++的基本一样,如果你只想通过API来打印所选择的物体名称
获取节点
可以看到API 2.0更加Pythonic,其它的方法也都差不多一样的用法,具体请看文档.
2.0就是他们重新给Maya设计的Python API,支持Python的特性,优化运行速度,更加Pythonic.
这里我要介绍的是MSelectionList,要能正常运行下面的Python代码,你需要Maya2012 HotFix 1以上版本,om代表1.0的版本模块,newom是2.0.
MSelectionList是存储在MAYA中被选中的物体集,其实不是当前选中的物体也行.
获取当前选中的五体物体
import maya.OpenMaya as om # API 1.0
import maya.api.OpenMaya as newom # API 2.0
# API 1.0
selList = om.MSelectionList()
om.MGlobal.getActiveSelectionList(selList)
# API 2.0
mySel = newom.MGlobal.getActiveSelectionList()
MSelectionList selList;
MGlobal::getActiveSelectionList(selList);
你可以看到1.0的用法跟C++的基本一样,如果你只想通过API来打印所选择的物体名称
nodes = []
selList.getSelectionStrings(nodes)
nodes
# Result: [u'pCube1'] #
mySel.getSelectionStrings()
# Result: (u'pCube1',) #
获取节点
node = om.MObject()
selList.getDependNode(0, node)
myNode = mySel.getDependNode(0)
可以看到API 2.0更加Pythonic,其它的方法也都差不多一样的用法,具体请看文档.