使用openmaya API 2.0创建UV集

时间:2015-01-21 22:30:40

标签: python nodes maya uv-mapping

我正在为maya编写自定义阅读器节点(在使用openmaya API 2.0的python中),我想将我的uv集发送到常规的maya网格节点。

我想知道在网格节点中推送uv集的最佳方法是什么?我无法找到我要创建的数据以及如何将它们发送到网状节点。

我的读者是OpenMaya.MPxNode,他将自定义数据推送到OpenMaya.MPxSurfaceShape。形状通过网格/网格插头连接到常规的maya网格。我尝试使用compute填充此形状的uvSet插件,但没有成功。我希望将UVSet发送到网格。

以下代码示例是一个有限的测试,我的唯一目标是创建一个新的UVSet并将其附加到网格。

任何有用的想法或文档? 我尝试了几件事但我总是得到以下错误。

错误:

// Error: (kFailure): Object does not exist
# Traceback (most recent call last):
#   File "/path/to/maya/plug-ins/test_create_uv_set.py", line 60, in compute
#     mesh.createUVSet("toto")
# RuntimeError: (kFailure): Object does not exist // 

正在运行的代码:

"""
usage

import maya.cmds as cmds
import pymel.core as pm

cmds.loadPlugin("/path/to/maya/plug-ins/test_create_uv_set.py")

transform_node = pm.polySphere(n='transform1', ch=1, o=1, r=4)[0]
mesh1_node = transform_node.getShape()
pm.setAttr(mesh1_node + ".visibility", False)
uv_set_mod_node = pm.createNode("uvSetModifier", name="uvsetmodifier1")
mesh2_node = pm.createNode("mesh", name="mesh2", parent=transform_node)
pm.hyperShade(assign="initialShadingGroup")

pm.Attribute.connect(mesh1_node.attr("outMesh"), uv_set_mod_node.attr("inMesh"))
pm.Attribute.connect(uv_set_mod_node.attr("outMesh"), mesh2_node.attr("inMesh"))
"""

import sys
import maya.api.OpenMaya as OpenMaya


def maya_useNewAPI():
    pass


class uvSetModifier(OpenMaya.MPxNode):
    typeName = "uvSetModifier"
    id = OpenMaya.MTypeId(0xCCCCC)

    inMesh = None
    outMesh = None

    @staticmethod
    def creator():
        return uvSetModifier()

    @staticmethod
    def initialize():
        typedAttr = OpenMaya.MFnTypedAttribute()

        uvSetModifier.inMesh = typedAttr.create("inMesh", "im", OpenMaya.MFnData.kMesh)
        typedAttr.writable = True
        OpenMaya.MPxNode.addAttribute(uvSetModifier.inMesh)

        uvSetModifier.outMesh = typedAttr.create("outMesh", "om", OpenMaya.MFnData.kMesh)
        typedAttr.writable = True
        OpenMaya.MPxNode.addAttribute(uvSetModifier.outMesh)

    def __init__(self):
        OpenMaya.MPxNode.__init__(self)

    def compute(self, plug, datablock):
        if plug == uvSetModifier.outMesh:
            inputData = datablock.inputValue(uvSetModifier.inMesh)
            outputData = datablock.outputValue(uvSetModifier.outMesh)
            outputData.setMObject(inputData.asMesh())
            mesh = OpenMaya.MFnMesh(inputData.asMesh())
            mesh.createUVSet("toto")
            datablock.setClean(plug)


def initializePlugin(obj):
    plugin = OpenMaya.MFnPlugin(obj, "Autodesk", "3.0", "Any")

    try:
        plugin.registerNode(uvSetModifier.typeName, uvSetModifier.id, uvSetModifier.creator, uvSetModifier.initialize)
    except:
        sys.stderr.write("Failed to register node\n")
        raise


def uninitializePlugin(obj):
    plugin = OpenMaya.MFnPlugin(obj)

    try:
        plugin.deregisterNode(uvSetModifier.id)
    except:
        sys.stderr.write("Failed to deregister node\n")
        pass

更新1:THEODOX输入

我添加了以下行(59)

if inputData.asMesh() is not None:
   print "test"
   mesh = OpenMaya.MFnMesh(inputData.asMesh())
   mesh.createUVSet("toto")

结果:我仍然收到相同的错误消息

0 个答案:

没有答案