首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个选择添加到要用于快照脚本的主选择列表中

将多个选择添加到要用于快照脚本的主选择列表中
EN

Stack Overflow用户
提问于 2019-07-27 17:09:31
回答 1查看 84关注 0票数 0

通过存储一个控制曲线列表来设置一个快照脚本,并且一直很难让我的测试脚本在我的快照函数中使用我的选择(现在,我希望它能够打印合并的ik和fk控制曲线)。

打印选择列表时,它会打印当前选择的内容两次,而不是要使用的选择。

当我在点击按钮之前取消选择视口上的任何内容(在工具中进行选择之后),我会得到以下错误

代码语言:javascript
复制
 // Error: TypeError: file <maya console> line 243: unsupported operand type(s) for +: 'NoneType' and 'NoneType' //

当试图将我的fk曲线选择(SelectJointLAFK)添加到我的(combined_selection)中时,我会得到以下错误

代码语言:javascript
复制
// Error: IndexError: file <maya console> line 204: list assignment index out of range //

我相信当我按下我的按钮时,它会再次运行我的选择函数,但可能我错了。

为按钮

代码语言:javascript
复制
###################################################################################
# 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)

用于选择列表

代码语言:javascript
复制
###################################################################################
            #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’]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-29 03:30:41

因此,首先您的按钮函数应该不带逗号的解析:

Cmds.button(标签=‘fk2ik’,命令= Fk2Ik,width=100) cmds.button(标签=‘ik2fk’,命令= combined_selection,width=100)

在这个脚本中,使用了两次smae变量:

代码语言:javascript
复制
def combined_selection():
    fkCtrlsInfo = []
    lwristIKChain =selectJointLelbowIK()
    lwristIKChain =selectJointLwristIK()
    fkCtrlsInfo.append(lwristIKChain+lwristIKChain)
    print fkCtrlsInfo

lwristIKChain

所以你不会返回selectJointLelbowIK

此外:它打印嵌套列表,因为附件不合并列表:

代码语言:javascript
复制
fkCtrlsInfo = []
fkCtrlsInfo.append(['bananaLeftIK', 'bananaRightIK'])
# result : [['bananaLeftIK', 'bananaRightIK']]

如果您想合并:

代码语言:javascript
复制
fkCtrlsInfo += lwristIKChain

或者,您可以使用迭代工具中的链来扁平嵌套列表。

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

我认为您应该编写脚本部件( outisde )函数,以找出有数据流问题的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57234365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档