Maya Python: переименование объекта с помощью цикла for - PullRequest
1 голос
/ 24 февраля 2020

, поэтому я смотрел учебник по сценариям Jo sh Sobel Python и пытался заставить циклы For работать с определенными функциями: например, когда вы используете nHair для создания ленточного отдела позвоночника, используя волосяные фолликулы и вам нужно переименовать фолликулы Моя цель - заставить For l oop искать имена, начинающиеся с определенного префикса имени, перечислить их, затем переименовать объекты в списке. У меня есть методы кодирования, которые делают то, что я прошу: но в отличие от циклов For они длинные, неуклюжие и занимают много кода. Вот что у меня получилось:

'''
import DS_jointRename_Demo
reload (DS_jointRename_Demo)
DS_jointRename_Demo.gui()
'''

import re
import maya.cmds as cmds
import maya.mel as mel

if cmds.window("renameWin", exists =True):
    cmds.deleteUI("renameWin", window = True)

myWindow = cmds.window("renameWin",t='DS_jointRename_Demo',w=200, h=500, toolbox=True)
column = cmds.columnLayout(adj=True)

def gui():

    cmds.button( label="Build Examples", c = buildExamples)
    cmds.separator( w=200, h=3)
    cmds.button( label="renameHeiarchy", c = renameHeiarchy)
    cmds.separator( w=200, h=9)
    cmds.button( label="renameGroupCont", c = renameGroupCont)
    cmds.separator( w=200, h=9)

    cmds.setParent('..')
    cmds.showWindow(myWindow)

def buildExamples(*args):
    cmds.joint(n='exampleGarbage_name11293')
    cmds.joint(n='exampleGarbage_name11397')
    cmds.joint(n='exampleGarbage_name15763')
    cmds.joint(n='exampleGarbage_name11548')
    cmds.joint(n='exampleGarbage_name11837')
    cmds.group(n='exampleGroup1',world=True,empty=True)
    cmds.parent('exampleGarbage_name11293','exampleGroup1')

    cmds.group(n='exampleGroup2',world=True,empty=True)
    cmds.joint(n='exampleWaste_name11293')

    cmds.joint(n='exampleWaste_name12973')
    cmds.parent('exampleWaste_name12973','exampleGroup2')

    cmds.joint(n='exampleWaste_name94563')
    cmds.parent('exampleWaste_name94563','exampleGroup2')

    cmds.joint(n='exampleWaste_name96397')
    cmds.parent('exampleWaste_name96397','exampleGroup2')

    cmds.joint(n='exampleWaste_name49456')
    cmds.parent('exampleWaste_name49456','exampleGroup2')

def renameHeiarchy(*args):
    garbageList = cmds.ls('exampleGarbage_name*')
    for i in garbageList:
        print garbageList
        cmds.rename(garbageList,'exampleGroup1_joint')

def renameGroupCont(*args):
    wasteList = cmds.ls('exampleWaste_name*')
    for i in wasteList:
        print wasteList
        cmds.rename(wasteList,'exampleGroup2_joint')

Я хотел бы, чтобы этот скрипт выполнял после того, как вы нажали «Примеры сборки». Я бы хотел, чтобы renameHeiarchy переименовал объединенную иерархию в exampleGroup1 в «exampleGroup1_joint» плюс увеличение числа "

exampleGroup2, в отличие от того, что у него есть суставы, не родившиеся в иерархии, а только под группой. В любом случае, когда я запускаю любую кнопку в разделе «Примеры сборки», я получаю «Ошибка: слишком много объектов или значений».

Я просто хочу, чтобы циклы for переименовывали содержимое каждой группы. Бонус, если ваш For Loops работает на них обоих

1 Ответ

0 голосов
/ 24 февраля 2020

Команда rename ожидает две строки, но вы даете ей список в качестве первого аргумента. Попробуйте это: cmds.rename(i,'exampleGroup2_joint')

...