`
schi
  • 浏览: 201308 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Maya Python API 2.0 - MSelectionList

阅读更多
  从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中被选中的物体集,其实不是当前选中的物体也行.

获取当前选中的五体物体
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,其它的方法也都差不多一样的用法,具体请看文档.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics