Создать UV Set с openmaya API 2.0

Я пишу собственный читательский узел для Maya (на python с openmaya API 2.0), и я хотел бы отправить свои наборы ультрафиолетовых лучей на обычный узел сетки Maya.

Я задаюсь вопросом, что было бы лучшим способом выдвинуть ультрафиолетовые наборы в узле сетки? Я не смог найти, какие данные мне нужно создать и как отправить их на узел сетки.

Мой читатель OpenMaya.MPxNode кто толкает пользовательские данные в OpenMaya.MPxSurfaceShape, Форма связана сеткой / в сетке с обычной сеткой майя. Я пытаюсь заполнить плагин uvSet этой формы, используя compute но без успеха. Я ожидаю, что UVSets будут отправлены в сетку.

Следующий пример кода является ограниченным тестом, в котором моя единственная цель - создать новый 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: Теодокс вход

Я добавил следующую строку (59)

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

Результаты: я все еще получаю то же сообщение об ошибке

0 ответов

Другие вопросы по тегам