【问题标题】:What does it mean for an object to be "in the underworld?"一个物体“在冥界”是什么意思?
【发布时间】:2019-11-05 05:52:14
【问题描述】:

我有这个代码:

def block_stacks(num):
    stack = cmds.group(empty=True, name='Stacks#')
    size = num
    for var in range(num):
        i = 0
        r_rot = random.uniform(0,359)
        block = cmds.polyCube(h=0.5, w=0.5, d=0.5, name='block#')
        cmds.parent(block, stack)
        cmds.move(0, 5.38 + i, 0, 'block*')
        cmds.rotate(0, r_rot, 0, 'block*')
        rR= random.uniform(0, 1.0)
        rG= random.uniform(0, 1.0)
        rB= random.uniform(0, 1.0)
        cmds.polyColorPerVertex('block*', rgb=[rR,rG,rB], cdo = True)
        i+=0.5

block_stacks(5)

在 Maya 的脚本编辑器中。当我运行它时,随机旋转和随机颜色工作正常,并且块放置在正确的位置,但它只创建 1 个块而不是 5 个(就像我打算的那样)并说

“警告:不能在地狱中作为父组件或对象。”

多次。我完全不知道这意味着什么,显然整个互联网上的任何地方都没有答案说明这个错误到底是什么。当我运行它时它仍然会创建对象,并且它不会给出任何红色错误消息。有谁知道这意味着什么,以及为什么它只使堆栈高 1 格而不是 5 格?我已经尝试解决这个问题将近 2 个小时,现在我已经筋疲力尽了。

【问题讨论】:

    标签: python compiler-errors maya


    【解决方案1】:

    我相信该错误意味着您不能将 dg 节点(没有转换的东西)作为 dag 节点的父级。例如,尝试将 objectSet 设置为变换的父级。它不会让你这样做,因为 dg 节点本身没有变换,也不属于层次结构。

    现在它给你这个错误,因为你试图父多维数据集的 polyCube 输入,它没有变换!这是偶然完成的,因为您假设 cmds.polyCube 返回立方体的变换。它不是。事实上,它返回一个包含 2 项的列表:立方体的变换和立方体的 polyCube 输入。而且由于cmds.parent 可以在其第一个参数中接受列表,因此您实际上是在尝试将变换和 polyCube 设置为堆栈变换的父级。您可以通过像这样获取命令的第一个索引来轻松避免这种情况:cmds.polyCube()[0]

    现在另一个问题是所有的立方体都移动到同一个地方。这是因为您的 i 变量位于 for 循环内部。所以每次迭代i 都会重置为 0 而不是递增,因此它们都会移动到相同的位置。

    另一个问题是,在您的许多命令中,您使用的是"block*"。这样做并不是指block 变量,而是实际上会抓取以名称"block" 开头的所有转换。实际上你根本不需要"*",只需传递变量block

    考虑到所有这些,下面是工作代码:

    import random
    import maya.cmds as cmds
    
    
    def block_stacks(num):
        stack = cmds.group(empty=True, name='Stacks#')
        i = 0  # Need to move this OUT of the loop otherwise it always resets to 0 and all of the blocks will move to the same place.
    
        for var in range(num):
            r_rot = random.uniform(0,359)
            block = cmds.polyCube(h=0.5, w=0.5, d=0.5, name='block#')[0]  # This command actually returns a list of 2 items, the transform and the polyCube input, so grab the first index.
            cmds.parent(block, stack)
            cmds.move(0, 5.38 + i, 0, block)  # Pass the variable.
            cmds.rotate(0, r_rot, 0, block)
            rR = random.uniform(0, 1.0)
            rG = random.uniform(0, 1.0)
            rB = random.uniform(0, 1.0)
            cmds.polyColorPerVertex(block, rgb=[rR, rG, rB], cdo=True)
            i += 0.5
    
    
    block_stacks(5)
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2011-10-02
      • 1970-01-01
      • 2016-11-01
      • 2017-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多