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
定义一个迭代器
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开头的方法,传进去指针,然后就可以了
在上图中,我们最常用的也就是这种整数,正整数,布尔,还有浮点数的这种指针,其他的我们随用 随查就可以了。
上一篇: Lombok的基本使用
下一篇: lombok的使用
推荐阅读
-
vue中computed计算属性与methods对象中的this指针
-
Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter
-
C指针(2)——指针在函数中的应用(程序讲解)
-
详解HTML5中的Communication API基本使用方法
-
tensorflow学习——keras高级API——层中的单元个数
-
获得函数返回值类型、参数tuple、成员函数指针中的对象类型
-
mysql的C API中的一个极不厚道的陷阱!
-
Java8中操作日期时间相关的API
-
完整删除ecshop中获取店铺信息的API,ecshop获取店铺api
-
Java中API下的String,StringBuffer,StringBuilder的区别及用法