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

lesson26_Maya API 中的指针 - MScriptUtil

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

Python API与指针

我们知道,在我们平时使用的一些方法中,有时候传入的参数是一个指针

lesson26_Maya API 中的指针 - MScriptUtil

比如上图中的reset的方法,传入的一个MObject指针,也就是说我们前面要定义好一个MObject,然后再传入进来,或者说setPosition,我们要定义一个MPoint指针传入参数,但是MVector,MVectorArray等一些Maya基本的一些数据类型的指针,

再比如getUV这个方法,他是一个float2的一个指针,我们在python中,就只有float类型,就没有float2这种类型,所以我们要定义这种float2的这种指针,但他又不是Maya单独的数据类型,所以我们就要使用到MScriptUtil。

MScriptUtil

功能:通用工具类,用于在python中使用指针和引用

特性:在pythonAPI多数方法中,需要传递指针参数,并且都依赖于此

我们知道带有Util的一般都是通用的工具函数,那么我们可以用它,来创建我们所需要的数据指针。然后可以用它来读取指针中的值。

接下来我们就循环求出一个多边形所有点的UV值:

我们先创建一个多边形的球体

导入pymel、OpenMaya

定义一个迭代器

import pymel.core as pm
import maya.OpenMaya as OpenMaya  
#导入pymel、OpenMaya

iterator = OpenMaya.MItMeshVertex(pm.PyNode('pSphereShape1').__apiobject__())
#定义一个迭代器,需要传一个MObject作为参数,使用PyNode传入他的shape类型,转化为API Object

s_util = OpenMaya.MScriptUtil()  # 定义一个MScriptUtil实例,每个脚本中定义一个即可

uv_ptr = s_util.asFloat2Ptr()  # 定义一个UV的float2的指针,回一次往这个指针里面写入数据,改变它的值,我们在最后访问时,只能访问到它最后一个值,所以写入一次就要访问一次

while not iterator.isDone():  # 使用while循环。来一次访问他的每个元素 条件为有没有结束
    
    print(iterator.index())  # 访问他的索引
    
    iterator.getUV(uv_ptr)  # 需要传入一个float2类型的参数,实际上包含了两个浮点数,使用MScriptUtil来创建这种实例
    
    print(s_util.getFloat2ArrayItem(uv_ptr, 0, 0))  # 将UV值取出。将UV的指针传入,第一个元素是固定的0,不用考虑,第二个0,就是U值,1是V值
    
    print(s_util.getFloat2ArrayItem(uv_ptr, 0, 1))
    
    iterator.next()  # 依次调用他的每一个元素

 lesson26_Maya API 中的指针 - MScriptUtil

Maya里面所有关于数据指针的操作都放在了MScriptUtil里面,可以在里面按照需要选择需要的指针类型,然后加上‘as类型Ptr’直接求就可以了,如果在指针里面求值,就可以使用MScriptUtil,然后使用get开头的方法,传进去指针,然后就可以了

lesson26_Maya API 中的指针 - MScriptUtil

在上图中,我们最常用的也就是这种整数,正整数,布尔,还有浮点数的这种指针,其他的我们随用 随查就可以了。

相关标签: Maya API