# coding=utf-8 # -*- coding: utf-8 -*- import os from mocaphelper import version import mocaphelperutility import mocaphelperrecore import mocaphelperarbcore from maya import cmds from maya import mel from maya import OpenMayaUI as omui from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * from PySide2.QtUiTools import * from shiboken2 import wrapInstance mayaMainWindowPtr = omui.MQtUtil.mainWindow() pyVersion = mocaphelperutility.getPythonVersion() if pyVersion < 3: mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget) else: mayaMainWindow = wrapInstance(int(mayaMainWindowPtr), QWidget) class MoCapHelperUI(QWidget): #sac: sac_iteration = 1 sac_intensity = 1.0 sac_useTime = True sac_method = "3linear" sac_selType = "curves" sac_timeUnit = 5.0 #fa: fa_refobjs = None #re: re_exp = "" re_name = "" re_caseCheck = False re_prefix = "" #arb: arb_fromtime = 10.0 arb_totime = 11.0 def __init__(self, *args, **kwargs): super(MoCapHelperUI, self).__init__(*args, **kwargs) self.setParent(mayaMainWindow) self.setWindowFlags(Qt.Window) self.setObjectName('mocaphelperui') self.setWindowTitle('moCapHelper v'+str(version)) self.loadUI() self.initSac() self.initFa() self.initre() self.intiArb() self.re_exp = self.ui.re_expEdit.text() # self.arb_syncRange() def loadUI(self): loader = QUiLoader() currentDir = os.path.dirname(__file__) file = QFile(currentDir+"/mocaphelperui.ui") file.open(QFile.ReadOnly) try: self.ui = loader.load(file, parentWidget=self) finally: file.close() layout = QVBoxLayout() layout.addWidget(self.ui) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) self.setLayout(layout) #sac: def initSac(self): self.ui.sac_itEdit.textEdited.connect(self.on_sac_itEditEdited) self.ui.sac_inEdit.textEdited.connect(self.on_sac_inEditEdited) self.ui.sac_utCheckBox.stateChanged.connect(self.on_sac_utCheckBoxChanged) self.ui.sac_tuEdit.textEdited.connect(self.on_sac_tuEditEdited) self.ui.sac_selTypeComboBox.activated[str].connect(self.on_sac_selTypeComboBoxChanged) self.ui.sac_smoothMethodComboBox.activated[str].connect(self.on_sac_smoothMethodComboBoxChanged) self.ui.sac_cmdButton.clicked.connect(self.on_sac_cmdButtonClicked) def on_sac_itEditEdited(self): self.sac_iteration = int(eval(self.ui.sac_itEdit.text())) def on_sac_inEditEdited(self): self.sac_intensity = float(eval(self.ui.sac_inEdit.text())) def on_sac_utCheckBoxChanged(self): self.sac_useTime = self.ui.sac_utCheckBox.isChecked() def on_sac_tuEditEdited(self): self.sac_timeUnit = float(eval(self.ui.sac_tuEdit.text())) def on_sac_selTypeComboBoxChanged(self, text): self.sac_selType = text def on_sac_smoothMethodComboBoxChanged(self, text): self.sac_method = text def on_sac_cmdButtonClicked(self): seltype = 0 if self.sac_selType == 'selected keys' : seltype = 1 cmds.moCapHelper_smoothAniCurve( method = self.sac_method , i = self.sac_iteration , intensity = self.sac_intensity , sel = seltype , u = self.sac_useTime , tu = self.sac_timeUnit ) #fa: def initFa(self): self.ui.fa_assignButton.clicked.connect(self.on_fa_assignButtonClicked) self.ui.fa_cmdButton.clicked.connect(self.on_fa_cmdButtonClicked) self.ui.fa_fastRecordButton.clicked.connect(self.on_fa_fastRecordButtonClicked) def on_fa_assignButtonClicked(self): curnode = mocaphelperutility.getSelectedNodes()[0] self.ui.fa_refEdit.setText(curnode) def on_fa_cmdButtonClicked(self): if self.ui.fa_refEdit.text() =="": raise Exception("no ref obj in ui!") else: #cmds.moCapHelper_frameAlign(ref = self.fa_refobjs) mel.eval("moCapHelper_frameAlign -ref "+self.ui.fa_refEdit.text()) def on_fa_fastRecordButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] loc = mocaphelperarbcore.createLoc("mocaphelper_fa_temp_loc")[0] cmds.setKeyframe(loc,at = ["tx"]) self.ui.fa_refEdit.setText(obj) mocaphelperutility.selectNodes(loc) self.on_fa_cmdButtonClicked() self.ui.fa_refEdit.setText(loc) #re: def initre(self): currentDir = os.path.dirname(__file__) self.re_presetFilePath = currentDir+"\\re_exp_preset.txt" self.re_backupPresetFilePath = currentDir+"\\re_exp_preset_backup.txt" if os.path.exists(self.re_presetFilePath) == False: mocaphelperrecore.presetfileRebuild(self.re_presetFilePath,self.re_backupPresetFilePath) self.ui.re_expPresetComboBox.currentIndexChanged.connect(self.on_re_expPresetComboBoxChanged) self.re_reloadPreset() self.ui.re_reloadButton.clicked.connect(self.on_re_reloadButtonClicked) self.ui.re_openFileButton.clicked.connect(self.on_re_openFileButtonClicked) self.ui.re_assignButton.clicked.connect(self.on_re_assignButtonClicked) self.ui.re_recordButton.clicked.connect(self.on_re_recordButtonClicked) self.ui.re_layerNameEdit.setText("layername") self.ui.re_prefixEdit.textChanged.connect(self.on_re_layerPrefixEditEdited) self.ui.re_prefixEdit.textEdited.connect(self.on_re_layerPrefixEditEdited) self.ui.re_layerNameEdit.textChanged.connect(self.on_re_layerNameEditEdited) self.ui.re_layerNameEdit.textEdited.connect(self.on_re_layerNameEditEdited) self.ui.re_expEdit.textChanged.connect(self.on_re_expEditEdited) self.ui.re_expEdit.textEdited.connect(self.on_re_expEditEdited) self.ui.re_selectMainCtrlButton.clicked.connect(self.on_re_selectMainCtrlButtonClicked) self.ui.re_selectChildButton.clicked.connect(self.on_re_selectChildButtonClicked) self.ui.re_selectChildCtrlButton.clicked.connect(self.on_re_selectChildCtrlButtonClicked) self.ui.re_selectVisChildCtrlButton.clicked.connect(self.on_re_selectVisChildCtrlButtonClicked) self.ui.re_expSelectButton.clicked.connect(self.on_re_expSelectButtonClicked) self.ui.re_expCreateLayerButton.clicked.connect(self.on_re_expcreateLayerButtonClicked) self.ui.re_selectedCreateLayerButton.clicked.connect(self.on_re_selcreateLayerButtonClicked) self.ui.re_caseCheckCheckBox.stateChanged.connect(self.on_re_caseCheckCheckBoxChanged) self.ui.re_extractLayerInfoButton.clicked.connect(self.on_re_extractLayerInfoButtonClicked) def on_re_layerPrefixEditEdited(self): self.re_prefix = self.ui.re_prefixEdit.text() def on_re_layerNameEditEdited(self): self.re_name = self.ui.re_layerNameEdit.text() def on_re_expEditEdited(self): self.re_exp = self.ui.re_expEdit.text() def on_re_selectChildButtonClicked(self): selectednodes = mocaphelperutility.getSelectedNodes() children = mocaphelperutility.getChildNodes(selectednodes,nodetype="all") mocaphelperutility.selectNodes(children) print("objs selected: ",children) def on_re_selectChildCtrlButtonClicked(self): selectednodes = mocaphelperutility.getSelectedNodes() children = mocaphelperutility.getChildNodes(selectednodes,nodetype="nurbsCurve") mocaphelperutility.selectNodes(children) print("objs selected: ",children) def on_re_selectVisChildCtrlButtonClicked(self): selectednodes = mocaphelperutility.getSelectedNodes() children = mocaphelperutility.getChildNodes(selectednodes,nodetype="nurbsCurve") mocaphelperutility.selectNodes(children,visible=True) print("objs selected: ",children) def on_re_selectMainCtrlButtonClicked(self): mocaphelperrecore.selMainCtrl() def on_re_expSelectButtonClicked(self): actOnType = getReActOnType(self) childcheck = self.ui.re_childCheckBox.isChecked() seltednodes = mocaphelperutility.getSelectedNodes() if childcheck: ctrls = mocaphelperutility.getChildNodes(seltednodes,nodetype=actOnType) else: ctrls = seltednodes matchlist = mocaphelperrecore.retestlist(ctrls,self.re_exp,self.re_caseCheck) mocaphelperutility.selectNodes(matchlist) print("objs selected: ",matchlist) def on_re_selcreateLayerButtonClicked(self): sel = mocaphelperutility.getSelectedNodes() mocaphelperrecore.createDisplayLayer(self.re_prefix+self.re_name,sel) def on_re_expcreateLayerButtonClicked(self): actOnType = getReActOnType(self) childcheck = self.ui.re_childCheckBox.isChecked() mocaphelperutility.openUndoChunk() try: mocaphelperrecore.expCreateDisplayLayer(self.re_exp,self.re_name,self.re_prefix,self.re_caseCheck,childcheck = childcheck ,nodetype = actOnType) finally: mocaphelperutility.closeUndoChunk() def on_re_extractLayerInfoButtonClicked(self): mocaphelperrecore.extractLayerInfo(self) def on_re_caseCheckCheckBoxChanged(self): self.re_caseCheck = self.ui.re_caseCheckCheckBox.isChecked() def on_re_expPresetComboBoxChanged(self): pass def on_re_assignButtonClicked(self): index = self.ui.re_expPresetComboBox.currentIndex() self.ui.re_layerNameEdit.setText(self.re_itemlist[index][0]) self.ui.re_expEdit.setText(self.re_itemlist[index][1]) def on_re_recordButtonClicked(self): self.re_rawstr = mocaphelperrecore.strAppend(self.re_rawstr,self.re_name,self.re_exp) self.re_itemlist = mocaphelperrecore.rawStrBuild(self.re_rawstr) mocaphelperrecore.presetfileRebuild(self.re_presetFilePath,self.re_backupPresetFilePath) mocaphelperrecore.presetFileWrite(self.re_presetFilePath,self.re_rawstr) self.re_reloadPreset() def on_re_openFileButtonClicked(self): os.startfile(self.re_presetFilePath) def on_re_reloadButtonClicked(self): self.re_reloadPreset() def re_expPresetComboBoxRebuild(self): self.ui.re_expPresetComboBox.clear() for item in self.re_itemlist: convertedstr = "\""+item[0]+"\"\""+item[1]+"\"" self.ui.re_expPresetComboBox.addItem( convertedstr ) self.ui.re_expPresetComboBox.setCurrentIndex(0) def re_reloadPreset(self): if os.path.exists(self.re_presetFilePath) == False: mocaphelperrecore.presetfileRebuild(self.re_presetFilePath,self.re_backupPresetFilePath) self.re_rawstr = mocaphelperrecore.presetFileRead(self.re_presetFilePath) self.re_itemlist = mocaphelperrecore.rawStrBuild(self.re_rawstr) self.re_expPresetComboBoxRebuild() # arb: def intiArb(self): # timerange self.ui.arb_setFromButton.clicked.connect(self.arb_setFrom) self.ui.arb_setToButton.clicked.connect(self.arb_setTo) self.ui.arb_syncRangeButton.clicked.connect(self.arb_syncRange) self.ui.arb_delInRangeButton.clicked.connect(self.on_arb_delInRangeButtonClicked) self.ui.arb_delOutRangeButton.clicked.connect(self.on_arb_delOutRangeButtonClicked) self.ui.arb_offsetFrameButton.clicked.connect(self.on_arb_offsetFrameButtonClicked) self.ui.arb_stickyDelButton.clicked.connect(self.on_arb_stickyDelButtonClicked) self.ui.arb_fromEdit.textChanged.connect(self.on_arb_fromEditEdited) self.ui.arb_fromEdit.textEdited.connect(self.on_arb_fromEditEdited) self.ui.arb_toEdit.textChanged.connect(self.on_arb_toEditEdited) self.ui.arb_toEdit.textEdited.connect(self.on_arb_toEditEdited) # basic self.ui.arb_createLocButton.clicked.connect(self.on_arb_createLocButtonClicked) self.ui.arb_rePosButton.clicked.connect(self.on_arb_rePosButtonClicked) self.ui.arb_pointConstraintButton.clicked.connect(self.on_arb_pointConstraintButtonClicked) self.ui.arb_orientConstraintButton.clicked.connect(self.on_arb_orientConstraintButtonClicked) self.ui.arb_parentConstraintButton.clicked.connect(self.on_arb_parentConstraintButtonClicked) self.ui.arb_delConstraintButton.clicked.connect(self.on_arb_delConstraintButtonClicked) self.ui.arb_bakeButton.clicked.connect(self.on_arb_bakeButtonClicked) # simplebake self.ui.arb_simpleBakeAAssignButton.clicked.connect(self.on_arb_simpleBakeAAssignButtonClicked) self.ui.arb_simpleBakeBAssignButton.clicked.connect(self.on_arb_simpleBakeBAssignButtonClicked) self.ui.arb_simpleBakeToLocButton.clicked.connect(self.on_arb_simpleBakeToLocButtonClicked) self.ui.arb_simpleBakeAToBButton.clicked.connect(self.on_arb_simpleBakeAToBButtonClicked) self.ui.arb_simpleBakeBToAButton.clicked.connect(self.on_arb_simpleBakeBToAButtonClicked) # fk2ik self.ui.arb_fk2ikEndCtrlAssignButton.clicked.connect(self.on_arb_fk2ikEndCtrlAssignButtonClicked) self.ui.arb_fk2ikCtrlRefAssignButton.clicked.connect(self.on_arb_fk2ikCtrlRefAssignButtonClicked) self.ui.arb_fk2ikTwistAssignButton.clicked.connect(self.on_arb_fk2ikTwistAssignButtonClicked) self.ui.arb_fk2ikTwistRefAssignButton.clicked.connect(self.on_arb_fk2ikTwistRefAssignButtonClicked) self.ui.arb_fk2ikConvertButton.clicked.connect(self.on_arb_fk2ikConvertButtonClicked) # pinpos self.ui.arb_pinPosPinCurButton.clicked.connect(self.on_arb_pinPosPinCurButtonClicked) self.ui.arb_pinPosPinParentButton.clicked.connect(self.on_arb_pinPosPinParentButtonClicked) self.arb_syncRange() def on_arb_fromEditEdited(self): print("setfrom:",eval(self.ui.arb_fromEdit.text())) self.arb_fromtime = float(eval(self.ui.arb_fromEdit.text())) def on_arb_toEditEdited(self): print("setto:",eval(self.ui.arb_toEdit.text())) self.arb_totime = float(eval(self.ui.arb_toEdit.text())) # print("setto:",self.ui.arb_toEdit.text(),self.arb_totime) def arb_syncRange(self): timerange = mocaphelperutility.getTimeRange() print("syncrangeresult:",timerange) self.ui.arb_fromEdit.setText(str(timerange[0])) self.ui.arb_toEdit.setText(str(timerange[1])) def arb_setFrom(self): time = mocaphelperutility.getCurrentFrame() self.ui.arb_fromEdit.setText(str(time)) def arb_setTo(self): time = mocaphelperutility.getCurrentFrame() self.ui.arb_toEdit.setText(str(time)) def on_arb_delInRangeButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() print("delete inrange",self.arb_fromtime,self.arb_totime) mocaphelperarbcore.deleteInrange(objs,self.arb_fromtime,self.arb_totime) def on_arb_delOutRangeButtonClicked(self): if self.arb_fromtime>self.arb_totime: raise Exception("fromtime > totime") else: objs = mocaphelperutility.getSelectedNodes() print("delete outrange",self.arb_fromtime,self.arb_totime) mocaphelperarbcore.deleteOutrange(objs,self.arb_fromtime,self.arb_totime) def on_arb_offsetFrameButtonClicked(self): if self.arb_fromtime==self.arb_totime: raise Exception("fromtime == totime") else: offsettime = self.arb_totime-self.arb_fromtime objs = mocaphelperutility.getSelectedNodes() mocaphelperarbcore.offsetFrame(objs,offsettime) def on_arb_stickyDelButtonClicked(self): mocaphelperarbcore.stickyDelete(self) def on_arb_createLocButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() if len(objs) == 0: cmds.warning("No nodes selected") return pos = mocaphelperutility.getWorldPos(objs[0]) rot = mocaphelperutility.getWorldRot(objs[0]) roo = mocaphelperutility.getRotOrder(objs[0]) mocaphelperarbcore.createLoc("c_loc_"+objs[0],pos,rot,roo) def on_arb_rePosButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() if len(objs) == 0: cmds.warning("No nodes selected") return mocaphelperarbcore.reposition(objs[0],objs[1]) def on_arb_pointConstraintButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() ctrlobj = objs[:-1] targetobj = objs[-1] mocaphelperarbcore.createPointConstraint(ctrlobj,targetobj,maintainoffset=self.ui.arb_maintainOffsetCheckBox.isChecked()) def on_arb_orientConstraintButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() ctrlobj = objs[:-1] targetobj = objs[-1] mocaphelperarbcore.createOrientConstraint(ctrlobj,targetobj,maintainoffset=self.ui.arb_maintainOffsetCheckBox.isChecked()) def on_arb_parentConstraintButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() ctrlobj = objs[:-1] targetobj = objs[-1] mocaphelperarbcore.createParentConstraint(ctrlobj,targetobj,maintainoffset=self.ui.arb_maintainOffsetCheckBox.isChecked()) def on_arb_delConstraintButtonClicked(self): objs = mocaphelperutility.getSelectedNodes() mocaphelperarbcore.deleteAllConstraint(objs) # for obj in objs: # check = mocaphelperarbcore.checkConstraint(obj) # if check != False: # if check[0] != None: # mocaphelperarbcore.deleteParentConstraint(check[0],obj) # elif check[1] != None : # mocaphelperarbcore.deletePointConstraint(check[1],obj) # elif check[2] != None : # mocaphelperarbcore.deleteOrientConstraint(check[2],obj) # else: # raise Exception("delconstraint error: constraint list out of range!") # else: # point = cmds.listRelatives(obj,children = True,type = "pointConstraint") # orient = cmds.listRelatives(obj,children = True,type = "orientConstraint") def on_arb_bakeButtonClicked(self): mintime = self.arb_fromtime maxtime = self.arb_totime objs = mocaphelperutility.getSelectedNodes() singleobj = objs[0] check = mocaphelperarbcore.checkConstraint(singleobj) smartbake = self.ui.arb_smartBakeCheckBox.isChecked() if len(objs) == 1 and self.ui.arb_onlyBakeConstraintCheckBox.isChecked() and check != False: type = "all" if check[0] != None: type = "parent" elif check[1] != None : type = "point" elif check[2] != None : type = "orient" else: type = "parent" if smartbake: mocaphelperarbcore.smartbake(objs,mintime,maxtime,type) else: mocaphelperarbcore.bake(objs,mintime,maxtime,type) def on_arb_simpleBakeAAssignButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] self.ui.arb_simpleBakeAEdit.setText(obj) def on_arb_simpleBakeBAssignButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] self.ui.arb_simpleBakeBEdit.setText(obj) def on_arb_simpleBakeToLocButtonClicked(self): mintime = self.arb_fromtime maxtime = self.arb_totime targetA = self.ui.arb_simpleBakeAEdit.text() mocaphelperutility.openUndoChunk() try: # obj = mocaphelperutility.getSelectedNodes()[0] locA = mocaphelperarbcore.createLoc(targetA +"_loc") mocaphelperarbcore.createParentConstraint(targetA,locA,False) mocaphelperarbcore.bake(locA,mintime,maxtime,"all") mocaphelperarbcore.deleteAllConstraint(locA) self.ui.arb_simpleBakeBEdit.setText(locA[0]) finally: mocaphelperutility.closeUndoChunk() def on_arb_simpleBakeAToBButtonClicked(self): targetA = self.ui.arb_simpleBakeAEdit.text() targetB = self.ui.arb_simpleBakeBEdit.text() maintainoffset=self.ui.arb_maintainOffsetCheckBox.isChecked() mocaphelperutility.openUndoChunk() try: check = mocaphelperarbcore.checkConstraint(targetB) if check != False: raise Exception("obj B has constraint already!") else: mintime = self.arb_fromtime maxtime = self.arb_totime type = getArbType(self) mocaphelperarbcore.bakeAtoB(targetA,targetB,mintime,maxtime,type,maintainoffset,smart = self.ui.arb_smartBakeCheckBox.isChecked()) finally: mocaphelperutility.closeUndoChunk() def on_arb_simpleBakeBToAButtonClicked(self): targetA = self.ui.arb_simpleBakeAEdit.text() targetB = self.ui.arb_simpleBakeBEdit.text() maintainoffset=self.ui.arb_maintainOffsetCheckBox.isChecked() mocaphelperutility.openUndoChunk() try: check = mocaphelperarbcore.checkConstraint(targetA) if check != False: raise Exception("obj A has constraint already!") else: mintime = self.arb_fromtime maxtime = self.arb_totime type = getArbType(self) mocaphelperarbcore.bakeAtoB(targetB,targetA,mintime,maxtime,type,maintainoffset,smart = self.ui.arb_smartBakeCheckBox.isChecked()) finally: mocaphelperutility.closeUndoChunk() def on_arb_fk2ikEndCtrlAssignButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] self.ui.arb_fk2ikEndCtrlEdit.setText(obj) def on_arb_fk2ikCtrlRefAssignButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] self.ui.arb_fk2ikCtrlRefEdit.setText(obj) def on_arb_fk2ikTwistAssignButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] self.ui.arb_fk2ikTwistEdit.setText(obj) def on_arb_fk2ikTwistRefAssignButtonClicked(self): obj = mocaphelperutility.getSelectedNodes()[0] self.ui.arb_fk2ikTwistRefEdit.setText(obj) def on_arb_fk2ikConvertButtonClicked(self): mintime = self.arb_fromtime maxtime = self.arb_totime maintainoffset=self.ui.arb_maintainOffsetCheckBox.isChecked() smartbake = self.ui.arb_smartBakeCheckBox.isChecked() endctrl = self.ui.arb_fk2ikEndCtrlEdit.text() ctrlref = self.ui.arb_fk2ikCtrlRefEdit.text() twist = self.ui.arb_fk2ikTwistEdit.text() twistref = self.ui.arb_fk2ikTwistRefEdit.text() mocaphelperutility.openUndoChunk() try: if mocaphelperutility.objExist(endctrl) == False: endctrl = "" if mocaphelperutility.objExist(ctrlref) == False: ctrlref = "" if mocaphelperutility.objExist(twist) == False: twist = "" if mocaphelperutility.objExist(twistref) == False: twistref = "" check = mocaphelperarbcore.checkConstraint(endctrl) if check != False: raise Exception("endctrl has constraint already!") if mocaphelperutility.objExist(twist) == True: check = mocaphelperarbcore.checkConstraint(twist) if check != False: raise Exception("twist has constraint already!") if endctrl== "" or ctrlref =="": raise Exception("endctrl or ctrlref not set or not exist") else: if twist == "" or twistref == "": mocaphelperarbcore.bakeAtoB(ctrlref,endctrl,mintime,maxtime,"parent",maintainoffset,smartbake) else: mocaphelperarbcore.bakeAtoB(ctrlref,endctrl,mintime,maxtime,"parent",maintainoffset,smartbake) twistpos = mocaphelperutility.getWorldPos(twist) twistrot = mocaphelperutility.getWorldRot(twist) twistroo = mocaphelperutility.getRotOrder(twist) twistloc = mocaphelperarbcore.createLoc("temp_twist_loc",twistpos,twistrot,twistroo) cons1 = mocaphelperarbcore.createParentConstraint(twistref,twistloc,True) cons2 = mocaphelperarbcore.createPointConstraint(twistloc,twist,False) if smartbake: mocaphelperarbcore.smartbake(twist,mintime,maxtime,"point") else: mocaphelperarbcore.bake(twist,mintime,maxtime,"point") mocaphelperutility.deleteObj(cons1) mocaphelperutility.deleteObj(cons2) mocaphelperutility.deleteObj(twistloc) finally: mocaphelperutility.closeUndoChunk() def on_arb_pinPosPinCurButtonClicked(self): mintime = self.arb_fromtime maxtime = self.arb_totime mocaphelperutility.openUndoChunk() try: objs = mocaphelperutility.getSelectedNodes() mocaphelperarbcore.pinCurPos(objs,mintime,maxtime) finally: mocaphelperutility.closeUndoChunk() def on_arb_pinPosPinParentButtonClicked(self): mintime = self.arb_fromtime maxtime = self.arb_totime mocaphelperutility.openUndoChunk() try: objs = mocaphelperutility.getSelectedNodes() mocaphelperarbcore.pinParentPos(objs,mintime,maxtime) finally: mocaphelperutility.closeUndoChunk() def getArbType(obj): index = obj.ui.arb_simpleBakeTypeComboBox.currentIndex() # type = mocaphelperutility.unicodeToStr(type) # enList = ["all","parent","point","orient","onlyscale"] # cnList = ["平移旋转","平移","旋转","所有属性"] type = None if index == 0: type = "all" elif index == 1: type = "parent" elif index == 2: type = "point" elif index == 3: type = "orient" else: raise Exception("id out of range") print("index is now:",index,".type is now:",type) return type def getReActOnType(obj): index = obj.ui.re_actTypeComboBox.currentIndex() type = None if index == 0: type = "all" elif index == 1: type = "nurbsCurve" print("index is now:",index,".type is now:",type) return type