【问题标题】:changing part of an object name in maya python在maya python中更改对象名称的一部分
【发布时间】:2018-07-13 14:08:41
【问题描述】:

我觉得这应该很容易,但我所有的搜索都是徒劳的。

我在 Maya 中,我有一系列名称以 _LOC 结尾的对象,我想运行一个 python 脚本,将它们重命名为以 _JNT 结尾。我设法让它在单个对象上工作,但我的 for 循环只执行第一个对象然后停止。这是我目前所拥有的:

import maya.cmds as mc

sel=mc.ls(selection=True)

for each in sel:
    item=sel[0]
    newname=item.split('_')
    mc.rename(newname[0]+'_JNT')

【问题讨论】:

  • for-loop 中你定义了each 但你不使用它,尝试将item=sel[0] 更改为item=each[0]
  • davewards 是对的,我认为 each.replace('_LOC', '_JNT') 会更容易

标签: python rename maya


【解决方案1】:

你实际上并没有使用你的循环。您只需要在当前引用选择的地方使用循环变量each

import maya.cmds as mc

sel=mc.ls(selection=True)

for each in sel:
    newname=each.split('_')
    mc.rename(newname[0]+'_JNT')

【讨论】:

    【解决方案2】:

    由于 maya.cmds 处理字符串的方式与 mel 相同,因此如果重命名子节点的父节点,脚本可能会失败,因为子节点的全名在 Maya 中更改,但在选择列表中没有更改。这很大程度上取决于您的设置。

    我建议改用 pymel,因为它依赖于 MObjects 而不是字符串:

    import pymel.core as pm
    
    sel=pm.ls(selection=True)
    
    for each in sel:
        newname=each.nodeName().replace("_LOC", "_JNT")
        each.rename(newname)
    

    【讨论】:

    • 您也可以在使用cmds 处理指针而不是字符串时使用OpenMaya.MDagPath
    【解决方案3】:

    其他人已正确解决了您代码中的错误。

    Maya 还有一个内置工具来执行此操作,位于 Modify -> Search and Replace Names 下。它完全按照您的代码正在执行的操作。它还可以替换场景中的所有名称,或仅替换您的选择。

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多