[Maya API] lesson26_MayaAPIのポインタ-MScriptUtil

PythonAPIとポインタ

私たちが通常使用するいくつかの方法では、渡されるパラメーターがポインターである場合があることを私たちは知っています

たとえば、上の図のresetメソッドでは、MObjectポインターが渡されます。つまり、前にMObjectを定義してから渡す必要があります。つまり、setPositionでは、パラメーターを渡すためにMPointポインターを定義する必要がありますが、MVector、 MVectorArrayなどのMayaのいくつかの基本的なデータタイプへのいくつかのポインタ

もう1つの例は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 type Ptr」を追加して直接検索できます。ポインタで評価すると、それを使用できます。 MScriptUtilを選択し、getの最初にメソッドを使用して、ポインターを渡すと、次のことができます。

上の図で最も一般的に使用されているポインタは、整数、正の整数、ブール値、浮動小数点数などです。必要に応じて他のポインタを確認できます。

おすすめ

転載: blog.csdn.net/weixin_41363156/article/details/104488261