[Maya API] lesson26_Maya API 中的指针 - MScriptUtil

Python API与指针

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

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

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

MScriptUtil

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

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

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

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

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

导入pymel、OpenMaya

扫描二维码关注公众号,回复: 12066508 查看本文章

定义一个迭代器

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()  # 依次调用他的每一个元素

 

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

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

猜你喜欢

转载自blog.csdn.net/weixin_41363156/article/details/104488261
API
今日推荐