在 Maya 中使用 mel/python 创建一个简单的层次结构
Posted
技术标签:
【中文标题】在 Maya 中使用 mel/python 创建一个简单的层次结构【英文标题】:Creating a simple hierarchy structure in Maya using mel/python 【发布时间】:2011-01-07 00:37:48 【问题描述】:所以我想在 Maya 中从组和定位器节点中创建一个非常简单的结构,然后将其导出以用于我的游戏关卡。
例如
Group_Root
group_parent
- group1
- locator1
- group2
- locator2
- group3
文件中只有一个Group_Root,有很多group_parents(每个都有唯一的名字) 然而,所有 group_parent 都具有相同的三个子组名称(“group1”、“group2”、“group3”),并且所有 group1 都有一个名为 locator1 的定位器
到目前为止我所拥有的是:
group_parent = c.group( em=True, name="group_parent", parent="Group_Root")
modes = ["group1", "group2", "group3"]
for mode in modes:
mode_group = c.group( em=True, n=mode, parent=group_parent )
if mode == "group1":
s = c.spaceLocator(name="locator1")
c.parent( mode_group )
elif mode == "group3":
s = c.spaceLocator(name="locator2")
c.parent( mode_group )
但是我在“c.parent(mode_group)”处收到此错误
# 错误:对象组 1 无效
大概是因为有多个名为“group1”的节点,所以它不知道哪个是父节点。
知道如何使用完整路径执行此操作吗?例如"Group_Root|group_parent|group1"
【问题讨论】:
【参考方案1】:你见过VFX Overflow吗?这是关于视觉效果的问答,所以我希望一些观察者对 Maya/MEL 和 Python 非常熟悉。也就是说,它是相当新的,所以用户群仍然很小......
【讨论】:
【参考方案2】:名称对于 MEL 可能有点烦人。一般来说,最好不要相信名称就是您指定的名称。
这是一个如何*不做事的好例子:
group -n myGroup1 circle1 sphere1;
..因为这决不能保证会产生名为“group1”的东西。更好的方法是运行您的命令并将结果捕获到字符串变量中,例如:
string $result = `group -n myGroup circle1 sphere1`;
然后,使用 $result 来引用结果组。即使该组最终被称为“myGroup23”,这仍然有效。
我不确定上面在 Python 中的样子,因为我主要熟悉直接 MEL,但应该适用相同的原则。
另一个需要关注的是命名空间功能(命名空间和命名空间信息),它可以用来为手头上唯一的***组定义一个新的命名空间。
希望有帮助
【讨论】:
【参考方案3】:我猜它已经两年多了,你现在已经弄清楚了。但对于后代来说,有两个问题 - 首先,你需要绝对路径,但是有在您应用 maya.cmds.parent() 调用的方式中还有一个小错误。我刚刚做了一些简单的重写来说明 - 主要是你可以使用这样一个事实,即当你创建东西时,它们会默认被选中,并且 maya.cmds.ls() 足够聪明,可以返回你需要的东西.. Ergo:
c.group( em=True, name="group_parent", parent="Group_Root")
group_parent = c.ls(sl=True)[0]
modes = ["group1" , "group2", "group3"]
for mode in modes:
c.group( em=True, n=mode, parent=group_parent )
mode_group = c.ls(sl=True)[0]
if mode == "group1":
c.spaceLocator(name="locator1")
s = c.ls(sl=True)[0]
# maya.cmds.parent() with something selected will actually
# parent the specified object to the selected object.
# You don't want that.
# We might as well use the explicit syntax to be sure
# (parent everything specified to the last item in the list)
c.parent( s, mode_group )
elif mode == "group3":
c.spaceLocator(name="locator2")
s = c.ls(sl=True)[0]
c.parent( s, mode_group )
【讨论】:
以上是关于在 Maya 中使用 mel/python 创建一个简单的层次结构的主要内容,如果未能解决你的问题,请参考以下文章