python运用maya_Mayapythonapi场景选择操作
选择操作:
不管在插件亦或是脚本,在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场景选择操作相关推荐
- python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换
python字典(dict)+常用方法操作+列表.元组.集合.字典的互相转换 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 为了保存具有映射关系的数据,Python ...
- python 对 yaml 文件操作
python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...
- python 对docker的操作 :docker-py教程
python 对docker的操作 :docker-py教程 见官方文档: https://docker-py.readthedocs.io/en/latest/
- Python实现tab文件操作
Python实现tab文件操作 # -*- coding:gbk -*- import os class TABFILE: def __init__(self, filename, dest_ ...
- python在windows下操作word的方法的代码
把写内容过程经常用的一些内容收藏起来,下边内容内容是关于python在windows下操作word的方法的内容,希望能对各位朋友有些好处. import win32com from win32com. ...
- 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结
Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...
- python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...
初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...
- python编程实例详解-Python编程之列表操作实例详解【创建、使用、更新、删除】...
这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋友可以参考下 #coding=utf8 ''''' 列表类型也 ...
- python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解
python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...
最新文章
- 常见http状态码说明(转)
- 计算机书籍-机器学习中的经典算法
- 15个目标检测开源数据集汇总
- 【Array数组】使用slice返回数组中的元素
- java excel导入去重_如何把日志导入到excel文档图文教程(含url去重)
- SAP Commerce Cloud SmartEdit 学习笔记
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波3 -幂律变换、伽马变换
- 内存四区(代码区 静态区 栈区 堆区)
- framebuffer驱动
- (3)zynq FPGA AXI4_Stream总线介绍
- Java ConcurrentHashMap 最佳实践
- python学习笔记简书_Python学习笔记
- mycat-sublun数据库分片
- Maven引用本地jar并在打war包时引用jar
- Flutter之Flutter-Redux框架源码解析
- OpenCV算法精解1--OpenCV中C++基本操作1
- python查看opencv版本_如何在Python和C ++中输出OpenCV版本号
- JAVA里面一加到一百等于多少_从1加到100等于多少 【求和算法汇总】
- 2022最火土味情话文案
- 计算机盖,盖珂珂_北京理工大学计算机学院
热门文章
- Android数据存储(3):External Storage
- [翻译]用 Puppet 搭建易管理的服务器基础架构(3)
- SPOJ 9939 Eliminate the Conflict
- IT技术人终究要走上管理职位吗?
- 解决idea创建ssm项目找不到mybatis的mapper的xml文件问题
- OC学习篇之---类的初始化方法和点语法的使用
- kafka + storm 错误 Async loop died
- 大数据之-Hadoop3.x_MapReduce_ReduceJoin案例TableBean---大数据之hadoop3.x工作笔记0129
- AndroidStudio安卓原生开发_android中使用StringUtils类_引入commons-lang的jar---Android原生开发工作笔记132
- C++_结构体的定义和使用_结构体数组---C++语言工作笔记025