Python Maya - If objectType returns No object name specified

2024-10-05 14:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让maya检查列出的对象是否是blendshape节点。在

这是我的代码:

def bake(self, *args):
    self.items["selection"] = cmds.ls(sl = True)
    self.items["shapes"] = cmds.listRelatives(self.items["selection"], ad = True)
    shapes = ()
    for i in self.items["shapes"]:
        bs = cmds.listConnections(i, type = "blendShape", exactType = True)
        if cmds.objectType(bs, isType = "blendShape"):
            print bs

它返回# Error: RuntimeError: file X:/Documents/maya/scripts\jtBakeCharacter.py line 16: No object name specified

第16行是:if cmds.objectType(bs, isType = "blendShape"):

除了指定一个对象名之外,该对象名是bs。。我已经打印了bs的结果,它列出了许多对象。很多。在


Tags: 对象selftrueifbs节点itemscmds
3条回答

你可以试试这个:

from pymel.core import *

for obj in selected():
    shapeNode = obj.getChildren()[0]
    for output in shapeNode.outputs():
        if nodeType(output) == "blendShape":
            print obj, "is a blendshape"

代码是多余的。你不需要大部分的台词。listConnections已经确保只有blendshape。确切的问题是,你打电话的对象是:

cmds.objectType([])

对于一些额外的形状。这是违法的。但大多数情况下,您的代码可以封装如下:

^{pr2}$

但这可能不能完美地抓住你的意图,但却显示出你可能会采取额外的步骤。实际上,如果命令.objectType(bs,isType=“blendShape”):任何东西

Joojaa的答案很优雅,但是您可以使用默认的选择行为将其缩短:

blendshapes = cmds.ls(cmds.listHistory(pdo=True), type='blendShape') or []
for item in blendshapes:
    print item

(为了使它更短,我没有检查选择,所以如果没有选择,这个就失败了)。在

注:如果你需要从上游形状中得到混合形状,而不是变形形状,你可以使用listHistory(f=True)

相关问题 更多 >