选择操作:

不管在插件亦或是脚本,在maya场景中选择物体一直是很频繁的操作,相比command中的ls -sl,api中选择物体更加的多样化,当然可能也比较的不直观:

几种常见的选择途径:

(1):从场景选择结果进行获取操作:

一般的,这种情况在脚本或者command plugin中比较常见,直接获取到场景当前的选择。在command中我们可以直接使用ls -sl获取到选择对象的唯一名称(unique

name),但是使用string来标记操作对象在api中是低效且不通用的,所以我们需要直接获取当前选择对象的mobject或者mdagpath。

示例:

import maya.OpenMaya as om

#get mobject handle from active objects in maya scene

def listSelectionMObj(index = -1):

selLis =om.MSelectionList()

om.MGlobal.getActiveSelectionList(selLis)

If(index < 0):

result = [om.MObject()]*selLis.length()

for i,obj in enumerate(result):

selLis.getDependNode(i,obj)

return result

else:

result = [om.MObject()]*1

selLis.getDependNode(0,result[0])

return result

#get mdagpath

def listSelectionMPath(index = -1):

selLis =om.MSelectionList()

om.MGlobal.getActiveSelectionList(selLis)

If(index < 0):

result = [om.MDagPath()]*selLis.length()

for i,path in enumerate(result):

selLis.getDagPath(i,path )

return result

else:

result = [om.MDagPath()]*1

selLis.getDagPath(0,result[0])

return result

例子中可以直接获取整个选择列表,也可以获取指定index的对象(为了返回类 型一致,单个对象仍然返回列表)

(2):直接从场景获取对象:

这种情况一般出现在context plugin中,脚本或者command

plugin中相对少见。其 等价于鼠标框选操作,可以将其直接视为执行框选。

示例:

import maya.OpenMaya as om

#get mobject handle of object at screen position (xPos,yPos) in

maya scene.

def selectFromScreen(xPos,yPos):

#the enum value kReplaceList will replace list with given

items

om.MGlobal.selectFromScreen(xPos,yPos,om.MGlobal.kReplaceList)

selLis =om.MSelectionList()

om.MGlobal.getActiveSelectionList(selLis)

mobj = om.MObject()

selLis.getDependNode(0,mobj)

return mobj

示例中相当于在场景指定位置执行一次鼠标单击返回选择结果(MObject),需要注意的是,selectFromScreen会直接刷新视口的选择结果。

(3):使用对象名称获取对象:

很多时候我们只会知道对象的名称,比方说依赖于输入等等情况。这个时候api中就需要使用string获取对象句柄。虽然部分api方法提供根据string来判断对象的方式,不过还是建议在api中根据string先获取到对象再进行操作。

注意:名称必须为unique name,也就是说场景物体在整个场景中的最短唯一路径名称(也可提供全路径名称)。因为maya需要判断唯一的对象,就不应该在场景中存在一样名称的对象,但是在不同的group中可能会有这种同名情况。这种情况下带上group

path的对象名称才是unique name。

示例:

import maya.OpenMaya as om

#get mobject handle of object in maya scene with given unique

name.

def getObjectByName(uName):

selLis = om.MSelectionList()

selLis.add(uName)

mobj = om.MObject()

selLis.getDependNode(0,mobj)

return mobj

需要注意一点,示例中并未考虑namespace。

python运用maya_Mayapythonapi场景选择操作相关推荐

  1. python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换

    python字典(dict)+常用方法操作+列表.元组.集合.字典的互相转换 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 为了保存具有映射关系的数据,Python ...

  2. python 对 yaml 文件操作

    python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...

  3. python 对docker的操作 :docker-py教程

    python 对docker的操作 :docker-py教程 见官方文档: https://docker-py.readthedocs.io/en/latest/

  4. Python实现tab文件操作

    Python实现tab文件操作 # -*- coding:gbk -*- import os class TABFILE:     def __init__(self, filename, dest_ ...

  5. python在windows下操作word的方法的代码

    把写内容过程经常用的一些内容收藏起来,下边内容内容是关于python在windows下操作word的方法的内容,希望能对各位朋友有些好处. import win32com from win32com. ...

  6. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

  7. python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...

    初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...

  8. python编程实例详解-Python编程之列表操作实例详解【创建、使用、更新、删除】...

    这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋友可以参考下 #coding=utf8 ''''' 列表类型也 ...

  9. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

最新文章

  1. 常见http状态码说明(转)
  2. 计算机书籍-机器学习中的经典算法
  3. 15个目标检测开源数据集汇总
  4. 【Array数组】使用slice返回数组中的元素
  5. java excel导入去重_如何把日志导入到excel文档图文教程(含url去重)
  6. SAP Commerce Cloud SmartEdit 学习笔记
  7. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波3 -幂律变换、伽马变换
  8. 内存四区(代码区 静态区 栈区 堆区)
  9. framebuffer驱动
  10. (3)zynq FPGA AXI4_Stream总线介绍
  11. Java ConcurrentHashMap 最佳实践
  12. python学习笔记简书_Python学习笔记
  13. mycat-sublun数据库分片
  14. Maven引用本地jar并在打war包时引用jar
  15. Flutter之Flutter-Redux框架源码解析
  16. OpenCV算法精解1--OpenCV中C++基本操作1
  17. python查看opencv版本_如何在Python和C ++中输出OpenCV版本号
  18. JAVA里面一加到一百等于多少_从1加到100等于多少 【求和算法汇总】
  19. 2022最火土味情话文案
  20. 计算机盖,盖珂珂_北京理工大学计算机学院

热门文章

  1. Android数据存储(3):External Storage
  2. [翻译]用 Puppet 搭建易管理的服务器基础架构(3)
  3. SPOJ 9939 Eliminate the Conflict
  4. IT技术人终究要走上管理职位吗?
  5. 解决idea创建ssm项目找不到mybatis的mapper的xml文件问题
  6. OC学习篇之---类的初始化方法和点语法的使用
  7. kafka + storm 错误 Async loop died
  8. 大数据之-Hadoop3.x_MapReduce_ReduceJoin案例TableBean---大数据之hadoop3.x工作笔记0129
  9. AndroidStudio安卓原生开发_android中使用StringUtils类_引入commons-lang的jar---Android原生开发工作笔记132
  10. C++_结构体的定义和使用_结构体数组---C++语言工作笔记025