def bakeLocatorsToAnimControls(controlsToBake): print "\nBaking Locators to Controls..." selBckp = cmds.ls(selection=True) start = int(cmds.playbackOptions(q=True, minTime=True)) end = int(cmds.playbackOptions(q=True, maxTime=True)) currentViewport = cmds.getPanel(wf=True) isolateState = cmds.isolateSelect(currentViewport, q=True, state=True) cmds.select(clear=True) cmds.isolateSelect(currentViewport, state=1) cmds.select(controlsToBake, replace=True) cmds.isolateSelect(currentViewport, addSelected=True ) if len(controlsToBake) > 0: cmds.waitCursor(state=True) for i in range(start, end + 1): print ("\nCurrent Frame -> " + str(i)) cmds.currentTime(i, update=True) for ctrl in controlsToBake: print ("\nControl -> " + ctrl) # gets the bake locator for this control or creates if not exists bakeLocator = getControlBakeLocator(ctrl) print ("Baking into Locator -> " + bakeLocator) # now this locator must be keyed and aligned along the timeline to the anim control creating keys by frame #get the transform values of the control cmds.select(ctrl, replace=True) position = cmds.xform(query=True, translation=True, worldSpace=True) rotation = cmds.xform(query=True, rotation=True, worldSpace=True) # locates the locator cmds.setAttr((bakeLocator + ".translateX"), position[0]) cmds.setAttr((bakeLocator + ".translateY"), position[1]) cmds.setAttr((bakeLocator + ".translateZ"), position[2]) cmds.setAttr((bakeLocator + ".rotateX"), rotation[0]) cmds.setAttr((bakeLocator + ".rotateY"), rotation[1]) cmds.setAttr((bakeLocator + ".rotateZ"), rotation[2]) # creates the key for that frame cmds.select(bakeLocator, replace=True) cmds.setKeyframe() cmds.waitCursor(state=False) cmds.isolateSelect(currentViewport, state=isolateState) cmds.currentTime(start, update=True) cmds.select(clear=True) cmds.select(selBckp, replace=True) print "\n...Locators Baked to Controls\n"
def importSets(self, *args): cmds.waitCursor(state=True) setsData = aToolsMod.loadInfoWithUser("selectSets", "setsData") self.createSetsFromData(setsData) cmds.waitCursor(state=False)
def setDivision(_level): obj = checkSel() allNode = [] del allNode[:] if obj == None: obj = mc.ls(type='mesh') mc.waitCursor(state=True) for eachObj in obj: try: smoothNode = mc.listConnections(eachObj + '.inMesh', d=True) except RuntimeError: om.MGlobal.displayWarning(u'%s节点没有inMesh属性,跳过操作...\n' % eachObj) else: if not smoothNode == None: if mc.nodeType(smoothNode[0]) == 'polySmoothFace': mc.setAttr(smoothNode[0] + '.divisions', _level) del smoothNode mc.waitCursor(state=False) ##########################################################
def redraw(self, *args, **kwargs): """ NOTE: depends on the LIST_CLASS being set in the actual class! """ try: cmds.waitCursor(st=1) self.clear() cmds.setParent(self) with self: with layouts.ScrollLayout('mgScroll#', childResizable=True) as inner_scroll: with self.LIST_CLASS('mgList#', **self.redraw_options) as inner_list: for item in self.collection: w = self.template.widget(item) self.widget_added(w) cmds.setParent(self) cmds.setParent("..") # controls only includes 'inner_scroll' for layout self.named_children['inner_scroll'] = inner_scroll self.named_children['inner_list'] = inner_list self.controls = [inner_scroll] finally: self.layout() cmds.waitCursor(st=0)
def nmpExtractWeights(cluster, joint, skinCluster, geoName): ''' Calculates the Weighting of Every Joint on Inderectly Connected Wrapped Geometry. Weight is Determined By Translating the Master Object and Calculating the Distance Changed in 3D Space on Every Vert. Returns list of list of [transform, value]''' verts = cmds.ls(geoName + '.vtx[*]', flatten=True) values = [] cmds.waitCursor(state=True) start = cmds.timerX() originalPos = [cmds.xform(vert, q=True, ws=True, t=True) for vert in verts] cmds.setAttr(cluster + '.tz', 1) deformPos = [cmds.xform(vert, q=True, ws=True, t=True) for vert in verts] cmds.setAttr(cluster + '.tz', 0) for i in range(0, len(deformPos)): difference = [ deformPos[i][0] - originalPos[i][0], deformPos[i][1] - originalPos[i][1], deformPos[i][2] - originalPos[i][2] ] distance = math.sqrt( pow(difference[0], 2) + pow(difference[1], 2) + pow(difference[2], 2)) values.append([joint, distance]) cmds.waitCursor(state=False) return values
def wait_cursor(): """Provide a waiting cursor""" try: cmds.waitCursor(state=True) yield finally: cmds.waitCursor(state=False)
def redraw(self, *args, **kwargs): """ NOTE: depends on the LIST_CLASS being set in the actual class! """ try: cmds.waitCursor(st=1) if self._scroll != 'not initialized': cmds.deleteUI(self._scroll) self._scroll = 'not initialized' self._list = 'not initialized' cmds.setParent(self) with layouts.ScrollLayout('_scroll', childResizable=True) as self._scroll: with self.LIST_CLASS('_list', **self.Redraw_Opts) as self._list: for item in self.Collection: w = self.Template.widget(item) self.widget_added(w) cmds.setParent(self.parent) # unhook the delete handlers from these guys, they are closed # so they arent part of the ACTIVE_LAYOUT self._scroll.Deleted._handlers = set() self._list.Deleted._handlers = set() self._scroll.Deleted.kill() self._list.Deleted.kill() # remove them so they fall out of scope, but keep the new _scroll self.Controls = [self._scroll] self.layout() finally: cmds.waitCursor(st=0)
def pythonScripts(): if (cmds.menu ('pythonScripts_menu', exists=True)): print ("Removing old pythonScripts menu...") cmds.deleteUI ('pythonScripts_menu') gMainWindow = maya.mel.eval('$temp1=$gMainWindow') gMainProgressBar = maya.mel.eval('$temp=$gMainProgressBar') mainDir = findFile('pythonScripts.py') timer = cmds.timerX() cmds.waitCursor (state=True) print "" cmds.progressBar (gMainProgressBar, edit=True, beginProgress=True, isInterruptable=True, status="Creating pythonScripts...", maxValue=100) pMenu = (cmds.menu ('pythonScripts_menu', parent=gMainWindow, tearOff=True, aob=True, label="pythonScripts")) gen_pythonScripts(mainDir, pMenu) cmds.waitCursor (state=False) endTime = cmds.timerX(startTime=timer) cmds.progressBar (gMainProgressBar, edit=True, endProgress=True,) print ("pythonTools has now been updated in: " + str(endTime) + " seconds...!")
def loadData(self, onlySelectedNodes=False, crashFolder=None, *args): cmds.waitCursor(state=True) cmds.refresh(suspend=True) cmds.undoInfo(openChunk=True) utilMod.startProgressBar("aTools Animation Crash Recovery - Loading data...") self.pause = True savedData = self.getSavedData(crashFolder, onlySelectedNodes) if savedData: animData = savedData["animData"]["data"] attrData = savedData["attrData"]["data"] self.applyAttrData(attrData) self.applyAnimData(animData) if not crashFolder: self.loadInfoData() utilMod.setProgressBar(endProgress=True) self.pause = False cmds.undoInfo(closeChunk=True) cmds.refresh(suspend=False) cmds.waitCursor(state=False)
def pythonScripts(): if cmds.menu("pythonScripts_menu", exists=True): # print ("Removing old pythonScripts menu...") cmds.deleteUI("pythonScripts_menu") gMainWindow = maya.mel.eval("$gMainWindow=$gMainWindow") gMainProgressBar = maya.mel.eval("$gMainProgressBar=$gMainProgressBar") mainDir = findFile("pythonScripts.py") timer = maya.mel.eval("timerX") cmds.waitCursor(state=True) # print "" cmds.progressBar( gMainProgressBar, edit=True, beginProgress=True, isInterruptable=True, status="Creating pythonScripts...", maxValue=100, ) pMenu = cmds.menu("pythonScripts_menu", parent=gMainWindow, tearOff=True, aob=True, label="pythonScripts") gen_pythonScripts(mainDir, pMenu) cmds.waitCursor(state=False) endTime = maya.mel.eval("timerX -st %(timer)s" % vars()) cmds.progressBar(gMainProgressBar, edit=True, endProgress=True)
def load(self, context, name, namespace, options): _title = "Warning: Copying texture files" _message = ("This will copy textures to current workspace, may " "take a while to complete.\n" "Are you sure ?") _copy = "Copy" _stop = "Cancel" result = cmds.confirmDialog(title=_title, message=_message, button=[_copy, _stop], defaultButton=_stop, cancelButton=_stop, dismissString=_stop) if result == _copy: workspace = cmds.workspace(query=True, rootDirectory=True) entry = "textures" asset = context["asset"]["name"] subset = context["subset"]["name"] version = "v{:0>3}".format(context["version"]["name"]) texture_dir = os.path.join(workspace, entry, asset, subset, version) cmds.waitCursor(state=True) try: copy_tree(self.package_path, texture_dir) except Exception: pass finally: cmds.waitCursor(state=False)
def duplicateSet(self, selSets, outputNameSpace, newColor): cmds.waitCursor(state=True) selSetsData = self.getSetsData(selSets) selSets = selSetsData[0] contents = selSetsData[1] inputNameSpaces = [] newSelSets = [] separator = ":" for loopContents in contents: nameSpaces = utilMod.getNameSpace(loopContents)[0] for loopNameSpace in nameSpaces: if loopNameSpace[:-1] not in inputNameSpaces: inputNameSpaces.append(loopNameSpace[:-1]) for inputNameSpace in inputNameSpaces: selSetsStr = str(selSetsData) selSetsData = eval(selSetsStr.replace("%s%s"%(inputNameSpace, separator), "%s%s"%(outputNameSpace, separator))) for loopSet in selSets: newSelSets.append(self.getRenamedColor(loopSet, newColor)) selSetsData[0] = newSelSets self.createSetsFromData(selSetsData) cmds.waitCursor(state=False)
def duplicateSet(self, selSets, outputNameSpace, newColor): cmds.waitCursor(state=True) selSetsData = self.getSetsData(selSets) selSets = selSetsData[0] contents = selSetsData[1] inputNameSpaces = [] newSelSets = [] separator = ":" for loopContents in contents: nameSpaces = utilMod.getNameSpace(loopContents)[0] for loopNameSpace in nameSpaces: if loopNameSpace[:-1] not in inputNameSpaces: inputNameSpaces.append(loopNameSpace[:-1]) for inputNameSpace in inputNameSpaces: selSetsStr = str(selSetsData) selSetsData = eval( selSetsStr.replace("%s%s" % (inputNameSpace, separator), "%s%s" % (outputNameSpace, separator))) for loopSet in selSets: newSelSets.append(self.getRenamedColor(loopSet, newColor)) selSetsData[0] = newSelSets self.createSetsFromData(selSetsData) cmds.waitCursor(state=False)
def redraw(self, *args, **kwargs): ''' redraw the GUI for this item when the collection changes ''' try: cmds.waitCursor(st=1) _collection = self.Collection.Contents delenda = [i for i in self.Controls if i not in _collection] for item in delenda: item.visible = False self.Controls = [i for i in self.Collection] an = [] for item in self.Controls: item.visible = True an.append((item, 'right')) an.append((item, 'bottom')) self.attachNone = an fudge = 16 if kwargs.get('horizontal', False): if len(self.controls): fudge = (self.Controls[0].width or 1) * (len(self.Controls) + 1) self.width = fudge else: if len(self.Controls): fudge = self.Controls[0].height * (len(self.Controls) + 1) self.height = fudge self.layout() finally: cmds.waitCursor(st=0)
def _doIt( imageFile, outputDir, baseName, frameRange, framePadding ): cmds.waitCursor( state=True ) src = _getTextFieldValue( imageFile + 'TF' ) fileName, fileExtension = os.path.splitext( src ) dir = _getTextFieldValue( outputDir + 'TF' ) baseName = _getTextFieldValue( baseName + 'TF' ) frames = _getFrames( frameRange + 'TF' ) padding = len( _getOptionMenuValue(framePadding + 'DD') ) if not re.search('^[a-zA-Z0-9_-]+$', baseName): _cursorError( 'Invalid base name.' ) if int(max(frames)) > int('9'*padding): _cursorError( '1 or more frames in the frame range are longer than the frame padding.' ) for frame in frames: frameNumPadded = (('0'*padding) + str(frame))[(-1*padding):] newFileName = baseName + '.' + frameNumPadded + fileExtension dst = dir + '/' + newFileName try: shutil.copy2(src, dst) except IOError: _cursorError( 'Invalid Hold Frame source file or output directory.' ) cmds.waitCursor( state=False )
def pasteAnimation(self, animData=None, pasteInPlace=True, onlySelectedNodes=None, *args): cmds.waitCursor(state=True) if not onlySelectedNodes: onlySelectedNodes = cmds.menuItem("onlySelectedNodesMenu", query=True, checkBox=True) if not animData: animData = aToolsMod.loadInfoWithUser("copyPasteAnim", "animData") animMod.applyAnimData(animData, pasteInPlace, onlySelectedNodes, showProgress=True) cmds.waitCursor(state=False)
def bakeAnimControlsToLocators(bakedLocators): print "\nBaking Controls to Locators..." selBckp = cmds.ls(selection=True) start = int(cmds.playbackOptions(q=True, minTime=True)) end = int(cmds.playbackOptions(q=True, maxTime=True)) currentViewport = cmds.getPanel(wf=True) isolateState = cmds.isolateSelect(currentViewport, q=True, state=True) cmds.select(clear=True) cmds.isolateSelect(currentViewport, state=1) cmds.select(bakedLocators, replace=True) cmds.isolateSelect(currentViewport, addSelected=True ) if len(bakedLocators) > 0: cmds.waitCursor(state=True) for i in range(start, end + 1): print ("\nCurrent Frame -> " + str(i)) cmds.currentTime(i, update=True) for loc in bakedLocators: print ("\nLocator -> " + loc) # gets the anim control for this bake locator animControl = getBakeLocatorControl(loc) if animControl is not None: print ("Baking into Locator -> " + animControl) # now this anim control must be keyed and aligned along the timeline to the bake locator creating keys by frame #get the transform values of the locator cmds.select(loc, replace=True) bakedPosition = cmds.xform(query=True, translation=True, worldSpace=True) bakedRotation = cmds.xform(query=True, rotation=True, worldSpace=True) # locates the anim control cmds.select(animControl, replace=True) cmds.xform(absolute=True, worldSpace=True, rotation=bakedRotation) cmds.xform(absolute=True, worldSpace=True, translation=bakedPosition) # creates the key for that frame cmds.select(animControl, replace=True) cmds.setKeyframe() cmds.waitCursor(state=False) cmds.isolateSelect(currentViewport, state=isolateState) cmds.currentTime(start, update=True) cmds.select(clear=True) cmds.select(selBckp, replace=True) print "\n...Controls Baked to Locators\n"
def createMotionTrail(self, ctrls): cmds.waitCursor(state=True) self.saveTwistObjsInfo() self.createMainGroup() for loopCtrl in ctrls: ctrlName = self.getCtrlName(loopCtrl) groupNode = self.createCtrlGroup(ctrlName) if not groupNode: continue motionTrail = "%s_aTools_motionTrail" % ctrlName offsetNode = "%s_aTools_offset" % ctrlName currentLocators = [motionTrail, offsetNode] for loopLocator in currentLocators: animMod.createNull(loopLocator) cmds.hide(currentLocators) motionTrailList = self.createMotionTrailNode(offsetNode) motionTrailTransform = motionTrailList[0] motionTrailAttr = motionTrailList[1] motionTrailNode = motionTrailList[2] self.nodeInfo[ctrlName] = { "ctrlNode": loopCtrl, "offsetNode": offsetNode, "groupNode": groupNode, "motionTrailTransform": motionTrailTransform, "motionTrailAttr": motionTrailAttr, "motionTrailNode": motionTrailNode, "lineColor": self.lineColorCycle.next() } with G.aToolsBar.createAToolsNode: cmds.parent(offsetNode, motionTrail) cmds.parent(motionTrail, groupNode) cmds.parent(motionTrailTransform, groupNode) cmds.parent(groupNode, self.mainGroupNode) cmds.parentConstraint(loopCtrl, motionTrail) if self.offsetCtrlsPosition.has_key(ctrlName): offsetNodePosition = self.offsetCtrlsPosition[ctrlName][0] if offsetNodePosition != (0, 0, 0): cmds.setAttr("%s.translate" % offsetNode, offsetNodePosition[0], offsetNodePosition[1], offsetNodePosition[2]) self.makeDirty(ctrlName) cmds.select(ctrls) self.updateMotionTrail(lightningMode=True) self.updateKeysTimes() self.updateSortedRange() cmds.waitCursor(state=False)
def check_for_dupe_positions(found_assets): ''' test world space position of each asset against positions of scene assets :param found_assets: :return: ''' print "Checking assets for similar world space positions or at origin..." # initialize list for duplicate position assets found_positions = {'ws_dupes': [], 'origin': []} ws_dupes = [] mc.waitCursor(state=True) # check each asset for asset in found_assets: apivots = mc.xform(asset, query=True, worldSpace=True, absolute=True, pivots=True) # check if pivot exists at origin if is_at_origin(apivots): found_positions['origin'].append(asset) continue # iterate over scene assets for comparisons for test_asset in found_assets: # skip testing if both assets are the same if test_asset == asset: continue # collect test asset world positions tpivots = mc.xform(test_asset, query=True, worldSpace=True, absolute=True, pivots=True) # check if position elements match ps_found = 0 for attr in range(len(apivots)): if apivots[attr] == tpivots[attr]: ps_found += 1 # add test asset if all transform information matched if ps_found == len(apivots): found_positions['ws_dupes'].append(test_asset) ws_dupes.append(test_asset) # clean up list of found assets to eliminate duplicate assets in lists found_positions['origin'] = list(set(found_positions['origin'])) found_positions['ws_dupes'] = list(set(found_positions['ws_dupes'])) mc.waitCursor(state=False) return found_positions
def func(*args, **kwargs): cmd.waitCursor(state=True) try: retVal = f(*args, **kwargs) except: raise finally: cmd.waitCursor(state=False) return retVal
def pointall(self): cmds.waitCursor(state='on') # get population from leader message population = herd.getPopulation() for agent in population: self.point(agent) cmds.waitCursor(state='off')
def start(self): """Start progress""" mc.waitCursor(state=True) mc.progressBar(self.mMainProgressBar, edit=True, beginProgress=True, isInterruptable=self.mInterruptable, status=self.mStatus, minValue=self.mStartValue, maxValue=self.mEndValue) mc.refresh()
def __exit__(self, exc_type, exc_val, exc_tb): """ Turn refresh on again and raise errors if asked """ cmds.refresh(suspend =False) cmds.refresh() cmds.waitCursor(state=False) cmds.undoInfo(closeChunk=True) if exc_type is not None: if self.raise_error: import traceback traceback.print_tb(exc_tb) raise exc_type, exc_val else: sys.stderr.write("%s" % exc_val)
def exportSets(self, *args): cmds.waitCursor(state=True) #currSel = cmds.ls(selection=True) self.aToolsSets = self.getaToolsSets() setsData = self.getSetsData(self.aToolsSets) aToolsMod.saveInfoWithUser("selectSets", "setsData", setsData) #if len(currSel) > 0: cmds.select(currSel) cmds.waitCursor(state=False) cmds.warning("Select sets export done. Hit 'Import Select Sets' to import them to another scene.")
def selectServer(self, *args): mc.waitCursor(state=True) selectOption = mc.radioCollection(self._assetRadio, q=True, sl=True) if selectOption == 'one': self._deadlineSereveIp = r'//192.168.80.211' elif selectOption == 'two': self._deadlineSereveIp = r'//192.168.80.222' elif selectOption == 'three': self._deadlineSereveIp = r'//192.168.80.223' elif selectOption == 'four': self._deadlineSereveIp = r'//192.168.80.224' elif selectOption == 'five': self._deadlineSereveIp = r'//192.168.6.73' path = os.getenv('PATH').split(';') addr = '' for eachPath in path: if 'Deadline/bin' in eachPath: addr = eachPath if os.path.isfile('%s/deadlinecommand.exe' % addr): break if addr == '': mc.confirmDialog(title=u'温馨提示:', message=u'找不到Deadline客户端安装目录,请安装Deadline客户端.', button=['OK'], defaultButton='Yes', dismissString='No') sys.stderr.write(u'找不到Deadline客户端安装目录,请安装Deadline客户端.') else: try: str = os.popen( r'"%s/deadlinecommand.exe" -ChangeRepository %s/DeadlineRepository' % (addr, self._deadlineSereveIp)).read() except: sys.stderr.write(u'设定Deadline服务器时出错,请检查网络连接或权限.') else: try: str = os.popen( r'"%s/deadlinecommand.exe" -executescript //octvision.com/cg/td/APP/RenderFarm/getServerInfo.py' % addr).read() except: mc.confirmDialog(title=u'温馨提示:', message=u'获取Deadline的信息失败,请联系技术管理员!', button=['OK'], defaultButton='Yes', dismissString='No') sys.stderr.write('Error getting Server Info') else: mc.scrollField(self._outputFiled, e=True, tx=str) mc.button(self._okButton, e=True, en=True) mc.waitCursor(state=False)
def exportSets(self, *args): cmds.waitCursor(state=True) #currSel = cmds.ls(selection=True) self.aToolsSets = self.getaToolsSets() setsData = self.getSetsData(self.aToolsSets) aToolsMod.saveInfoWithUser("selectSets", "setsData", setsData) #if len(currSel) > 0: cmds.select(currSel) cmds.waitCursor(state=False) cmds.warning( "Select sets export done. Hit 'Import Select Sets' to import them to another scene." )
def startUpFunctions(self): #wait cursor state n = 0 while True: if not cmds.waitCursor(query=True, state=True) or n > 100: break cmds.waitCursor(state=False) n += 1 #refresh state cmds.refresh(suspend=False) #undo state if not cmds.undoInfo(query=True, stateWithoutFlush=True): cmds.undoInfo(stateWithoutFlush=True) #progress bar state utilMod.setProgressBar(status=None, progress=None, endProgress=True)
def check_for_dupe_positions(found_assets): """ test world space position of each asset against positions of scene assets :param found_assets: :return: """ print "Checking assets for similar world space positions or at origin..." # initialize list for duplicate position assets found_positions = {"ws_dupes": [], "origin": []} ws_dupes = [] mc.waitCursor(state=True) # check each asset for asset in found_assets: apivots = mc.xform(asset, query=True, worldSpace=True, absolute=True, pivots=True) # check if pivot exists at origin if is_at_origin(apivots): found_positions["origin"].append(asset) continue # iterate over scene assets for comparisons for test_asset in found_assets: # skip testing if both assets are the same if test_asset == asset: continue # collect test asset world positions tpivots = mc.xform(test_asset, query=True, worldSpace=True, absolute=True, pivots=True) # check if position elements match ps_found = 0 for attr in range(len(apivots)): if apivots[attr] == tpivots[attr]: ps_found += 1 # add test asset if all transform information matched if ps_found == len(apivots): found_positions["ws_dupes"].append(test_asset) ws_dupes.append(test_asset) # clean up list of found assets to eliminate duplicate assets in lists found_positions["origin"] = list(set(found_positions["origin"])) found_positions["ws_dupes"] = list(set(found_positions["ws_dupes"])) mc.waitCursor(state=False) return found_positions
def copyAnimation(self, range="selected", *args): cmds.waitCursor(state=True) if range == "all": getCurves = animMod.getAnimCurves() animCurves = getCurves[0] animData = animMod.getAnimData(animCurves, showProgress=True) else: animData = animMod.getAnimData(showProgress=True) aToolsMod.saveInfoWithUser("copyPasteAnim", "animData", animData) if cmds.window("remapNamespacesWindow", query=True, exists=True): self.remapNamespaces() cmds.waitCursor(state=False)
def startUpFunctions(self): # wait cursor state n = 0 while True: if not cmds.waitCursor(query=True, state=True) or n > 100: break cmds.waitCursor(state=False) n += 1 # refresh state cmds.refresh(suspend=False) # undo state if not cmds.undoInfo(query=True, stateWithoutFlush=True): cmds.undoInfo(stateWithoutFlush=True) # progress bar state utilMod.setProgressBar(status=None, progress=None, endProgress=True)
def createMotionTrail(self, ctrls): cmds.waitCursor(state=True) self.saveTwistObjsInfo() self.createMainGroup() for loopCtrl in ctrls: ctrlName = self.getCtrlName(loopCtrl) groupNode = self.createCtrlGroup(ctrlName) if not groupNode: continue motionTrail = "%s_aTools_motionTrail"%ctrlName offsetNode = "%s_aTools_offset"%ctrlName currentLocators = [motionTrail, offsetNode] for loopLocator in currentLocators: animMod.createNull(loopLocator) cmds.hide(currentLocators) motionTrailList = self.createMotionTrailNode(offsetNode) motionTrailTransform = motionTrailList[0] motionTrailAttr = motionTrailList[1] motionTrailNode = motionTrailList[2] self.nodeInfo[ctrlName] = {"ctrlNode":loopCtrl, "offsetNode":offsetNode, "groupNode":groupNode, "motionTrailTransform":motionTrailTransform, "motionTrailAttr":motionTrailAttr, "motionTrailNode":motionTrailNode, "lineColor":self.lineColorCycle.next()} with G.aToolsBar.createAToolsNode: cmds.parent(offsetNode, motionTrail) cmds.parent(motionTrail, groupNode) cmds.parent(motionTrailTransform, groupNode) cmds.parent(groupNode, self.mainGroupNode) cmds.parentConstraint(loopCtrl, motionTrail) if self.offsetCtrlsPosition.has_key(ctrlName): offsetNodePosition = self.offsetCtrlsPosition[ctrlName][0] if offsetNodePosition != (0,0,0): cmds.setAttr("%s.translate"%offsetNode, offsetNodePosition[0], offsetNodePosition[1], offsetNodePosition[2]) self.makeDirty(ctrlName) cmds.select(ctrls) self.updateMotionTrail(lightningMode=True) self.updateKeysTimes() self.updateSortedRange() cmds.waitCursor(state=False)
def execRelax(self,*args): ''' relax button click handler. this is where it actually executes skin relax, whoop-tee-doo. ''' try: args = {} args['numSteps']=self.controls.numSteps.getValue() args['stepSize']=self.controls.stepSize.getValue() # do we need soft selection? self.controls.softSelection.addToArgs(args) # do we need volume association? if self.controls.useVolumeAssociation.getValue(): args['abv']=1 args['avr']=self.controls.volumeAssociationRadius.getValue() # add selection+highlight as arguments # we need highlight as second argument because # other meshes for simulation might be included only through highlight. # # This will never be an empty list as we tested for vertex selection available earlier def makeList(listOrNull): if listOrNull is None: return [] return listOrNull objects = makeList(cmds.ls(sl=True))+makeList(cmds.ls(hl=True)) if len(objects)==0: raise MessageException("Nothing is selected") # execute stuff try: cmds.waitCursor(state=True) cmds.ngSkinRelax(objects,**args) finally: cmds.waitCursor(state=False) Utils.refreshPaintWeightsTool() except MessageException,err: raise err
def filterNonAnimatedCurves(): curvesShown = cmds.animCurveEditor( 'graphEditor1GraphEd', query=True, curvesShown=True) if curvesShown: objsAttrs = getTarget("", curvesShown) cmds.selectionConnection( 'graphEditor1FromOutliner', e=True, clear=True) cmds.waitCursor(state=True) for n, loopCurve in enumerate(curvesShown): keyValues = cmds.keyframe(loopCurve, query=True, valueChange=True) if max(keyValues) != min(keyValues): cmds.selectionConnection('graphEditor1FromOutliner', edit=True, select="%s.%s"%(objsAttrs[0][n], objsAttrs[1][n])) #framePlaybackRange.framePlaybackRangeFn() cmds.waitCursor(state=False)
def execRelax(self, *args): ''' relax button click handler. this is where it actually executes skin relax, whoop-tee-doo. ''' try: args = {} args['numSteps'] = self.controls.numSteps.getValue() args['stepSize'] = self.controls.stepSize.getValue() # do we need soft selection? self.controls.softSelection.addToArgs(args) # do we need volume association? if self.controls.useVolumeAssociation.getValue(): args['abv'] = 1 args['avr'] = self.controls.volumeAssociationRadius.getValue() # add selection+highlight as arguments # we need highlight as second argument because # other meshes for simulation might be included only through highlight. # # This will never be an empty list as we tested for vertex selection available earlier def makeList(listOrNull): if listOrNull is None: return [] return listOrNull objects = makeList(cmds.ls(sl=True)) + makeList(cmds.ls(hl=True)) if len(objects) == 0: raise MessageException("Nothing is selected") # execute stuff try: cmds.waitCursor(state=True) cmds.ngSkinRelax(objects, **args) finally: cmds.waitCursor(state=False) Utils.refreshPaintWeightsTool() except MessageException, err: raise err
def installToolCage(self): # only if the user text field is not empty if (self.ui.le_userNames.text() != ""): # this is a delicate operation and needs confirmation answer = cmds.confirmDialog(t="Alert", message="The install operation has no undo, do you want to continue?", button=["Cancel", "Yes"], icon="warning") # if we choose to continue if answer == "Yes": # gets the password currPassword = self.ui.le_password.text() if currPassword == "": currPassword = None # lists for the success or error install users successUsers = [] errorUsers = [] # loops the users installing userNames = self.ui.le_userNames.text().split(" ") cmds.waitCursor(state=True) for usr in userNames: success = (deploy.installModToUser(usr, password=currPassword)) if success: successUsers.append(usr) else: errorUsers.append(usr) cmds.waitCursor(state=False) message = "" if len(successUsers) > 0: message += "Installed successfully to:" for usr in successUsers: message += "\n" + usr if len(errorUsers) > 0: message += "\n\n" if len(errorUsers) > 0: message += "Error installing to:" for usr in errorUsers: message += "\n" + usr cmds.confirmDialog(t="Finished", message=message, button=["OK"], icon="information") self.ui.le_userNames.setText("") self.ui.le_password.setText("")
def filterNonAnimatedCurves(): curvesShown = cmds.animCurveEditor("graphEditor1GraphEd", query=True, curvesShown=True) if curvesShown: objsAttrs = getTarget("", curvesShown) cmds.selectionConnection("graphEditor1FromOutliner", e=True, clear=True) cmds.waitCursor(state=True) for n, loopCurve in enumerate(curvesShown): keyValues = cmds.keyframe(loopCurve, query=True, valueChange=True) if max(keyValues) != min(keyValues): cmds.selectionConnection( "graphEditor1FromOutliner", edit=True, select="%s.%s" % (objsAttrs[0][n], objsAttrs[1][n]) ) # framePlaybackRange.framePlaybackRangeFn() cmds.waitCursor(state=False)
def pythonScripts(): if (cmds.menu('pythonScripts_menu', exists=True)): print("Removing old pythonScripts menu...") cmds.deleteUI('pythonScripts_menu') gMainWindow = maya.mel.eval('$temp1=$gMainWindow') gMainProgressBar = maya.mel.eval('$temp=$gMainProgressBar') mainDir = findFile('pythonScripts.py') timer = cmds.timerX() cmds.waitCursor(state=True) print "" cmds.progressBar(gMainProgressBar, edit=True, beginProgress=True, isInterruptable=True, status="Creating pythonScripts...", maxValue=100) pMenu = (cmds.menu('pythonScripts_menu', parent=gMainWindow, tearOff=True, aob=True, label="pythonScripts")) gen_pythonScripts(mainDir, pMenu) cmds.waitCursor(state=False) endTime = cmds.timerX(startTime=timer) cmds.progressBar( gMainProgressBar, edit=True, endProgress=True, ) print("pythonTools has now been updated in: " + str(endTime) + " seconds...!")
def createGIF(self): # builds the path playblastPath = "/jobs/" + self.ui.cb_job.currentText() + "/" + self.ui.cb_scene.currentText() + "/" + self.ui.cb_shot.currentText() + "/maya/playblasts/" + self.ui.cb_playblast.currentText() # open at end mode openAtEnd = None if self.ui.rb_firefox.isChecked(): openAtEnd = "firefox" elif self.ui.rb_folder.isChecked(): openAtEnd = "folder" answer = cmds.confirmDialog(t="Alert", message="This process could take a long depending on the number of frames, the background changing and the area of animation. Do you want to continue?", button=["Cancel", "Yes"], icon="warning") # if we choose to continue if answer == "Yes": # creates the gif cmds.waitCursor(state=True) gif.createGIFanimFromPlayblast(playblastPath, scale=(self.ui.sp_scale.value()/100.0), colors=(int(self.ui.cb_colors.currentText())), openAtEndMode=openAtEnd) cmds.waitCursor(state=False) # launches a finish message cmds.confirmDialog(t="msg", message="GIF animation finished.", button=["OK"])
def nmpExtractWeights(cluster, joint, skinCluster, geoName): ''' Calculates the Weighting of Every Joint on Inderectly Connected Wrapped Geometry. Weight is Determined By Translating the Master Object and Calculating the Distance Changed in 3D Space on Every Vert. Returns list of list of [transform, value]''' verts = cmds.ls(geoName + '.vtx[*]', flatten=True) values = [] cmds.waitCursor( state=True ) start = cmds.timerX() originalPos = [ cmds.xform(vert, q=True, ws=True, t=True) for vert in verts ] cmds.setAttr(cluster + '.tz', 1) deformPos = [ cmds.xform(vert, q=True, ws=True, t=True) for vert in verts ] cmds.setAttr(cluster + '.tz', 0) for i in range(0,len(deformPos)): difference = [ deformPos[i][0]-originalPos[i][0], deformPos[i][1]-originalPos[i][1], deformPos[i][2]-originalPos[i][2] ] distance = math.sqrt( pow(difference[0],2) + pow(difference[1],2) + pow(difference[2],2) ) values.append([joint, distance]) cmds.waitCursor( state=False ) return values
def _cursorError( errorMessage ): cmds.waitCursor( state=False ) cmds.error( errorMessage )
def func(*args, **kwargs): cmd.waitCursor(state=True) try: return f(*args, **kwargs) finally: cmd.waitCursor(state=False)
def tween(bias, nodes=None): """ Create the in-between key(s) on the specified nodes """ if isinstance(nodes, list) and not nodes: nodes = None # Find the current frame, where the new key will be added currenttime = mc.timeControl("timeControl1", q=True, ra=True)[0] # Figure out which nodes to pull from if nodes is not None: pullfrom = nodes else: pullfrom = mc.ls(sl=True) if not pullfrom: return # If attributes are selected, use them to build curve node list attributes = mc.channelBox("mainChannelBox", q=True, sma=True) if attributes: curves = [] for attr in attributes: for node in pullfrom: fullnode = "%s.%s" % (node, attr) if not mc.objExists(fullnode): continue tmp = mc.keyframe(fullnode, q=True, name=True) if not tmp: continue curves += tmp # Otherwise get curves for all nodes else: curves = mc.keyframe(pullfrom, q=True, name=True) mc.waitCursor(state=True) # Wrap the main operation in a try/except to prevent the waitcursor from # sticking if something should fail try: # If we have no curves, force a list if curves is None: curves = [] # Process all curves for curve in curves: # Find time for next and previous keys... time_prev = mc.findKeyframe(curve, which="previous") time_next = mc.findKeyframe(curve, which="next") # Find previous and next tangent types try: in_tan_prev = mc.keyTangent(curve, time=(time_prev, ), q=True, itt=True)[0] out_tan_prev = mc.keyTangent(curve, time=(time_prev, ), q=True, ott=True)[0] in_tan_next = mc.keyTangent(curve, time=(time_next, ), q=True, itt=True)[0] out_tan_next = mc.keyTangent(curve, time=(time_next, ), q=True, ott=True)[0] # Workaround for keyTangent error in Maya 2016 Extension 2 except RuntimeError: in_tan_prev = mel.eval("keyTangent -time %s -q -itt %s" % (time_prev, curve))[0] out_tan_prev = mel.eval("keyTangent -time %s -q -ott %s" % (time_prev, curve))[0] in_tan_next = mel.eval("keyTangent -time %s -q -itt %s" % (time_next, curve))[0] out_tan_next = mel.eval("keyTangent -time %s -q -ott %s" % (time_next, curve))[0] # Set new in and out tangent types in_tan_new = out_tan_prev out_tan_new = in_tan_next # However, if any of the types (previous or next) is "fixed", # use the global (default) tangent instead if "fixed" in [ in_tan_prev, out_tan_prev, in_tan_next, out_tan_next ]: in_tan_new = mc.keyTangent(q=True, g=True, itt=True)[0] out_tan_new = mc.keyTangent(q=True, g=True, ott=True)[0] elif out_tan_next == "step": out_tan_new = out_tan_next # Find previous and next key values value_prev = mc.keyframe(curve, time=(time_prev, ), q=True, valueChange=True)[0] value_next = mc.keyframe(curve, time=(time_next, ), q=True, valueChange=True)[0] value_new = value_prev + ((value_next - value_prev) * bias) # Set new keyframe and tangents mc.setKeyframe(curve, t=(currenttime, ), v=value_new, ott=out_tan_new) if in_tan_new != "step": mc.keyTangent(curve, t=(currenttime, ), itt=in_tan_new) # If we're using the special tick, set that appropriately if SETTINGS["use_special_tick"]: mc.keyframe(curve, tds=True, t=(currenttime, )) except: raise finally: mc.waitCursor(state=False) mc.currentTime(currenttime) mel.eval("global string $gMainWindow;") windowname = mel.eval("$temp = $gMainWindow") mc.setFocus(windowname)
def setTween(self, percent, *args): #utilMod.timer("s") G.TM_lastTweenCommand = "self.setTween(%s)" % percent getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] if animCurves: status = "aTools - Tween Machine..." utilMod.startProgressBar(status) totalSteps = len(animCurves) firstStep = 0 thisStep = 0 estimatedTime = None startChrono = None cmds.waitCursor(state=True) cmds.refresh(suspend=True) keysSel = animMod.getTarget("keysSel", animCurves, getFrom) keyTimes = animMod.getTarget("keyTimes", animCurves) timelineTime = None #keysSelMerged = utilMod.mergeLists(keysSel) # reverse order to get ease in and out smoothly if 0 < percent <= 50 or percent == 100: for loopVal in keysSel: loopVal.reverse() #utilMod.timer() """ if len(keysSelMerged) == 0: if not timelineTime: timelineTime = [animMod.getTimelineTime()] cmds.setKeyframe(animCurves, time=timelineTime[0]) elif len(keysSelMerged) == 1: cmds.setKeyframe(animCurves, time=keysSelMerged[0]) """ for thisStep, loopCurve in enumerate(animCurves): if cmds.progressBar(G.progBar, query=True, isCancelled=True): utilMod.setProgressBar(endProgress=True) break startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) if not keysSel[thisStep]: if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime else: time = [(loopTime, loopTime) for loopTime in keysSel[thisStep]] # if all keys selected, use timeline time instead if len(time) == len(keyTimes[thisStep]): if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime for loopTime in time: prevKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="previous") nextKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="next") if prevKeyTime == nextKeyTime and prevKeyTime != loopTime[ 0] and percent != "linear_next" and percent != "linear_prev": # if there is no previous or next key and at least one key cmds.setKeyframe(loopCurve, time=loopTime) elif prevKeyTime != time[0]: if percent == "linear_prev": prevKeyTime = nextKeyTime nextKeyTime = cmds.findKeyframe(loopCurve, time=(prevKeyTime, prevKeyTime), which="next") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ( (nextKeyVal - prevKeyVal) / (nextKeyTime - prevKeyTime) * (loopTime[0] - prevKeyTime)) elif percent == "linear_next": nextKeyTime = prevKeyTime prevKeyTime = cmds.findKeyframe(loopCurve, time=(nextKeyTime, nextKeyTime), which="previous") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ( (nextKeyVal - prevKeyVal) / (nextKeyTime - prevKeyTime) * (loopTime[0] - prevKeyTime)) else: animMod.eulerFilterCurve([loopCurve]) prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] #print "prevKeyVal", prevKeyVal, nextKeyVal #if prevKeyVal == nextKeyVal: #if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) #continue if percent == "linear": value = prevKeyVal + ( (nextKeyVal - prevKeyVal) / (nextKeyTime - prevKeyTime) * (loopTime[0] - prevKeyTime)) else: value = ((nextKeyVal - prevKeyVal) / 100. * percent) + prevKeyVal tangentType = cmds.keyTangent(loopCurve, query=True, outTangentType=True, time=(prevKeyTime, prevKeyTime))[0] inTangentType = tangentType.replace("fixed", "auto").replace( "step", "auto") outTangentType = tangentType.replace("fixed", "auto") if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) cmds.keyframe(loopCurve, edit=True, time=loopTime, valueChange=value) cmds.keyTangent(loopCurve, edit=True, time=loopTime, inTangentType=inTangentType, outTangentType=outTangentType) #keycolor if 1 <= percent <= 99 or percent == "linear": cmds.keyframe( loopCurve, edit=True, time=loopTime, tickDrawSpecial=self.getColoredKeys()) if getFrom == "graphEditor": #curvesToSelect.append([loopCurve, loopTime]) cmds.selectKey(loopCurve, addTo=True, time=loopTime) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #utilMod.timer() """ #APPLY if len(curvesToKey) > 0: cmds.setKeyframe(curvesToKey) for loopVar in curvesToValue: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], valueChange=loopVar[2]) cmds.keyTangent(loopVar[0], edit=True, time=loopVar[1], inTangentType=loopVar[3], outTangentType=loopVar[4]) for loopVar in curvesToColor: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], tickDrawSpecial=self.getColoredKeys()) for loopVar in curvesToSelect: cmds.selectKey(loopVar[0], addTo=True, time=loopVar[1]) """ cmds.refresh(suspend=False) cmds.waitCursor(state=False) utilMod.setProgressBar(endProgress=True)
def __enter__(self): cmds.undoInfo(openChunk=True, chunkName=self.name) cmds.waitCursor(state=True) cmds.refresh(suspend =True)
def applyMirror(self, pasteAndCycle=False): cmds.waitCursor(state=True) range = animMod.getTimelineRange() range[1] = int(range[1]) total = range[1]-range[0] getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] invertRules = self.getInvertRules() if animCurves: status = "aTools - Applying mirror..." utilMod.startProgressBar(status) totalSteps = len(animCurves) firstStep = 0 thisStep = 0 estimatedTime = None startChrono = None mirrorCurves = animMod.getMirrorObjs(animCurves) keyValues = animMod.getTarget("keyValues", animCurves, getFrom) keyTimes = animMod.getTarget("keyTimes", animCurves, getFrom) currValues = animMod.getTarget("currValues", animCurves, getFrom) keysIndexSel = animMod.getTarget("keysIndexSel", animCurves, getFrom) keyTangentsAngle = animMod.getTarget("keyTangentsAngle", animCurves, getFrom) keyTangentsType = animMod.getTarget("keyTangentsType", animCurves, getFrom) currTime = cmds.currentTime(query=True) if keysIndexSel: #create dummy key #objects = animMod.getObjsSel() #mirrorObjs = animMod.getMirrorObjs(objects) #animMod.createDummyKey(mirrorObjs) for thisStep, aCurve in enumerate(animCurves): startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) mCurve = mirrorCurves[thisStep] isCenterCurve = (mCurve == None) mirrorInvertValue = self.mirrorInvert(aCurve, isCenterCurve, invertRules) if mCurve and cmds.objExists(mCurve): tCurve = mCurve else: tCurve = aCurve if not cmds.objExists(tCurve): continue animMod.createDummyKey([tCurve]) if len(keysIndexSel[thisStep]) > 0: #delete keys cmds.cutKey(tCurve, time=(keyTimes[thisStep][keysIndexSel[thisStep][0]],keyTimes[thisStep][keysIndexSel[thisStep][-1]]), clear=True) for key in keysIndexSel[thisStep]: keyValue = keyValues[thisStep][key] * mirrorInvertValue inTangAngleValue = keyTangentsAngle[thisStep][key][0] * mirrorInvertValue outTangAngleValue = keyTangentsAngle[thisStep][key][1] * mirrorInvertValue #apply keys if pasteAndCycle: t = keyTimes[thisStep][key] + (total/2.) if t == range[1]: #repeat key at first frame t1 = t-total time = (t1,t1) cmds.setKeyframe(tCurve, time=time, value=keyValue) cmds.keyTangent(tCurve, time=time, inAngle=inTangAngleValue, outAngle=outTangAngleValue) cmds.keyTangent(tCurve, time=time, inTangentType=keyTangentsType[thisStep][key][0], outTangentType=keyTangentsType[thisStep][key][1]) elif t > range[1]: #fist half t -= total time = (t,t) else: time = (keyTimes[thisStep][key],keyTimes[thisStep][key]) cmds.setKeyframe(tCurve, time=time, value=keyValue) cmds.keyTangent(tCurve, time=time, inAngle=inTangAngleValue, outAngle=outTangAngleValue) cmds.keyTangent(tCurve, time=time, inTangentType=keyTangentsType[thisStep][key][0], outTangentType=keyTangentsType[thisStep][key][1]) else: #no keys#invert translate x keyValue = currValues[thisStep] * mirrorInvertValue #apply keys cmds.setKeyframe(tCurve, time=(currTime,currTime), value=keyValue) animMod.deleteDummyKey([tCurve]) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #delete dummy key #animMod.deleteDummyKey(mirrorObjs) self.selectMirrorObjs(False) utilMod.setProgressBar(endProgress=True) animMod.refresh() cmds.waitCursor(state=False)
def allCharacterName(self, *args): nowCharacter = self.whatCharacter() preffixTextNow = self.prexText() if nowCharacter == 'Peony_1': mc.waitCursor(state=1) self.allControlsZero() self._angle60(preffixTextNow) self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0) elif nowCharacter == 'Poppymaster_2' or nowCharacter == 'Chen_1': mc.waitCursor(state=1) self.allControlsZero() self.only60Angle(preffixTextNow) self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0) elif nowCharacter == 'King_3': mc.waitCursor(state=1) self.allControlsZero() self.king70Angle(preffixTextNow) self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0) elif nowCharacter == 'Queen_4' or nowCharacter == 'ChenMother_2': mc.waitCursor(state=1) self.allControlsZero() self.queen60Angle(preffixTextNow) self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0) elif nowCharacter == 'Solider_5': mc.waitCursor(state=1) self.allControlsZero() self.solider60Angle(preffixTextNow) self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0) elif nowCharacter == 'Lpeony_6' or nowCharacter == 'ChenFather_3': mc.waitCursor(state=1) self.allControlsZero() self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0) elif nowCharacter == 'Plum_7': mc.waitCursor(state=1) self.allControlsZero() self.plum60Angle(preffixTextNow) self.browOnly(preffixTextNow) self.ikOrFk(preffixTextNow) mc.waitCursor(state=0)
def __enter__(self): cmds.waitCursor(state=True)
def end(self): """Mark the progress as ended""" mc.progressBar(self.mMainProgressBar, edit=True, endProgress=True) mc.waitCursor(state=False)
def __exit__(self, exc_type, exc_val, exc_tb): if cmds.waitCursor(q=True, state=True): cmds.waitCursor(state=False)
def func( *args, **kwargs ): cmd.waitCursor( state=True ) try: return f( *args, **kwargs ) finally: cmd.waitCursor( state=False )
def wait(value) : m.waitCursor(state=value)
def applyMirror(self, pasteAndCycle=False): cmds.waitCursor(state=True) range = animMod.getTimelineRange() range[1] = int(range[1]) total = range[1] - range[0] getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] invertRules = self.getInvertRules() if animCurves: status = "aTools - Applying mirror..." utilMod.startProgressBar(status) totalSteps = len(animCurves) firstStep = 0 thisStep = 0 estimatedTime = None startChrono = None mirrorCurves = animMod.getMirrorObjs(animCurves) keyValues = animMod.getTarget("keyValues", animCurves, getFrom) keyTimes = animMod.getTarget("keyTimes", animCurves, getFrom) currValues = animMod.getTarget("currValues", animCurves, getFrom) keysIndexSel = animMod.getTarget("keysIndexSel", animCurves, getFrom) keyTangentsAngle = animMod.getTarget("keyTangentsAngle", animCurves, getFrom) keyTangentsType = animMod.getTarget("keyTangentsType", animCurves, getFrom) currTime = cmds.currentTime(query=True) if keysIndexSel: #create dummy key #objects = animMod.getObjsSel() #mirrorObjs = animMod.getMirrorObjs(objects) #animMod.createDummyKey(mirrorObjs) for thisStep, aCurve in enumerate(animCurves): startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) mCurve = mirrorCurves[thisStep] isCenterCurve = (mCurve == None) mirrorInvertValue = self.mirrorInvert( aCurve, isCenterCurve, invertRules) if mCurve and cmds.objExists(mCurve): tCurve = mCurve else: tCurve = aCurve if not cmds.objExists(tCurve): continue animMod.createDummyKey([tCurve]) if len(keysIndexSel[thisStep]) > 0: #delete keys cmds.cutKey( tCurve, time=( keyTimes[thisStep][keysIndexSel[thisStep][0]], keyTimes[thisStep][keysIndexSel[thisStep][-1]] ), clear=True) for key in keysIndexSel[thisStep]: keyValue = keyValues[thisStep][ key] * mirrorInvertValue inTangAngleValue = keyTangentsAngle[thisStep][key][ 0] * mirrorInvertValue outTangAngleValue = keyTangentsAngle[thisStep][ key][1] * mirrorInvertValue #apply keys if pasteAndCycle: t = keyTimes[thisStep][key] + (total / 2.) if t == range[1]: #repeat key at first frame t1 = t - total time = (t1, t1) cmds.setKeyframe(tCurve, time=time, value=keyValue) cmds.keyTangent(tCurve, time=time, inAngle=inTangAngleValue, outAngle=outTangAngleValue) cmds.keyTangent( tCurve, time=time, inTangentType=keyTangentsType[thisStep] [key][0], outTangentType=keyTangentsType[ thisStep][key][1]) elif t > range[1]: #fist half t -= total time = (t, t) else: time = (keyTimes[thisStep][key], keyTimes[thisStep][key]) cmds.setKeyframe(tCurve, time=time, value=keyValue) cmds.keyTangent(tCurve, time=time, inAngle=inTangAngleValue, outAngle=outTangAngleValue) cmds.keyTangent( tCurve, time=time, inTangentType=keyTangentsType[thisStep][key] [0], outTangentType=keyTangentsType[thisStep][key] [1]) else: #no keys#invert translate x keyValue = currValues[thisStep] * mirrorInvertValue #apply keys cmds.setKeyframe(tCurve, time=(currTime, currTime), value=keyValue) animMod.deleteDummyKey([tCurve]) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #delete dummy key #animMod.deleteDummyKey(mirrorObjs) self.selectMirrorObjs(False) utilMod.setProgressBar(endProgress=True) animMod.refresh() cmds.waitCursor(state=False)
def setTween(self, percent, *args): #utilMod.timer("s") G.TM_lastTweenCommand = "self.setTween(%s)"%percent getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] if animCurves: status = "aTools - Tween Machine..." utilMod.startProgressBar(status) totalSteps = len(animCurves) firstStep = 0 thisStep = 0 estimatedTime = None startChrono = None cmds.waitCursor(state=True) cmds.refresh(suspend=True) keysSel = animMod.getTarget("keysSel", animCurves, getFrom) keyTimes = animMod.getTarget("keyTimes", animCurves) timelineTime = None #keysSelMerged = utilMod.mergeLists(keysSel) # reverse order to get ease in and out smoothly if 0 < percent <= 50 or percent == 100: for loopVal in keysSel: loopVal.reverse() #utilMod.timer() """ if len(keysSelMerged) == 0: if not timelineTime: timelineTime = [animMod.getTimelineTime()] cmds.setKeyframe(animCurves, time=timelineTime[0]) elif len(keysSelMerged) == 1: cmds.setKeyframe(animCurves, time=keysSelMerged[0]) """ for thisStep, loopCurve in enumerate(animCurves): if cmds.progressBar(G.progBar, query=True, isCancelled=True ): utilMod.setProgressBar(endProgress=True) break startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) if not keysSel[thisStep]: if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime else: time = [(loopTime,loopTime) for loopTime in keysSel[thisStep]] # if all keys selected, use timeline time instead if len(time) == len(keyTimes[thisStep]): if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime for loopTime in time: prevKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="previous") nextKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="next") if prevKeyTime == nextKeyTime and prevKeyTime != loopTime[0] and percent != "linear_next" and percent != "linear_prev": # if there is no previous or next key and at least one key cmds.setKeyframe(loopCurve, time=loopTime) elif prevKeyTime != time[0]: if percent == "linear_prev": prevKeyTime = nextKeyTime nextKeyTime = cmds.findKeyframe(loopCurve, time=(prevKeyTime,prevKeyTime), which="next") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ((nextKeyVal - prevKeyVal)/(nextKeyTime - prevKeyTime)*(loopTime[0] - prevKeyTime)) elif percent == "linear_next": nextKeyTime = prevKeyTime prevKeyTime = cmds.findKeyframe(loopCurve, time=(nextKeyTime,nextKeyTime), which="previous") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ((nextKeyVal - prevKeyVal)/(nextKeyTime - prevKeyTime)*(loopTime[0] - prevKeyTime)) else: animMod.eulerFilterCurve([loopCurve]) prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] #print "prevKeyVal", prevKeyVal, nextKeyVal #if prevKeyVal == nextKeyVal: #if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) #continue if percent == "linear": value = prevKeyVal + ((nextKeyVal - prevKeyVal)/(nextKeyTime - prevKeyTime)*(loopTime[0] - prevKeyTime)) else: value = ((nextKeyVal-prevKeyVal)/100.*percent)+prevKeyVal tangentType = cmds.keyTangent(loopCurve, query=True, outTangentType=True, time=(prevKeyTime,prevKeyTime))[0] inTangentType = tangentType.replace("fixed", "auto").replace("step", "auto") outTangentType = tangentType.replace("fixed", "auto") if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) cmds.keyframe(loopCurve, edit=True, time=loopTime, valueChange=value) cmds.keyTangent(loopCurve, edit=True, time=loopTime, inTangentType=inTangentType, outTangentType=outTangentType) #keycolor if 1 <= percent <= 99 or percent == "linear": cmds.keyframe(loopCurve ,edit=True,time=loopTime, tickDrawSpecial=self.getColoredKeys()) if getFrom == "graphEditor": #curvesToSelect.append([loopCurve, loopTime]) cmds.selectKey(loopCurve, addTo=True, time=loopTime) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #utilMod.timer() """ #APPLY if len(curvesToKey) > 0: cmds.setKeyframe(curvesToKey) for loopVar in curvesToValue: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], valueChange=loopVar[2]) cmds.keyTangent(loopVar[0], edit=True, time=loopVar[1], inTangentType=loopVar[3], outTangentType=loopVar[4]) for loopVar in curvesToColor: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], tickDrawSpecial=self.getColoredKeys()) for loopVar in curvesToSelect: cmds.selectKey(loopVar[0], addTo=True, time=loopVar[1]) """ cmds.refresh(suspend=False) cmds.waitCursor(state=False) utilMod.setProgressBar(endProgress=True)