将多个选择添加到主选择列表以用于捕捉脚本

Adding multiple selections to a main selection list to be used for a snapping script

通过存储控制曲线列表来设置捕捉脚本并且一直无法让我的测试脚本在我的捕捉功能中使用我的选择(现在我希望它打印组合的 ik 和 fk 控制曲线) .

当我打印我的选择列表时,它打印了我当前选择的两次而不是我想使用的选择

当我在按下按钮之前取消选择视口上的任何内容时(在工具中进行选择之后)我收到此错误

 // Error: TypeError: file <maya console> line 243: unsupported operand type(s) for +: 'NoneType' and 'NoneType' //

当尝试将我的 fk 曲线选择 (selectJointLAFK) 添加到我的 (combined_selection) 时,出现此错误

// Error: IndexError: file <maya console> line 204: list assignment index out of range //

我相信我收到这些错误是因为当我按下我的按钮时,它再次 运行 我的选择功能,但也许我错了?

对于按钮

###################################################################################
# Left Arm IK FK Snapping                               # Left Arm IK FK Snapping
cmds.button(label='FK 2 IK', command = 'Fk2Ik()', width=100)
cmds.button(label='IK 2 FK',  command = 'combined_selection()', width=100)
cmds.setParent('..')
cmds.separator(h=5, style = 'none')
cmds.separator(h=5)

为选择列表

###################################################################################
            #SELECTION LISTS#                                #SELECTION LISTS#  
###################################################################################

def selectJointLAFK():

    if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
        sel = cmds.ls(sl=True)
        fkCtrls = cmds.listRelatives(sel, allDescendents=True, type=("transform",'nurbsCurve'))
        Fks = [nurbsCurve for nurbsCurve in fkCtrls if nurbsCurve.startswith('FK') & nurbsCurve.endswith('Ctrl')]
        cmds.textFieldButtonGrp(gtF0, edit = True, tx ='' .join(sel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
        del Fks[1]
        del Fks[2]
        lAFKChain = Fks+sel
        print lAFKChain
        return lAFKChain
    else:
        text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok', dismissString='No' )


def selectJointLwristIK():

    if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
        ikwrist=cmds.ls(selection = True)
        cmds.textFieldButtonGrp(gtF1, edit = True, tx ='' .join(ikwrist),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
        lwristIKChain = ikwrist
        return lwristIKChain
    else:
        text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok', dismissString='No' )

def selectJointLelbowIK():

    if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
        iksel=cmds.ls(selection = True)
        cmds.textFieldButtonGrp(gtF2, edit = True, tx ='' .join(iksel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
        lelbowIKChain = iksel
        return lelbowIKChain
    else:
        text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok', dismissString='No' )



###################################################################################
            #IK FK SNAPPING #                                #IK FK SNAPPING #  
###################################################################################  
def combined_selection():
    fkCtrlsInfo = []
    lwristIKChain =selectJointLelbowIK()
    lwristIKChain =selectJointLwristIK()
    fkCtrlsInfo.append(lwristIKChain+lwristIKChain)
    print fkCtrlsInfo

###################################################################################
            #IK 2 FK SNAP #                                  #IK 2 FK SNAP #    
class Snapping(): 
    @staticmethod
    def Ik2Fk(self):
        print ("Snapped"+fkCtrlsInfo)

我希望我的列表打印为 [FK_Shldr、FK_Elbow、Fk_Wrist、Ik_wrist、Ik_pv],但它当前打印的是

[[u'FK_Shdlr', u'FK_Shdlr']]

如果可能的话,我想了解我做错了什么

所以首先你的按钮函数应该在没有逗号的情况下解析:

cmds.button(标签='FK 2 IK',命令=Fk2Ik,宽度=100) cmds.button(标签='IK 2 FK',命令=combined_selection,宽度=100)

在此脚本中,您使用了两次 smae 变量:

def combined_selection():
    fkCtrlsInfo = []
    lwristIKChain =selectJointLelbowIK()
    lwristIKChain =selectJointLwristIK()
    fkCtrlsInfo.append(lwristIKChain+lwristIKChain)
    print fkCtrlsInfo

lwristIKChain

所以你不会 return 选择 JointLelbowIK

还有: 它打印一个嵌套列表,因为追加不合并列表:

fkCtrlsInfo = []
fkCtrlsInfo.append(['bananaLeftIK', 'bananaRightIK'])
# result : [['bananaLeftIK', 'bananaRightIK']]

如果你想合并:

fkCtrlsInfo += lwristIKChain

或者您可以使用 itertools 中的链来展平嵌套列表

此外,如果您没有在 combined_selection 中使用 return,或者如果您没有使用全局语句,我不确定 fkCtrlsInfo 将在您的 class 中打印什么...

我认为您应该在函数之外编写脚本部分,以查找存在数据流问题的地方