gpt4 book ai didi

python - 我的对象重命名脚本中发生了什么?

转载 作者:行者123 更新时间:2023-11-30 23:26:11 25 4
gpt4 key购买 nike

请耐心听我说,尤其是我的问题......如果我的帖子标题在某些方面误导了您,我提前表示歉意,但这是我能想到的最好的办法

我正在做一个基本的重命名应用程序,如下面的代码所示。基本上,我从我遇到的一个例子中获取了这个,将其放入我的代码和中提琴中,它起作用了。遗憾的是,有一些部分我不明白,当我尝试在网上寻找答案时,我什么也没找到,这确实令人沮丧。

import pymel.core as pm
objects = pm.ls(selection=True)
# Result: [nt.Transform(u'my_pCube1')] #
pfx = 'test'

for item in objects:
item.rename(pfx + "_" + item.name().split('|')[-1])
print 'Prefix added: %s_' %pfx
  1. 在此实例中,[nt.Transform(u'my_pCube1')] 被视为长名称还是短名称?

  2. .name() 来自哪里?它是重命名隐藏函数的一部分还是我在文档中没有看到的东西?

然后,由于我几乎在整个编码过程中都在使用 cmds,我想我不妨对其进行标准化,并将 pm 更改为 cmds。 ..然而,它并没有像我想象的那样运行,而是给出了如下所示的错误。

objects = cmds.ls(selection=True)
# AttributeError: 'unicode' object has no attribute 'rename' #
  1. 为什么会这样呢?
  2. 此外,当我尝试打印 objects 的输出时,它打印出对象而不是选择内容。有什么想法吗?

最佳答案

您的示例正在使用 PyMel,因此列表中的对象是 PyNode,正如 @vaibhaw 指出的那样。它们在这种情况下很有用,因为它们保留了与原始场景对象的连接。

maya 对象的长名称是 |path|to|object 形式的名称,其中包含层次结构中位于其上方的所有对象的名称。要从 pynode 获取此信息,请在节点上使用 fullPath() 函数

短名称通常是显示在对象的大纲 View 或 channel 框中的名称。当您有多个具有相同短名称的对象时,maya 将为您提供足够的长名称来区分这些对象。对于像这样的层次结构:

group1
box
group2
box

短名称将为|group1|box|group2|box。使用shortName()从pynode获取它;这就是您使用普通的旧 Maya 或 mel 会得到的结果。

要从 pynode 获取在 channel 框中看到的名称,请使用 nodeName()。这只会为您提供对象的“个人”名称。

如果您使用 pynodes,您应该能够对每个对象调用 rename()。但是,您需要保留对象以检查它们的新名称 - 新名称可能不完全是您想要的,因为 Maya 不允许同级对象具有相同的名称;它将用尾随数字重命名 sibling ,以保持它们的唯一性。

在第二段代码中,您使用的是maya.cmds。它不对具有自己函数的对象进行操作,它将所有对象视为字符串。所以

pynode = pm.PyNode("pCube1")
pynode.rename("fred")
print pynode
# Result: [nt.Transform(u'fred')] #

在 pymel 中,但在 maya.cmds 中,对象只是字符串:

cube = "pCube1"
renamed_cube = cmds.rename(cube, "barney")
print renamed_cube:
# Result: barney #

关于python - 我的对象重命名脚本中发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22659648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com