第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有返回變量函數(shù) Maya Python 的 ScriptJob

具有返回變量函數(shù) Maya Python 的 ScriptJob

Go
千萬里不及你 2022-10-25 14:42:57
我在使用 Maya 的 scriptJob 命令時遇到問題:如果我將 scriptJob 設置為不帶參數(shù)的函數(shù),一切正常,但如果我需要將變量傳遞給將由 scriptJob 執(zhí)行的函數(shù),則會返回此錯誤:#Error: TypeError: file <maya console> line 5: Invalid arguments for flag 'ac'.  Expected ( string, string or function ), got [ str, NoneType ]#代碼非常簡單,我只想了解為什么會這樣。import maya.cmds as cmdsdef a():    cube = "pCube1"    cmds.scriptJob(ac = ["pCube2.translateY", delete(cube)])    return cubedef delete(cube):    cmds.delete(cube)cube = a()a()希望您能夠幫助我。
查看完整描述

1 回答

?
白衣染霜花

TA貢獻1796條經(jīng)驗 獲得超10個贊

有 3 種方法可以將參數(shù)傳遞給回調函數(shù)。


1:

您可以使用partial. 這通常用于自定義接口事件,例如Qt傳遞參數(shù),您可以在此處執(zhí)行相同的概念:


from functools import partial

import maya.cmds as cmds



def delete_cube(cube):

    if cmds.objExists(cube):

        cmds.delete(cube)



cube = "pCube1"

cid = cmds.scriptJob(ac=["pCube2.translateY", partial(delete_cube, cube)])

2:

與第一種方法類似,另一種流行的方法是使用lambda. 唯一的好處是它是一個內置命令,不需要導入任何模塊,但它的語法可能一目了然不太可讀:


import maya.cmds as cmds



def delete_cube(cube):

    if cmds.objExists(cube):

        cmds.delete(cube)



cube = "pCube1"

cid = cmds.scriptJob(ac=["pCube2.translateY", lambda x=cube: delete_cube(x)])

3:

或者您可以將其作為字符串傳遞,但如果參數(shù)本身是字符串,則需要正確格式化參數(shù),包括其引號:


import maya.cmds as cmds



def delete_cube(cube):

    if cmds.objExists(cube):

        cmds.delete(cube)



cube = "pCube1"

cid = cmds.scriptJob(ac=["pCube2.translateY", "delete_cube('{}')".format(cube)])

您不一定必須使用,您可以使用or.format連接字符串。就我個人而言,我更喜歡第一種方法,因為它感覺更干凈,更省事。+%partial

一些結束語:

  • 在您的回調函數(shù)中,您應該包含一個條件檢查,cmds.objExists以確保您要刪除的內容確實存在,否則它將引發(fā)錯誤。

  • 不要忘記將結果捕獲到cmds.scriptJob一個變量中,以便您以后可以輕松地刪除它cmds.scriptJob(kill=cid)。


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號