我们已经知道如何使用API获取当前所选物体,但单是获取当前所选物体有时并不能满足我们的操作需求,可能我们还要对其进行替换选择、添加、删除等等的操作,下面我们就来看看如何在API中执行这些选择操作。
在场景中创建两个Cube,使用默认名称"pCube1","pCube2"就行,默认是选择"pCube2"的,我们要将其替换为"pCube1",执行下面的代码
import maya.OpenMaya as om
# 将选择替换成"pCube1"
om.MGlobal.selectByName('pCube1',om.MGlobal.kReplaceList)
MGlobal是静态类提供常用的API全局方法,它在OpenMaya.py中定义,所以我们第一步就是导入OpenMaya模块
import maya.OpenMaya as om
selectByName就是我们要使用的方法,它接受两个参数,第一个是物体名称(MString);第二个是列表更改参数(MGlobal.ListAdjustment),默认是MGlobal.kAddToList,它决定了当前的选择列表的修改,有如下几个参数
- kReplaceList:将所给的物体替换成当前的选择列表
- kXORWithList:如果所给的物体已经存在当前的选择列表中就把它从列表中移除,如果不存在就把它加进来
- kAddToList:将所给的物体加入当前的选择列表中
- kRemoveFromList:将所给的物体从当前的选择列表中移除
所以我们的代码是
om.MGlobal.selectByName('pCube1',om.MGlobal.kReplaceList)
将"pCube2"加入选择
om.MGlobal.selectByName('pCube2',om.MGlobal.kAddToList)
或使用kXORWithList参数,因为"pCube2"不存在当前的选择列表中
om.MGlobal.selectByName('pCube2',om.MGlobal. kXORWithList)
要取消物体的选择可以使用上面的kRemoveFromList参数,也可以使用unselectByName方法,如
om.MGlobal.unselectByName('pCube1')
getActiveSelectionList的另一个例子
# 获取当前所选物体
selected = om.MSelectionList()
om.MGlobal.getActiveSelectionList(selected)
# 对它们进行迭代
for i in range(selected.length()):
obj = om.MObject()
# 返回第i个被选择的DG节点
selected.getDependNode(i,obj)
# 给被选择的物体附加方法集
fn = om.MFnDependencyNode(obj)
# 在脚本编辑器中显示物体的名称
print fn.name()
如果要设置当前的选择列表,就要使用setActiveSelectionList方法了,下面的代码会选择场景中的所有多边形的shape
# 要选择的类型,mesh是多边形
type = om.MFn.kMesh
# 创建选择列表
selected = om.MSelectionList()
# 创建迭代器
it = om.MItDependencyNodes(type)
while not it.isDone():
selected.add(it.thisNode())
it.next()
# 设置selected为当前的选择列表
om.MGlobal.setActiveSelectionList(selected)
分享到:
相关推荐
在VB6.0(Visual Basic 6.0)中,开发者有时需要实现让用户选择文件或目录的功能,这通常涉及到调用操作系统级别的API函数。在这个"vb6.0调用选择路径的API例子"中,我们将深入探讨如何实现这一功能。 首先,API...
定义了用于多路复用的、非阻塞 I/O 操作的选择器。 java.nio.channels.spi 用于 java.nio.channels 包的服务提供者类。 java.nio.charset 定义用来在字节和 Unicode 字符之间转换的 charset、解码器和编码器。 ...
标题中的“API选择文件模块”指的是在编程过程中使用操作系统提供的应用程序接口(API)来实现文件选择功能的一个模块。API(Application Programming Interface)是操作系统提供给开发者用于与系统交互的工具集合,...
Handsontable 的核心方法是其功能的核心所在,包括数据操作(如`loadData`、`getData`)、表格渲染(`render`)、单元格选择(`selectCell`、`deselectCell`)等。这些方法构成了Handsontable的基本操作流程,熟练...
总的来说,本实验旨在使学习者熟悉Hadoop环境下的Java编程,理解如何调用HDFS API进行文件操作,这是一项重要的技能,因为在大数据处理中,HDFS是数据存储的核心组件。通过这样的实践,学生将能够更好地理解和应用大...
在C#中操作Windows API是一项复杂但至关重要的技能,尤其对于开发系统级应用程序或需要与操作系统底层交互的软件。在C#中使用API涉及到多个关键概念,如结构、类型转换、安全与不安全代码以及可控与不可控代码的管理...
在开发过程中,许多开发者特别是非英语母语的用户希望能够在IDE中看到中文的API文档提示,以更好地理解和使用各种类库的功能。本文将详细介绍如何在Eclipse IDE中设置中文API,以便在编程时获得中文提示。 #### 一...
在C++编程中,API(应用程序接口)是预定义的函数集合,允许程序员访问操作系统、库或其他服务的功能。异步选择模型是一种高级并发处理技术,它使得程序可以在等待某些操作完成的同时,继续执行其他任务,提高了系统...
1. **引用API库**:首先,你需要将API.LLB库文件引入到LabVIEW项目中,这可以通过在程序框图中右键点击,选择“添加引用”来完成。 2. **创建API函数节点**:在引用库后,可以在LabVIEW的函数选板中找到相应的API...
【汇编API】是计算机编程领域的一个重要概念,特别是在低级编程和系统级开发中扮演着关键角色...然而,由于其复杂性和低级特性,通常只有在高级语言无法满足性能需求或者需要进行深度系统优化时,才会选择使用汇编API。
Java XML API是Java平台提供的一套用于处理XML文档的接口和类,它使得开发者能够方便地在Java程序中创建、解析、修改XML文档。本文将深入探讨Java XML API中的核心组件,包括SAX(Simple API for XML)、DOM...
**jQuery中文API**是JavaScript库jQuery的中文文档,它为开发者提供了一个全面、直观的参考指南,便于在JavaScript编程中高效地使用jQuery。jQuery因其简洁的语法和强大的功能,在Web开发领域广泛应用,尤其是在处理...
JqGrid是一款强大的JavaScript数据网格组件,用于在Web应用程序中展示和操作数据。它基于jQuery库,提供了丰富的功能,如分页、排序、过滤、编辑和格式化数据。本中文API文档将帮助开发者深入理解并有效利用JqGrid的...
在"API操作FTP上传.rar"这个压缩包中,包含的可能是一个易语言编写的源码示例,易语言是一种中文编程语言,设计目标是使编程变得更加简单、直观。源码可能提供了一个或多个函数或方法,用于实现使用API调用来执行FTP...
首先,"API选择文件模块"指的是易语言中调用操作系统底层API(应用程序接口)来实现文件或文件夹选择的功能。这通常涉及到Windows API中的函数,如`GetOpenFileName`和`GetSaveFileName`,它们允许用户通过对话框...
MUI API 中文文档是开发者在使用 MUI 进行移动应用开发时的重要参考资料,它详细解释了 MUI 框架中的各个组件、方法、事件以及配置项,使得开发者能够更加方便地理解和运用 MUI。 1. **组件篇** - **栅格系统**: ...
在“API高德地图搜索选择地址实例”中,我们关注的重点是地图搜索和选择地址的功能。这个实例可能包含一个演示程序或教程,展示如何使用高德地图API进行地址搜索并让用户能够从搜索结果中选择一个地址。下面将详细...
`CreateCompatibleDC`创建一个设备上下文,`SelectObject`选择要在该上下文中使用的对象,如画笔、刷子或字体。`MoveToEx`和`LineTo`用于绘制直线,`Ellipse`和`Rectangle`则用于绘制形状。 ### 3. 输入输出 ...
API(Application Programming Interface)是软件系统之间交互的一种方式,它...不过,使用API直接操作数据库可能需要更高级的编程技能,并且可能会牺牲一定的安全性与兼容性,因此在实际开发中应谨慎选择合适的方法。
在编程实践中,C#是一种常见的语言选择,它提供了丰富的类库和.NET框架支持,方便开发者调用RAPI库的函数。通过.NET Framework,可以使用P/Invoke技术来调用非托管的RAPI库函数,这样便可以在C#中实现对Windows ...