Python 使用类通过内存选择Maya对象

Python 使用类通过内存选择Maya对象,python,class,memory,selection,maya,Python,Class,Memory,Selection,Maya,使用类通过内存选择Maya对象 以下代码有什么问题: 将maya.cmds作为cmds导入 类MakeObject: 定义初始化(自): self.grp=cmds.createNode('transform') def生成多维数据集(自身): self.cube=cmds.polyCube(n='cube')[0] 父(self.cube、self.grp) def选择(自): cmds.select(self.cube) x=MakeObject() x、 make_cube() y=Mak

使用类通过内存选择Maya对象

以下代码有什么问题:

将maya.cmds作为cmds导入
类MakeObject:
定义初始化(自):
self.grp=cmds.createNode('transform')
def生成多维数据集(自身):
self.cube=cmds.polyCube(n='cube')[0]
父(self.cube、self.grp)
def选择(自):
cmds.select(self.cube)
x=MakeObject()
x、 make_cube()
y=MakeObject()
y、 make_cube()
x、 选择()

pymel
不同,
cmds
不使用包装器处理节点。相反,它使用的字符串可能会有问题,因为它们不会动态更新。例如,如果创建一个新节点
my_cube=cmds.polyCube(n='cube')[0]
,然后重命名它,则
my_cube
变量仍将指向对象的旧名称

如果场景中有多个对象共享相同的重复名称,这也可能是一个问题。Maya通常会自动重命名重复命名以避免冲突,但在不同层次中具有重复名称是有效的。在这种情况下,您必须使用节点的长名称来访问它。例如,名为
“cube”
的对象在名为
“root”
的另一个对象下的父对象将具有长名称
“|root | cube”

所有这些都说明,是的,这个代码有一个问题。它制作了两个同名的立方体,并将它们重新划分为不同的层次结构。因此将有两个名为“
”cube“
”的节点。调用
select
命令时,它会以书面形式调用
cmds.select(“多维数据集”)
,但由于有多个
“多维数据集”
,Maya不知道如何解释它,然后抛出错误

可以做的是通过在对象的父对象之后执行此操作来捕获对象的新长名称:
self.cube=cmds.ls(sl=True,long=True)[0]


现在,它可以按预期选择第一个立方体。

尝试在Maya中选择两个共享相同名称的对象,基于内存,而不是通过完整路径选择对象。我创建了一个类,该类应该有一个创建多维数据集的函数,当您使用不同的实例变量再次创建多维数据集时,您还可以基于实例变量(不基于完整路径)选择多维数据集,但它会发送一个错误消息,指出有多个对象共享相同的名称。完整代码如下:将maya.cmds作为cmds类MakeObject导入:def _uinit _;(self):self.grp=cmds.createNode('transform')def make_cube(self):self.cube=cmds.polyCube(n='cube')[0]cmds.parent(self.cube,self.grp)def selection(self):cmds.select(self.cube)x=MakeObject()x.make#cube()创建与第一个多维数据集同名的多维数据集y=MakeObject()y.make_cube()x.selection()您好,欢迎来到SO。您可以使用编辑链接更新您的问题,而不是发布评论。它将帮助人们更好地理解你的要求。