我在寻找一种在玛雅给jointchain添加后缀的方法。 jointchain有特定的命名,因此我创建了一个包含它们所需名称的列表。 第一条链的后缀为“_1”,结果:
锁骨1 |上臂1 |腋下1 |手腕1 |
当我创建第二个时,结果是:
锁骨2 |上臂1 |腋下1 |手腕1 |
代码:
DRClavPos = cmds.xform ('DRClavicle', q=True, ws=True, t=True)
DRUpArmPos = cmds.xform ('DRUpperArm', q=True, ws=True, t=True)
DRUnArmPos = cmds.xform ('DRUnderArm', q=True, ws=True, t=True)
DRWristPos = cmds.xform ('DRWrist', q=True, ws=True, t=True), cmds.xform('DRWrist', q=True, os=True, ro=True)
suffix = 1
jntsA = cmds.ls(type="joint", long=True)
while True:
jntname = ["R_Clavicle_"+str(suffix),"R_UpperArm_"+str(suffix),"R_UnderArm_"+str(suffix),"R_Wrist_"+str(suffix)]
if jntname not in jntsA:
cmds.select (d=True)
cmds.joint ( p=(DRClavPos))
cmds.joint ( p=(DRUpArmPos))
cmds.joint ( 'joint1', e=True, zso=True, oj='xyz', radius=0.5, n=jntname[0])
cmds.joint ( p=(DRUnArmPos))
cmds.joint ( 'joint2', e=True, zso=True, oj='xyz', radius=0.5, n=jntname[1])
cmds.joint ( p=(DRWristPos[0]))
cmds.joint ( 'joint3', e=True, zso=True, oj='xyz', radius=0.5, n=jntname[2])
cmds.rename ('joint4', jntname[3])
cmds.select ( cl=True)
break
else:
suffix + 1
我试着在jntname中添加+1,结果得到了一个好的第二个链,但是第三个链在R_Clavicle_3之后有“_2”
代码,在我看来应该行得通。有谁能给我指出正确的方向吗
您永远不会重新绑定
suffix
:这是一个no-op。表达式返回
2
,然后将被完全忽略。suffix
本身引用的值在这里从不受影响。在您想在此处重新分配给
^{pr2}$suffix
:你也可以在那里使用扩展赋值:
看起来你的代码也会在场景中的每个关节上运行,这可能不是你真正想要的。在
这里有一些基本的技巧可以帮助你解决这些问题。在
使用列表进行循环-你不需要“whiletrue”,在列表中循环将遍历列表中的每一项。因此,您可以使用以下方法击中场景中的每个关节:
python有一个非常方便的特性list comprehensions,它允许您非常简单地从旧列表中创建新列表。例如:
^{pr2}$这和你的一样,但是打字少了很多(你也可以做左臂!)
Python有一个名为zip的便捷函数,它将从其他列表中的匹配项集生成一个新列表:
Python在循环方面非常聪明,因此,如果在压缩列表上循环,则可以得到如下所示的片段:
它有助于将您的函数分解成更小的函数,这样就可以清楚地看到发生了什么
把这些放在一起,你可能会得到这样的结果:
这是一个更多的前端计划,但更容易阅读和长期工作。Python列表太棒了!学会爱他们
相关问题 更多 >
编程相关推荐