Почему я получаю объект недопустимой ошибки? - PullRequest
0 голосов
/ 30 апреля 2019

Я думаю, что что-то не так с моим соглашением об именах, но я не уверен, как это исправить. он продолжает давать мне недопустимый объект, даже когда пытался назвать его на основе вершины, пожалуйста, помогите.

for i in range(1,100):
    print i

def cactus():
#creating base of cactus
    cmds.polyCylinder(sc=1,sa=10,sh=10, n= "cactus1_Base["+str(i)+"]")

Я получаю ошибку:

# Error: TypeError: file <maya console> line 17: Object cactus1_Base[99].e[140:169] is invalid this is the error im getting and the code is

1 Ответ

1 голос
/ 01 мая 2019

У меня нет Maya на этой неделе, поэтому я не могу проверить результат этого кода. Первый фрагмент кода будет для меня лучшим решением, но у вас есть и второй.

Обратите внимание, что в вашем коде, символы '[' и ']' зарезервированы в Maya для компонентов: vtx [], e [], f [] ... и т. д., поэтому вы не можете использовать их для именования

Во-вторых, когда вы создаете свою итерацию'i', это за пределами вашей функции, поэтому между i и вашей функцией cactus нет реальной связи (). Поэтому вам нужно подумать о том, как вы хотите создать кактус.Вот почему я написал эти два примера: первый предполагает, что вы создаете элементы кактуса, второй - просто для создания группы кактусов

. Вы можете пойти дальше с помощью kwargs и попытаться имитировать cmds.polyCylinder * 1007.*

На всякий случай немного уроков по питону для майя: https://www.youtube.com/watch?v=PDKxDbt6EGQ&t=4s

def nameChecker(name, start=0, max=100000, stringFormat=True):   
    if not '{' in name:
        stringFormat = False
    a = start
    while a < max:
        if stringFormat:
            confName = name.format(a)
        else:
            confName = name + str(a)
        if not cmds.objExists(confName):
            return confName
        a+=1

def create_cactus(baseName='cactus1_Base_{:03d}'):
    name_conform = nameChecker(baseName)
    cactus = cmds.polyCylinder(sc=1,sa=10,sh=10, n=name_conform)[0]
    return cactus

cactus_output = []
for i in range(1,100):
    cactus = create_cactus()
    cactus_output.append(cactus)
print(cactus_output )

ИЛИ более просто:

def create_cactus(nb_of_cactus=100):
    cactus_output = []
    for nb in range(nb_of_cactus):
        name = "cactus1_Base_{}".format(nb)
        cactus = cmds.polyCylinder(sc=1,sa=10,sh=10, n=name)[0]
        cactus_output.append(cactus)
    return cactus
myCactus= create_cactus(100)
print(myCactus)

или на основе выбора:

def create_cactusVtx():
    mysel = cmds.ls(sl=True, fl=True)
    for i in range(len(mysel)):
        id = mysel.split('[')[-1][:-1]
        name = "cactus1_Base_{}".format(i)
        cactus = cmds.polyCylinder(sc=1,sa=10,sh=10, n=name)[0]
...