欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Maya API] lesson23-Maya API中的接待你迭代器和函数类

程序员文章站 2022-07-12 13:36:00
...

MFnDependencyNode与MitDependencyNodes

api中最基本的一个节点的函数类和迭代器

MFnDependencyNode

函数类

功能:节点最基本的函数类,所有节点都能使用此类方法

特性:可以操作一切节点,包括commands无法操作的锁定节点

首先我们看一下最基本的节点函数类MFnDependencyNode,在Maya中所有的物体都是以节点的形式来存在的,他们最基础的模式是一个DependencyNode,那么带有层级的那些节点,都是从DependencyNode扩展而来,变成DagNode,那么通过不同的继承,就发展成为不同的节点,那么最基本的节点就是DependencyNode,也就是说Maya中所有的节点,我们都可以使用这个方法

1.创建一个MFnDependencyNode,首先第一个是没有任何参数的,那么这样创建出来的,我们也不能与任何节点进行连接,所以我们创建出来的实际上只是一个空的,没有任何意义。我们知道通过MObject可以追踪到任何一个节点,那么在这里我们就可以通过传入MObject来实例化一个MFnDenpencyNode

import pymel.core as pm
import maya.OpenMaya as OpenMaya

OpenMaya.MFnDependencyNode(pm.ls(sl=True)[0].__apimobject__())  
# 创建DenpendencyNode,在创建时需要传入MObject物体,在这里使用pymel生成一个MObject来传入

[Maya API] lesson23-Maya API中的接待你迭代器和函数类

2.生成了一个DenpendencyNode之后赋值给一个变量,我们就可以使用他的方法啦

create:该方法为创建一个空的,在创建节点时用到

typeName():返回当前节点的类型

name():返回当前节点的名字

setName():更改当前节点的名字     setName(‘ctl_1’)

attributeCount():返回当前节点属性的数量

attribute():返回它任何一个属性的值。通过他属性的索引值(通常为数字),来返回它属性针对的指针,我们也可以通过指定属性的名字来返回一个MObject

findPlug():也是通过这种方式来返回他的属性

setLocked():锁定节点

isLocked():判断节点是否锁定

 

MItDependencyNodes

迭代器类

在maya API中,以MIT开头的就是迭代器,然后根据它后面的方式,来判断它是如何使用的。那么MItdependencyNodes就是过滤场景中的所有的基本节点,我们可以通过这个迭代器,来达到我们命令中使用ls的这种效果。

实例化MItDependencyNodes的几种方式:

1.指定一个类型和一个MStatus

2.指定一个迭代器类型

maya中所有的节点类型,都是在MFnType里面指定的,我们可以直接使用MFnType()

iterator = OpenMaya.MItDependencyNodes(OpenMaya.MFn.kMesh)

我们生成的迭代器对于场景中的多边形进行过滤,这样就生成了

实际上,他只是一个迭代器的状态,还没有开始运行,那么现在我们不知道它里面有多少个数,所以我们只能使用while,我们使用iteratoris.Done(),在Maya中的迭代器中,都有isDone()这个方法,来判断这个迭代器是都运行完成,那么再循环里面,我们就要使用iterator.next()

iterator = OpenMaya.MItDependencyNodes(OpenMaya.MFn.kMesh)

while not iterator.isDone():
    print iterator.thisNode()
    print iterator.item()
    
    iterator.next()

[Maya API] lesson23-Maya API中的接待你迭代器和函数类

这样的话,根据输出的内容是不能看出来他到底哪个节点的,既然我们知道他是一个MObject,也是一个DependencyNode,那么就可以使用OpenMaya.MFnDependencyNode(iterator.item()).name()

iterator = OpenMaya.MItDependencyNodes(OpenMaya.MFn.kMesh)

while not iterator.isDone():
    print OpenMaya.MFnDependencyNode(iterator.item()).name()
    
    iterator.next()

[Maya API] lesson23-Maya API中的接待你迭代器和函数类

那么在这个迭代器中,我们找到所有节点都是一个MObject,那么我们把这个MObject传给MFnDependencyNode,就生成了一个MFnDependencyNode的实例,我们就可以调用它的方法,比如说获取他的名字,我们就可以直接这么获取,就可以直接把场景中所有的mesh的名字打印出来

MItDependencyGraph

这个graph就是与节点联系相关的,我们可以通过这个迭代器来查询节点网络,它的上有节点,还有他的下游节点,

他的使用方法就是,比如说我们生成一个MItDependencyGraph,第一个选项我们要指定我们的起始节点,在指定我们要找到的节点类型,然后第三个选项,要指定我们查询这个节点的上游节点,还是下游节点,接着是广度优先,还是深度优先,level是说指定的是节点level还是属性level,那么通过指定这些属性就可以达到listConnection做不到的事情了。

相关标签: Maya API