根据父节点重命名结果节点

rename result node based on parent node

我正在编写一个脚本,从选定的网格中复制曲线。

创建曲线后,我希望它根据用于创建带有后缀的曲线的原始网格的名称重命名结果。例如:'meshName_Crv' 或类似的东西。

import pymel.core as pm

#Select meshes to use as a source for copying the curves.
tarlist = pm.ls(selection=True, fl=True)

#Select an edge within the selected meshes
edgelist = pm.ls(selection=True, fl=True)

alledgelist = []

for i in edgelist:
    index = i.index()

for tar in tarlist:
    tarpy = pm.PyNode(tar)
    alledgelist.append(tarpy.e[index])

for edges in alledgelist:
    pm.select(edges)
    pm.mel.eval('SelectEdgeLoop;')
    pm.mel.eval('polyToCurve -form 2 -degree 3;')

目前它正在使用默认名称 'polyToCurve' 创建曲线。 但是我需要根据原来的源网格重命名。

我知道我的代码到目前为止还不完美... 我将不胜感激任何建议和帮助。

记录了很多命令:https://help.autodesk.com/cloudhelp/2018/CHS/Maya-Tech-Docs/CommandsPython/polySelect.html

每个命令都有很多示例,还有一些标志,例如:-name

如果本文档中没有出现命令,您可以输入 mel :

whatIs commandName;

它会给你模块的路径

我也喜欢使用正则表达式,所以我在这里包含了一个,但你可以删除它,因为我给了你一个替代的第 22 行(它感觉不太干净,但它有效)

import maya.cmds as cmds
# if using regex
import re
#Select meshes to use as a source for copying the curves.
# pSphere3 pSphere2 pSphere1
tarlist = cmds.ls(selection=True, fl=True)

#Select an edge within the selected meshes
# pSphere3.e[636]
edgelist = cmds.ls(selection=True, fl=True)

# Result: [u'e[636]'] # 
indexes = [i.split('.')[-1] for i in edgelist]

# Result: [u'pSphere3.e[636]', u'pSphere2.e[636]', u'pSphere1.e[636]'] # 
alledgelist = [t+'.'+i for i in indexes for t in tarlist]

# regex = `anyString`.e[`anyDigit`] \ capture what is in ``
p = re.compile('(\w+).e\[(\d+)\]')
for e in alledgelist:
    # without regex
    name, id = e.replace('e[', '')[:-1].split('.')
    # with regex
    name, id = p.search(e).group(1), p.search(e).group(2)
    edgeLoop = cmds.polySelect(name, el=int(id))
    cmds.polyToCurve(form=2, degree=3, name='edgeLoop_{}_{}'.format(name, id))