python - 将多个选择添加到要用于捕捉脚本的主选择列表
问题描述
通过存储控制曲线列表来设置捕捉脚本,并且一直无法让我的测试脚本在捕捉功能中使用我的选择(现在我希望它打印组合的 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(label='FK 2 IK', command = Fk2Ik, width=100) cmds.button(label='IK 2 FK', command = combined_selection, width=100)
在此脚本中,您使用了两次 smae 变量:
def combined_selection():
fkCtrlsInfo = []
lwristIKChain =selectJointLelbowIK()
lwristIKChain =selectJointLwristIK()
fkCtrlsInfo.append(lwristIKChain+lwristIKChain)
print fkCtrlsInfo
lwristIKChain
所以你不会返回 selectJointLelbowIK
另外:它打印一个嵌套列表,因为 append 不合并列表:
fkCtrlsInfo = []
fkCtrlsInfo.append(['bananaLeftIK', 'bananaRightIK'])
# result : [['bananaLeftIK', 'bananaRightIK']]
如果你想合并:
fkCtrlsInfo += lwristIKChain
或者您可以使用 itertools 中的链来展平嵌套列表
此外,如果您没有在 combine_selection 中使用 return,或者如果您没有使用 global 语句,我不确定 fkCtrlsInfo 将在您的课程中打印什么......
我认为你应该编写你的脚本部分 outisde 函数来找到你有数据流问题的地方
推荐阅读
- c# - 具有可变长度和备用列表内容的列表排列
- entity-framework - EF Core + Sqlite 3.24.0 在使用 UPSERT 操作的触发器中引发异常
- meta-tags - 如何使用元标记来解决加载外部脚本的内容安全策略问题
- json - 在 Rest api Request 中创建多个主体
- javascript - Vuetify.js:部署在 Gitlab 上时 v-stepper 中的颜色属性不生效。如何将颜色道具移动到 CSS 类?
- c++ - 计算两个集合之间的交集时出现 set_intersection 错误
- python - 正则表达式用于使用正向前瞻或后视进行增强分配操作
- webpack - CSS 未包含在 index.html 中
- python - 根据表dynamodb python中的存在更新或插入项目
- android - 通过将 apk 发送给其他人,我的应用程序图标消失了