为什么我得到一个对象无效的错误?

问题描述 投票:0回答:1

我认为我的命名约定有问题,但我不确定如何解决它。它一直给我一个无效的对象,即使试图根据顶点命名它请帮助。

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
python maya
1个回答
1
投票

我本周没有maya所以我真的无法检查这段代码的结果第一段代码对我来说是最好的解决方案,但你也有第二段。

请注意,在您的代码中,字符'['和']'在maya中保留用于组件:vtx [],e [],f [] ...等等,因此您无法使用它们进行命名

其次,当你创建你的迭代'i'时,它在你的函数之外,所以我和你的函数cactus()之间没有真正的联系所以你必须考虑如何创建cactus。这就是为什么我写了这两个例子:第一个考虑你正在创建仙人掌元素,第二个只是为了创建一堆仙人掌

你可以超越kwargs并尝试模仿cmds.polyCylinder

以防万一maya:https://www.youtube.com/watch?v=PDKxDbt6EGQ&t=4s的python课程

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]
© www.soinside.com 2019 - 2024. All rights reserved.