def setActive(self): ''' Set sound node as active on the timeSlider ''' if self.isLoaded: gPlayBackSlider = mel.eval("string $temp=$gPlayBackSlider") cmds.timeControl(gPlayBackSlider, e=True, ds=1, sound=self.audioNode)
def load(): '''loads animation environment''' print "loading animation environment presets..." #set autoKey cmds.autoKeyframe( state=True ) #set 24fps and playback on all viewports cmds.playbackOptions(ps=1.0, v='all') #set unlimited undo's cmds.undoInfo( state=True, infinity=True ) #set manipulator sizes if lib.checkAboveVersion(2014): cmds.manipOptions( r=False, hs=55, ls=4, sph=1 ) else: cmds.manipOptions( r=False, hs=55, ls=4 ) #set framerate visibility mel.eval("setFrameRateVisibility(1);") #gimbal rotation cmds.manipRotateContext('Rotate', e=True, mode=2) #world translation cmds.manipMoveContext('Move', e=True, mode=2) #time slider height aPlayBackSliderPython = mel.eval('$tmpVar=$gPlayBackSlider') cmds.timeControl(aPlayBackSliderPython, h=45, e=True); #special tick color cmds.displayRGBColor("timeSliderTickDrawSpecial", 1,0.5,0) #check if hotkeys have been set if (cmds.hotkey( 't', ctl=True, query=True, name = True)== 'CharacterAnimationEditorNameCommand'): print "Hotkeys have been previously loaded" else: setHotkeys('default') print "ENVIRONMENT SET\n", #the comma forces output on the status line
def load(self, context, name, namespace, data): start_frame = cmds.playbackOptions(query=True, min=True) sound_node = cmds.sound( file=context["representation"]["data"]["path"], offset=start_frame ) cmds.timeControl( mel.eval("$tmpVar=$gPlayBackSlider"), edit=True, sound=sound_node, displaySound=True ) asset = context["asset"]["name"] namespace = namespace or lib.unique_namespace( asset + "_", prefix="_" if asset[0].isdigit() else "", suffix="_", ) return containerise( name=name, namespace=namespace, nodes=[sound_node], context=context, loader=self.__class__.__name__ )
def get_time_slider_range(highlighted=True, withinHighlighted=True, highlightedOnly=False): """Return the time range from Maya's time slider. Arguments: highlighted (bool): When True if will return a selected frame range (if there's any selection of more than one frame!) otherwise it will return min and max playback time. withinHighlighted (bool): By default Maya returns the highlighted range end as a plus one value. When this is True this will be fixed by removing one from the last number. Returns: list: List of two floats of start and end frame numbers. """ if highlighted is True: gPlaybackSlider = mel.eval("global string $gPlayBackSlider; " "$gPlayBackSlider = $gPlayBackSlider;") if cmds.timeControl(gPlaybackSlider, query=True, rangeVisible=True): highlightedRange = cmds.timeControl(gPlaybackSlider, query=True, rangeArray=True) if withinHighlighted: highlightedRange[-1] -= 1 return highlightedRange if not highlightedOnly: return [cmds.playbackOptions(query=True, minTime=True), cmds.playbackOptions(query=True, maxTime=True)]
def plot(): curves = mc.keyframe(q=1, sl=1, name=1) if type(curves).__name__ != 'NoneType': for curve in curves: indexes = mc.keyframe(curve, q=1, sl=1, iv=1) if len(indexes) != 1: startTime = int(mc.keyframe(curve, q=1, tc=1, index=tuple([indexes[0]]))[0]) endTime = int(mc.keyframe(curve, q=1, tc=1, index=tuple([indexes[1]]))[0]) mc.selectKey(cl=1) for point in range(startTime, endTime): mc.setKeyframe(curve, insert=1, time=point) mc.selectKey(curve, time=( (startTime+0.01), (endTime-0.01) ), add=1, k=1) else: mc.warning('Only one keyframe is selected for the curve ' + curve + '.') else: sels = mc.ls(sl=1) if sels: timeSlider = mm.eval('$tmp = $gPlayBackSlider') if mc.timeControl(timeSlider, q=1, rv=1) == 1: startTime = int(mc.timeControl(timeSlider, q=1, ra=1)[0]) endTime = int(mc.timeControl(timeSlider, q=1, ra=1)[1]) else: startTime = int(mc.playbackOptions(q=1, min=1)) endTime = int(mc.playbackOptions(q=1, max=1)) curves = mc.keyframe(q=1, name=1) for curve in curves: for point in range(startTime, endTime): mc.setKeyframe(curve, insert=1, time=point) mc.selectKey(curve, time=( (startTime+0.01), (endTime-0.01) ), add=1, k=1) else: mc.warning('Nothing is selected.')
def setDefaultConfig(self): #STATIC PREFS # tumble config #cmds.tumbleCtx( 'tumbleContext', edit=True, alternateContext=True, tumbleScale=1.0, localTumble=0, autoOrthoConstrain=False, orthoLock=False) cmds.tumbleCtx('tumbleContext', edit=True, alternateContext=True, tumbleScale=1.0, localTumble=0) cmds.dollyCtx('dollyContext', edit=True, alternateContext=True, scale=1.0, localDolly=True, centerOfInterestDolly=False) #timeline ticks display G.playBackSliderPython = G.playBackSliderPython or mel.eval( '$aTools_playBackSliderPython=$gPlayBackSlider') cmds.timeControl(G.playBackSliderPython, edit=True, showKeys="mainChannelBox", showKeysCombined=True, animLayerFilterOptions="active") #tickDrawSpecial Color cmds.displayRGBColor('timeSliderTickDrawSpecial', 1, 1, .4) #CUSTOMIZABLE PREFS for loopPref in PREFS: name = loopPref["name"] self.setPref(name, True)
def _getStartAndEnd(): gPlayBackSlider = mm.eval('$temp=$gPlayBackSlider') if mc.timeControl(gPlayBackSlider, query=True, rangeVisible=True): start, end = mc.timeControl(gPlayBackSlider, query=True, rangeArray=True) return start, end-1 return None, None
def getActionFrameRange(self): playBackRange = {} playBackSlider = mel.eval('$tmp=$gPlayBackSlider') highlighted = cmds.timeControl(playBackSlider, q=True, rangeVisible=True) if highlighted: self.highlighted = True frameRange = cmds.timeControl(playBackSlider, q=True, rangeArray=True) playBackRange['start'] = int(frameRange[0]) playBackRange['end'] = int(frameRange[1]) else: playBackRange['start'] = int(cmds.playbackOptions(q=True, min=True)) playBackRange['end'] = int(cmds.playbackOptions(q=True, max=True)) return playBackRange
def addCallbacks(self): """ Add callbacks that will clear all marker information on the timeline every time a new file is created or a file is opened. It also adds callback to determine if the markers are sliding. """ # after new scene self.newID = OpenMaya.MSceneMessage.addCallback( OpenMaya.MSceneMessage.kAfterNew, self.readFromCurrentScene ) # after open scene self.openID = OpenMaya.MSceneMessage.addCallback( OpenMaya.MSceneMessage.kAfterOpen, self.readFromCurrentScene ) # timeline press callbacks cmds.timeControl( utils.getMayaTimeline(), edit=True, pressCommand=self.pressCommand, releaseCommand=self.releaseCommand, )
def set_keys(s, info): """ Finally start the key setting process """ # Get frame range we're working in slider = mel.eval("$tmp = $gPlayBackSlider") if cmds.timeControl( slider, q=True, rv=True): # Check if we have highlighted the timeline Fstart, Fstop = cmds.timeControl(slider, q=True, ra=True) else: Fstart = cmds.playbackOptions(q=True, min=True) Fstop = cmds.playbackOptions(q=True, max=True) # Process data data = {} for at, ax, t1, t2 in info: if t1 != NONE and validate_attribute(at): dat = logic.process_keys(ax, Fstart, Fstop, s.data[t1], s.data[t2] if t2 != NONE else []) if dat: data[at] = dat else: cmds.warning( "({}) :: {} has no visible keys. Could be out of frame range?" .format(t1, at)) # Set keyframes Helper(data)
def pressCommand(self, *args): """ Press callback on the timeline, this callback registers the current selected frames, if the user settings determine that the frame range is not important ( no automated shifting of markers ), no range will be stored. """ # variable timeline = utils.getMayaTimeline() # restore sound scrub cmds.timeControl(timeline, edit=True, beginScrub=True) # get visible range rangeVisible = cmds.timeControl( timeline, q=True, rangeVisible=True ) # check if range needs to be stored if not rangeVisible or not self.menu.moveA.isChecked(): return # save range self._range = utils.getTimelineRange()
def set_in_and_out(): updateVars() if cmds.timeControl(timeline_control, q=True, rangeVisible=True): range_array = cmds.timeControl(timeline_control, q=True, rangeArray=True) cmds.playbackOptions(maxTime=range_array[0], minTime=range_array[-1])
def restoreSettings(self): ''' restore all UI settings ''' cmds.autoKeyframe(state=self.dataStore['autoKey']) # timeline management cmds.currentTime(self.dataStore['currentTime']) cmds.playbackOptions(min=self.dataStore['minTime']) cmds.playbackOptions(max=self.dataStore['maxTime']) cmds.playbackOptions(ast=self.dataStore['startTime']) cmds.playbackOptions(aet=self.dataStore['endTime']) cmds.playbackOptions(ps=self.dataStore['playSpeed']) cmds.playbackOptions(loop=self.dataStore['playLoop']) # unit management cmds.currentUnit(time=self.dataStore['timeUnit']) cmds.currentUnit(linear=self.dataStore['sceneUnits']) if not cmds.upAxis(axis=True, q=True) == self.dataStore['upAxis']: cmds.upAxis(axis=self.dataStore['upAxis']) log.debug('Restored PlayBack / Timeline setup') # viewport colors cmds.displayPref(displayGradient=self.dataStore['displayGradient']) cmds.displayRGBColor(resetToSaved=True) # objects colors cmds.displayColor("curve", self.dataStore['curvecolor'], dormant=True) # panel management for panel, data in self.dataStore['panelStore'].items(): try: cmdString = data['settings'].replace('$editorName', panel) mel.eval(cmdString) log.debug("Restored Panel Settings Data >> %s" % panel) mel.eval('lookThroughModelPanel("%s","%s")' % (data['activeCam'], panel)) log.debug("Restored Panel Active Camera Data >> %s >> cam : %s" % (panel, data['activeCam'])) except: log.debug("Failed to fully Restore ActiveCamera Data >> %s >> cam : %s" % (panel, data['activeCam'])) # camera management for cam, settings in self.dataStore['cameraTransforms'].items(): try: cmds.setAttr('%s.translate' % cam, settings[0][0][0], settings[0][0][1], settings[0][0][2]) cmds.setAttr('%s.rotate' % cam, settings[1][0][0], settings[1][0][1], settings[1][0][2]) cmds.setAttr('%s.scale' % cam, settings[2][0][0], settings[2][0][1], settings[2][0][2]) log.debug('Restored Default Camera Transform Data : % s' % cam) except: log.debug("Failed to fully Restore Default Camera Transform Data : % s" % cam) # sound management if self.dataStore['displaySound']: cmds.timeControl(self.gPlayBackSlider, e=True, ds=1, sound=self.dataStore['activeSound']) log.debug('Restored Audio setup') else: cmds.timeControl(self.gPlayBackSlider, e=True, ds=0) log.debug('Scene Restored fully') return True
def doPlayblast(self, camera): G.TU_movie = None G.TU_audioFile = None G.TU_audioOffsetSec = None winName = 'playblastWindow' overscan = cmds.getAttr("%s.overscan"%camera) audioTrack = cmds.timeControl(G.playBackSliderPython, query=True, sound=True) rangeVisible = cmds.timeControl(G.playBackSliderPython, query=True, rangeVisible=True ) widthHeight = utilMod.getRenderResolution() if cmds.window(winName, query=True, exists=True): cmds.deleteUI(winName) window = cmds.window(winName, widthHeight=widthHeight) form = cmds.formLayout() editor = cmds.modelEditor() column = cmds.columnLayout('true') cmds.formLayout( form, edit=True, attachForm=[(column, 'top', 0), (column, 'left', 0), (editor, 'top', 0), (editor, 'bottom', 0), (editor, 'right', 0)], attachNone=[(column, 'bottom'), (column, 'right')], attachControl=(editor, 'left', 0, column)) cmds.modelEditor(editor, edit=True, camera=camera, activeView=True) cmds.showWindow( window ) cmds.window( winName, edit=True, topLeftCorner=(0, 0), widthHeight=[200,200]) utilMod.cameraViewMode(editor) cmds.setAttr("%s.overscan"%camera, 1) if rangeVisible: range = animMod.getTimelineRange(float=False) rFrom = range[0] rTo = range[1]-1 else: rFrom = cmds.playbackOptions(query=True, minTime=True) rTo = cmds.playbackOptions(query=True, maxTime=True) if G.currentStudio == None: G.TU_movie = cmds.playblast(format="qt", sound=audioTrack, startTime=rFrom ,endTime=rTo , viewer=1, showOrnaments=0, offScreen=True, fp=4, percent=50, compression="png", quality=70, widthHeight=widthHeight, clearCache=True) else: fps = mel.eval("currentTimeUnitToFPS") if audioTrack: G.TU_audioFile = cmds.sound(audioTrack, query=True, file=True) audioOffset = cmds.sound(audioTrack, query=True, offset=True) G.TU_audioOffsetSec = str((rFrom - audioOffset)/-fps) movieName = cmds.playblast(format="image", startTime=rFrom ,endTime=rTo , viewer=0, showOrnaments=0, offScreen=True, fp=4, percent=50, compression="jpg", quality=70, widthHeight=widthHeight, clearCache=True) if movieName: G.TU_movie = "%s.%s-%s#.jpg"%(movieName.split(".")[0], int(rFrom), int(rTo)) if audioTrack: G.TU_audioOffsetSec = audioOffset self.playMovie(G.TU_movie, G.TU_audioFile, G.TU_audioOffsetSec) if cmds.window(winName, query=True, exists=True): cmds.deleteUI(winName) cmds.setAttr("%s.overscan"%camera, overscan) if not G.TU_movie: return save = aToolsMod.getUserPref("saveAfterPlayblasting", default=True) if save and not rangeVisible: cmds.file(save=True)
def HotKey_SetUI(): oSel = [str(o) for o in cmds.ls(sl = True, o = True)] # Timeline setting : Display Key Ticks to : 'selected' oPlayBackSlider = mel.eval('$tmpVar=$gPlayBackSlider') cmds.timeControl(oPlayBackSlider, edit = True, animLayerFilterOptions = 'selected') # ANIM camera creation iRecreateAnimCam = 0 # 1 = Re-create ANIM_CAM everytime. 0 = Only create when there is no cam. sCamName = 'ANIM_CAM' if iRecreateAnimCam: aList = ['focalLength', 'focusDistance', 'centerOfInterest', 'locatorScale', 'nearClipPlane', 'farClipPlane'] aTransform = [] aAttr = [] if cmds.objExists(sCamName): aTransform.append(cmds.xform(sCamName, q = True, ws = True, t = True)) aTransform.append(cmds.xform(sCamName, q = True, ws = True, ro = True)) for a in aList: aAttr.append(cmds.getAttr('%sShape.%s'%(sCamName,a))) cmds.delete(sCamName) oCamera = cmds.camera() cmds.rename(oCamera[0], '%s'%sCamName) if aTransform: cmds.xform(sCamName, ws = True, t = aTransform[0]) cmds.xform(sCamName, ws = True, ro = aTransform[1]) for i, v in enumerate(aAttr): cmds.setAttr('%sShape.%s'%(sCamName,aList[i]),v) else: if not cmds.objExists(sCamName): oCamera = cmds.camera() cmds.rename(oCamera[0], '%s'%sCamName) # Visibility Layer creation aLayer = ['Hidden', 'NonSelect'] aLayerSetting = [ [28,2,False, True], [28,2,True, False],] for i, a in enumerate(aLayer): if not cmds.objExists(a): cmds.createDisplayLayer(e = True, name = a) for v, s in enumerate(['color', 'displayType', 'visibility', 'hideOnPlayback']): cmds.setAttr('%s.%s'%(aLayer[i], s),aLayerSetting[i][v]) # Set panel to custom. mel.eval('setNamedPanelLayout "Custom_Anim";') # CUSTOM TOOL - project based ProjectCustom_SetUI() # Custom tool for this proj # Selection - Back to what was selected first. cmds.select(oSel, r = True)
def toggle_audio(): sound_enabled = cmds.timeControl(timeline_control, q=True, displaySound=True) cmds.timeControl(timeline_control, e=True, displaySound=not sound_enabled) if sound_enabled == True: cmds.evalDeferred('print "Sound disabled"') else: cmds.evalDeferred('print "Sound enabled"')
def getPlaybackRange(): ''' returns a 2-tuple of startTime, endTime. The values are taken from the visible playback unless there is a time selection. If there is a time selection, then its range is returned instead ''' if cmd.timeControl( 'timeControl1', q=True, rv=True ): #NOTE: timeControl1 is the name of maya's default, global timeControl widget... return cmd.timeControl( 'timeControl1', q=True, range=True ) return int( cmd.playbackOptions( q=True, min=True ) ), int( cmd.playbackOptions( q=True, max=True ) )
def _getStartAndEnd(): gPlayBackSlider = mm.eval('$temp=$gPlayBackSlider') if mc.timeControl(gPlayBackSlider, query=True, rangeVisible=True): start, end = mc.timeControl(gPlayBackSlider, query=True, rangeArray=True) return start, end - 1 return None, None
def storeSettings(self): ''' main work function, store all UI settings ''' self.dataStore['autoKey'] = cmds.autoKeyframe(query=True, state=True) # timeline management self.dataStore['currentTime'] = cmds.currentTime(q=True) self.dataStore['minTime'] = cmds.playbackOptions(q=True, min=True) self.dataStore['maxTime'] = cmds.playbackOptions(q=True, max=True) self.dataStore['startTime'] = cmds.playbackOptions(q=True, ast=True) self.dataStore['endTime'] = cmds.playbackOptions(q=True, aet=True) self.dataStore['playSpeed'] = cmds.playbackOptions(query=True, playbackSpeed=True) # unit management self.dataStore['timeUnit'] = cmds.currentUnit(q=True, fullName=True, time=True) self.dataStore['sceneUnits'] = cmds.currentUnit(q=True, fullName=True, linear=True) self.dataStore['upAxis'] = cmds.upAxis(q=True, axis=True) #panel management self.dataStore['panelStore'] = {} for panel in [ 'modelPanel1', 'modelPanel2', 'modelPanel3', 'modelPanel4' ]: if not cmds.modelPanel(panel, q=True, exists=True): continue self.dataStore['panelStore'][panel] = {} self.dataStore['panelStore'][panel]['settings'] = cmds.modelEditor( panel, q=True, sts=True) activeCam = cmds.modelPanel(panel, q=True, camera=True) if not cmds.nodeType(activeCam) == 'camera': activeCam = cmds.listRelatives(activeCam)[0] self.dataStore['panelStore'][panel]['activeCam'] = activeCam #camera management #TODO : store the camera field of view etc also self.dataStore['cameraTransforms'] = {} for cam in ['persp', 'top', 'side', 'front']: self.dataStore['cameraTransforms'][cam] = [ cmds.getAttr('%s.translate' % cam), cmds.getAttr('%s.rotate' % cam), cmds.getAttr('%s.scale' % cam) ] #sound management self.dataStore['activeSound'] = cmds.timeControl(self.gPlayBackSlider, q=True, s=1) self.dataStore['displaySound'] = cmds.timeControl(self.gPlayBackSlider, q=True, ds=1)
def _getStartAndEnd(): ''' Only return start and end if frame range is highlighted. Otherwise use all available animation. ''' gPlayBackSlider = mm.eval('$temp=$gPlayBackSlider') if mc.timeControl(gPlayBackSlider, query=True, rangeVisible=True): start, end = mc.timeControl(gPlayBackSlider, query=True, rangeArray=True) return start, end-1 return None, None
def release_command_callback(self, *args): """ Release callback on the timeline, together with the press command the difference can be extracted and the markers can be moved accordingly. Theuser settings will be checked if the moving of markers is appropriate. """ timeline_path = utils.get_timeline_path() cmds.timeControl(timeline_path, edit=True, endScrub=True) # check if markers need to be shifted if not self.range or not self.move.isChecked(): return # get begin and end range start_range = self.range[:] end_range = utils.get_timeline_range() # reset stored range self.range = None # check data start_length = len(start_range) end_length = len(end_range) range_visible = cmds.timeControl(timeline_path, query=True, rangeVisible=True) if (start_length == 1 and end_length != 1) or not range_visible: return # remap frames matches = { frame: self.data[frame] for frame in start_range if frame in self.data } for frame, frame_data in matches.items(): if start_length == 1: frame_remapped = end_range[0] else: frame_remapped = int( utils.remap(frame, input_min=start_range[0], input_max=start_range[-1], output_min=end_range[0], output_max=end_range[-1])) # continue if frame is the same if frame == frame_remapped: continue # update data self.data[frame_remapped] = frame_data self.data.pop(frame, None) self.update()
def get_slider(): aPlayBackSlider = maya.mel.eval('$tmpVar=$gPlayBackSlider') if not cmds.timeControl(aPlayBackSlider, query=True, rangeVisible=True): return cmds.warning("No range selected") time_slider_range = cmds.timeControl(aPlayBackSlider, query=True, rangeArray=True) timeline_range = tuple(time_slider_range) return timeline_range
def pin_control(): # Rigging Dojo: 2016 v.2 aPlayBackSliderPython = mel.eval('$tmpVar=$gPlayBackSlider') selection = cmds.ls(sl=True) selectionActvive = cmds.timeControl(aPlayBackSliderPython, query=True, rangeVisible=True) selectedRange = cmds.timeControl(aPlayBackSliderPython, query=True, rangeArray=True) frameRange = range(*map(int, selectedRange)) zeroStartKey = cmds.setKeyframe(selection, time=(selectedRange[0] - 1), id=True) # zero the frames to base layer adjust as needed startTime = cmds.currentTime(selectedRange[0]) # makesure pose is from the start of the selection keyRange = cmds.setKeyframe(selection, time=frameRange) # Set all the keys at the same time zeroEndKey = cmds.setKeyframe(selection, time=(selectedRange[1] + 1), id=True) # zero the frames to base layer adjust as needed
def pin_control(): # Rigging Dojo: 2016 v.2 aPlayBackSliderPython = mel.eval('$tmpVar=$gPlayBackSlider') selection = cmds.ls(sl=True) selectionActive = cmds.timeControl(aPlayBackSliderPython, query=True, rangeVisible=True) selectedRange = cmds.timeControl(aPlayBackSliderPython, query=True, rangeArray=True) frameRange = range(*map(int, selectedRange)) zeroStartKey = cmds.setKeyframe(selection, time=(selectedRange[0] - 1), id=True) # zero the frames to base layer adjust as needed startTime = cmds.currentTime(selectedRange[0]) # makesure pose is from the start of the selection keyRange = cmds.setKeyframe(selection, time=frameRange) # Set all the keys at the same time zeroEndKey = cmds.setKeyframe(selection, time=(selectedRange[1] + 1), id=True) # zero the frames to base layer adjust as needed
def setTimeSlider(*args): mode = cmds.radioButtonGrp(UI.widgets['timeSldrRadBtn'], q=True, select=True) if mode == 1: nModeStart = cmds.textField(UI.widgets['timeSldrNrmStartTxtFld'], q=True, text=True) nModeEnd = cmds.textField(UI.widgets['timeSldrNrmEndTxtFld'], q=True, text=True) cmds.playbackOptions(minTime=nModeStart) cmds.playbackOptions(maxTime=nModeEnd) cmds.currentTime(nModeStart) elif mode == 2: tModeDur = float( cmds.textField(UI.widgets['timeSldrTimeDurTxtFld'], q=True, text=True)) tModeStart = float( cmds.textField(UI.widgets['timeSldrTimeStartTxtFld'], q=True, text=True)) curTime = cmds.currentUnit(q=True, time=True) if curTime == 'film': fps = 24 elif curTime == 'pal': fps = 25 elif curTime == 'ntsc': fps = 30 durFrameLen = tModeDur * fps tModeEnd = (tModeStart + durFrameLen) - 1 cmds.playbackOptions(minTime=tModeStart) cmds.playbackOptions(maxTime=tModeEnd) cmds.currentTime(tModeStart) elif mode == 3: mel.eval('source "updateSoundMenu.mel";') sModeSndPath = cmds.textField( UI.widgets['timeSldrSoundPathTxtFld'], q=True, text=True) sModeStart = int( cmds.textField(UI.widgets['timeSldrSoundStartTxtFld'], q=True, text=True)) sndNode = cmds.sound(offset=sModeStart, file=sModeSndPath) soundLength = round(cmds.sound(sndNode, q=True, length=True)) - 1 sModeEnd = sModeStart + soundLength cmds.playbackOptions(minTime=sModeStart) cmds.playbackOptions(maxTime=sModeEnd) cmds.currentTime(sModeStart) gPlayBackSlider = mel.eval('$tmpVar=$gPlayBackSlider') cmds.timeControl(gPlayBackSlider, edit=True, sound=sndNode) mel.eval('setSoundDisplay %s 1;' % (sndNode))
def storeSettings(self): ''' main work function, store all UI settings ''' self.dataStore['autoKey'] = cmds.autoKeyframe(query=True, state=True) # timeline management self.dataStore['currentTime'] = cmds.currentTime(q=True) self.dataStore['minTime'] = cmds.playbackOptions(q=True, min=True) self.dataStore['maxTime'] = cmds.playbackOptions(q=True, max=True) self.dataStore['startTime'] = cmds.playbackOptions(q=True, ast=True) self.dataStore['endTime'] = cmds.playbackOptions(q=True, aet=True) self.dataStore['playSpeed'] = cmds.playbackOptions(query=True, playbackSpeed=True) self.dataStore['playLoop'] = cmds.playbackOptions(query=True, loop=True) # unit management self.dataStore['timeUnit'] = cmds.currentUnit(q=True, fullName=True, time=True) self.dataStore['sceneUnits'] = cmds.currentUnit(q=True, fullName=True, linear=True) self.dataStore['upAxis'] = cmds.upAxis(q=True, axis=True) # viewport colors self.dataStore['displayGradient'] = cmds.displayPref(q=True, displayGradient=True) # objects colors self.dataStore['curvecolor'] = cmds.displayColor("curve", q=True, dormant=True) # panel management self.dataStore['panelStore'] = {} for panel in ['modelPanel1', 'modelPanel2', 'modelPanel3', 'modelPanel4']: if not cmds.modelPanel(panel, q=True, exists=True): continue self.dataStore['panelStore'][panel] = {} self.dataStore['panelStore'][panel]['settings'] = cmds.modelEditor(panel, q=True, sts=True) activeCam = cmds.modelPanel(panel, q=True, camera=True) if not cmds.nodeType(activeCam) == 'camera': activeCam = cmds.listRelatives(activeCam, f=True)[0] self.dataStore['panelStore'][panel]['activeCam'] = activeCam # camera management # TODO : store the camera field of view etc also self.dataStore['cameraTransforms'] = {} for cam in ['persp', 'top', 'side', 'front']: try: self.dataStore['cameraTransforms'][cam] = [cmds.getAttr('%s.translate' % cam), cmds.getAttr('%s.rotate' % cam), cmds.getAttr('%s.scale' % cam)] except: log.debug("Camera doesn't exists : %s" % cam) # sound management self.dataStore['activeSound'] = cmds.timeControl(self.gPlayBackSlider, q=True, s=1) self.dataStore['displaySound'] = cmds.timeControl(self.gPlayBackSlider, q=True, ds=1)
def remove_callbacks(self): """ Remove the callbacks that update the time line markers every time a new scene is initialized or opened. """ if self.callbacks: OpenMaya.MMessage.removeCallbacks(self.callbacks) timeline_path = utils.get_timeline_path() cmds.timeControl(timeline_path, edit=True, pressCommand=None, releaseCommand=None)
def load(self, context, name, namespace, data): start_frame = cmds.playbackOptions(query=True, min=True) sound_node = cmds.sound( file=context["representation"]["data"]["path"], offset=start_frame ) cmds.timeControl( mel.eval("$tmpVar=$gPlayBackSlider"), edit=True, sound=sound_node, displaySound=True ) return [sound_node]
def FaceCapImportAudio(filePath): dirName, fileName = ntpath.split(filePath) name, extension = os.path.splitext(fileName) audioPath = ntpath.join(dirName, name + ".wav") print("AudioPath:" + audioPath) if os.path.exists(audioPath): cmds.currentTime('0sec', edit=True) audioNode = cmds.sound(offset=0, file=audioPath) gPlayBackSlider = maya.mel.eval('$tmpVar=$gPlayBackSlider') cmds.timeControl(gPlayBackSlider, edit=True, sound=audioNode) else: print("Audio not found, load it manually.")
def _getTime(type): timeSlider = mm.eval('$tmp = $gPlayBackSlider') if type == 'playbackMin': return mc.playbackOptions(q=1, min=1) elif type == 'playbackMax': return mc.playbackOptions(q=1, max=1) elif type == 'rangeSelected': return mc.timeControl(timeSlider, q=1, rv=1) elif type == 'rangeMin': return mc.timeControl(timeSlider, q=1, ra=1)[0] elif type == 'rangeMax': return mc.timeControl(timeSlider, q=1, ra=1)[1]
def restoreSettings(self): ''' restore all UI settings ''' cmds.autoKeyframe(state=self.dataStore['autoKey']) #timeline management cmds.currentTime(self.dataStore['currentTime']) cmds.playbackOptions(min=self.dataStore['minTime']) cmds.playbackOptions(max=self.dataStore['maxTime']) cmds.playbackOptions(ast=self.dataStore['startTime']) cmds.playbackOptions(aet=self.dataStore['endTime']) cmds.playbackOptions(ps=self.dataStore['playSpeed']) #unit management cmds.currentUnit(time=self.dataStore['timeUnit']) cmds.currentUnit(linear=self.dataStore['sceneUnits']) cmds.upAxis(axis=self.dataStore['upAxis']) log.info('Restored PlayBack / Timeline setup') #panel management for panel, data in self.dataStore['panelStore'].items(): cmdString = data['settings'].replace('$editorName', panel) mel.eval(cmdString) log.info("Restored Panel Settings Data >> %s" % panel) mel.eval('lookThroughModelPanel("%s","%s")' % (data['activeCam'], panel)) log.info("Restored Panel Active Camera Data >> %s >> cam : %s" % (panel, data['activeCam'])) # camera management for cam, settings in self.dataStore['cameraTransforms'].items(): cmds.setAttr('%s.translate' % cam, settings[0][0][0], settings[0][0][1], settings[0][0][2]) cmds.setAttr('%s.rotate' % cam, settings[1][0][0], settings[1][0][1], settings[1][0][2]) cmds.setAttr('%s.scale' % cam, settings[2][0][0], settings[2][0][1], settings[2][0][2]) log.info('Restored Default Camera Transform Data : % s' % cam) #sound management if self.dataStore['displaySound']: cmds.timeControl(self.gPlayBackSlider, e=True, ds=1, sound=self.dataStore['activeSound']) log.info('Restored Audio setup') else: cmds.timeControl(self.gPlayBackSlider, e=True, ds=0) return True
def openFile(): """ Function to open a new wav file into the scene. Creates a new Maya sound node and changes the timeslider to use the audio for playback while scrubbing. Prepares the wav file for reading audio data. Adjusts the UI to display the current audio parameters and progress bar for the new track. """ global wavFile, params, frames #open file dialog fileNameList = cmds.fileDialog2(cap="Choose Audio File...", ff="*.wav", fm=4, ds=2, okc="Open") #convert result from dialog box to a useable string fileName = str(fileNameList[0]) #load the file name into the info text area in the UI cmds.text('currentAudioPath', edit=True, label="Currently Loaded: "+fileName) #delete any existing audio nodes if(cmds.objExists('audio')): cmds.select('audio') cmds.delete() #create a new sound node cmds.sound(f=fileName, n="audio") #set the 'audio' node to be the audio for the timeline. #--------- code from documentation starts here ------------# gPlayBackSlider = mel.eval( '$tmpVar=$gPlayBackSlider' ) cmds.timeControl( gPlayBackSlider, edit=True, sound='audio', displaySound=True) #--------- code from documentation ends here -------------# #set the playback range to the range of the audio cmds.playbackOptions(min=0, aet=(cmds.getAttr('audio.duration')), max=(cmds.getAttr('audio.duration'))) #------- set up the stream -------# wavFile = wave.open(fileName) params = wavFile.getparams() frames = wavFile.readframes(params[3]) #update the info text with the audio parameters. cmds.text('currentParams', edit=True, label=str(params)) #set the max of the progress bar to the number of audio frames in the selected track cmds.progressBar('progress', edit=True, maxValue = params[3]) print "Result: ",fileName, "has been loaded."
def scrubbingUndo(onOff): G.playBackSliderPython = G.playBackSliderPython or mel.eval('$aTools_playBackSliderPython=$gPlayBackSlider') pc = "from maya import cmds;" rc = "from maya import cmds;" if not onOff: pc += "cmds.undoInfo(stateWithoutFlush=False); " rc += "cmds.undoInfo(stateWithoutFlush=True); " pc += "cmds.timeControl('%s',edit=True,beginScrub=True)"%G.playBackSliderPython rc += "cmds.timeControl('%s',edit=True,endScrub=True)"%G.playBackSliderPython cmds.timeControl( G.playBackSliderPython, edit=True, pressCommand=pc, releaseCommand=rc)
def ChangeTrack(self, tracksMenu, selectedTrack): """ Changes from one audio node to another """ # Set selected track as the audio in the playBackSlider cmds.timeControl(self.playBackSlider, edit=True, sound=selectedTrack, displaySound=True) # Get the index of this track numberOfItems = cmds.optionMenu(tracksMenu, query=True, select=True) # Set the wav reader self.reader = self.readersList[numberOfItems - 1]
def updateFrameRange(self, all=False): rangeVisible = cmds.timeControl(G.playBackSliderPython, query=True, rangeVisible=True ) if not rangeVisible or all: range = [cmds.playbackOptions(query=True, minTime=True), cmds.playbackOptions(query=True, maxTime=True)+1] else: range = cmds.timeControl(G.playBackSliderPython, query=True, rangeArray=True) #range[1] -= 1 self.firstFrame = range[0] self.lastFrame = range[1]-1 self.updateSortedRange() self.updateCameraMatrices()
def setTimelineRange(self, range=None, *args): rangeVisible = cmds.timeControl( G.playBackSliderPython, query=True, rangeVisible=True ) if not rangeVisible and not range: range = [cmds.playbackOptions(query=True, minTime=True), cmds.playbackOptions(query=True, maxTime=True)+1] if range or rangeVisible: if not range: range = animMod.getTimelineRange(float=False) rFrom = range[0] rTo = range[1]-1 cmds.playbackOptions(minTime=rFrom, maxTime=rTo) if self.getTimelineRanges() != None: ranges = eval(self.getTimelineRanges()) else: ranges = [] if not range in ranges: ranges.append(range) aToolsMod.saveInfoWithScene(STORE_NODE, RANGE_ATTR, ranges) utilMod.deselectTimelineRange()
def parse_active_scene(): """Parse active scene for arguments for capture() *Resolution taken from render settings. """ time_control = mel.eval("$gPlayBackSlider = $gPlayBackSlider") return { "start_frame": cmds.playbackOptions(minTime=True, query=True), "end_frame": cmds.playbackOptions(maxTime=True, query=True), "width": cmds.getAttr("defaultResolution.width"), "height": cmds.getAttr("defaultResolution.height"), "compression": cmds.optionVar(query="playblastCompression"), "filename": (cmds.optionVar(query="playblastFile") if cmds.optionVar(query="playblastSaveToFile") else None), "format": cmds.optionVar(query="playblastFormat"), "off_screen": (True if cmds.optionVar(query="playblastOffscreen") else False), "show_ornaments": (True if cmds.optionVar(query="playblastShowOrnaments") else False), "quality": cmds.optionVar(query="playblastQuality"), "sound": cmds.timeControl(time_control, q=True, sound=True) or None }
def cmdKeyframe(val=None): try: if val != None: offset = val else: offset = int(cmds.textField("animOffsetInput", q=True, tx=True)) if not offset: return except: cmds.headsUpMessage(u'请输入有效数值:负值为向左移动,正值为向右移动', time=3) return tc = mel.eval("$tmpVar = $gPlayBackSlider;") sound = cmds.timeControl(tc, q=True, sound=True) if sound: cmds.setAttr(sound + ".offset", cmds.getAttr(sound + ".offset") + offset) animCurves = [] for ac in cmds.ls(type="animCurveTL"): animCurves.append(ac) for ac in cmds.ls(type="animCurveTA"): animCurves.append(ac) for ac in cmds.ls(type="animCurveTU"): animCurves.append(ac) if not len(animCurves): return cmds.progressWindow(title=u"进度", status=u"处理中...") cmds.progressWindow(e=True, progress=0, max=len(animCurves)) for ac in animCurves: cmds.select(ac, r=True) cmds.keyframe(edit=True, relative=True, timeChange=offset) cmds.progressWindow(e=True, step=1) cmds.select(clear=True) cmds.progressWindow(endProgress=1)
def get_InOutFrames(type = 'Time Slider'): ''' Get Frame Range from maya ''' in_out = [] if type == r"Highlighted": slider = mel.eval('$tmpVal=$gPlayBackSlider') in_out = cmds.timeControl(slider, query=True, rangeArray = True) in_out[1] = in_out[1]-1 elif type == r"Start / End": in_out.append(cmds.playbackOptions(q=True, minTime = True)) in_out.append(cmds.playbackOptions(q=True, maxTime = True)) elif type == r"Time Slider": in_out.append(cmds.playbackOptions(q=True, animationStartTime = True)) in_out.append(cmds.playbackOptions(q=True, animationEndTime = True)) elif type == r"Current Frame": cf = cmds.currentTime(query=True) in_out = [cf,cf] else: start_frame = database.read_cache('frame_start') end_frame = database.read_cache('frame_end') in_out = [start_frame, end_frame] try: in_out = [str(int(val)) for val in in_out] except: pass return in_out
def qeury_active_sound_node(): aPlayBackSliderPython = mel.eval('$tmpVar=$gPlayBackSlider') sound = cmds.timeControl(aPlayBackSliderPython, q=1, s=1) if sound: return sound else: return None
def get_selected_range(cls): playback_slider = mel.eval("$tempVar = $gPlayBackSlider") selected_range = cmds.timeControl(playback_slider, q=True, rangeArray=True) return selected_range
def frameRange(start=None, end=None): ''' Returns the frame range based on the highlighted timeslider, or otherwise the playback range. ''' if not start and not end: gPlayBackSlider = mm.eval('$temp=$gPlayBackSlider') if mc.timeControl(gPlayBackSlider, query=True, rangeVisible=True): frameRange = mc.timeControl(gPlayBackSlider, query=True, rangeArray=True) return frameRange else: start = mc.playbackOptions(query=True, min=True) end = mc.playbackOptions(query=True, max=True) return start,end
def blast(*args): """Playblast and settings. Change to your liking.""" fileNameLong = cmds.file(query=True, sceneName=True, shortName=True) if fileNameLong == "": fileNameLong = "untitled" else: fileNameLong = cmds.file(query=True, sceneName=True, shortName=True) fileNameShort = fileNameLong.split(".") TimeRange = mel.eval('$tmpVar=$gPlayBackSlider') SoundNode = cmds.timeControl(TimeRange, query=True, sound=True) # Disable 2D Pan & Zoom in current viewport activepanel = cmds.getPanel(withFocus=True) cam = cmds.modelEditor(activepanel, query=True, camera=True) # camShape = cmds.listRelatives(cam, shapes=True)[0] cmds.setAttr(cam + '.panZoomEnabled', False) if cmds.ls(renderResolutions=True): ResX = cmds.getAttr("defaultResolution.width") ResY = cmds.getAttr("defaultResolution.height") cmds.playblast( filename=("movies/" + fileNameShort[0] + ".mov"), forceOverwrite=True, format="qt", compression="png", offScreen=True, width=ResX, height=ResY, quality=100, percent=100, sound=SoundNode ) else: cmds.error("No resolution data in file. \ Please set resolution and save.")
def channelbox_command_syncTimeline(box, menuItem, key, *args): with sysCmd.Undo(0): state = channelBox_Checkbox_Update(box, key, menuItem) playback_slider = mel.eval("$tmpVar=$gPlayBackSlider") # gets timeslider name if state: cmds.timeControl(playback_slider, e=1, showKeys=box.channelbox) cmds.timeControl(playback_slider, e=1, showKeysCombined=1) else: cmds.timeControl(playback_slider, e=1, showKeysCombined=0) cmds.timeControl(playback_slider, e=1, showKeys="active")
def selRange(): selRange = cmds.timeControl('timeControl1', q=True, ra=True) min = selRange[0] max = selRange[1] range = max - min if range > 1: return min, max else: return False
def getSoundInfo(): gPlayBackSlider = mel.eval('$tmpVar=$gPlayBackSlider') # seriously maya? sound = cmds.timeControl(gPlayBackSlider, q=True, sound=True) if sound: soundfile = cmds.sound(sound, q=True, file=True) soundOffset = cmds.getAttr('%s.offset' % sound) return str(soundfile), soundOffset else: return None, None
def smartSnapKeys(self): rangeVisible = cmds.timeControl( G.playBackSliderPython, query=True, rangeVisible=True ) if not rangeVisible: return cmds.undoInfo(stateWithoutFlush=False) commandsMod.smartSnapKeys() cmds.undoInfo(stateWithoutFlush=True)
def playback_selection_range(): aPlayBackSliderPython = mel.eval('$tmpVar=$gPlayBackSlider') time_selection = cmds.timeControl( aPlayBackSliderPython, q=True,rng=True )[1:-1] start = round(float(time_selection.split(":")[0])) end = round(float(time_selection.split(":")[1])) if start+1 == end: return None else: return [start, end]
def setDefaultConfig(self): #STATIC PREFS # tumble config #cmds.tumbleCtx( 'tumbleContext', edit=True, alternateContext=True, tumbleScale=1.0, localTumble=0, autoOrthoConstrain=False, orthoLock=False) cmds.tumbleCtx( 'tumbleContext', edit=True, alternateContext=True, tumbleScale=1.0, localTumble=0) cmds.dollyCtx( 'dollyContext', edit=True, alternateContext=True, scale=1.0, localDolly=True, centerOfInterestDolly=False) #timeline ticks display G.playBackSliderPython = G.playBackSliderPython or mel.eval('$aTools_playBackSliderPython=$gPlayBackSlider') cmds.timeControl(G.playBackSliderPython, edit=True, showKeys="mainChannelBox", showKeysCombined=True, animLayerFilterOptions="active") #tickDrawSpecial Color cmds.displayRGBColor('timeSliderTickDrawSpecial',1,1,.4) #CUSTOMIZABLE PREFS for loopPref in PREFS: name = loopPref["name"] self.setPref(name, True)
def getTimelineRange(float=True): # if G.lastCurrentFrame == cmds.currentTime(query=True): return G.lastRange G.playBackSliderPython = G.playBackSliderPython or mel.eval("$aTools_playBackSliderPython=$gPlayBackSlider") range = cmds.timeControl(G.playBackSliderPython, query=True, rangeArray=True) if float: range[1] -= 0.0001 # G.lastRange = range # G.lastCurrentFrame = cmds.currentTime(query=True) return range
def selRange(self): # overide range if selected range is detected sel = cmds.timeControl('timeControl1', q=True, ra=True) self.range = sel[1] - sel[0] # print range, ' range' if self.range > 1: print self.range, '_____range' self.selStart = sel[0] self.selEnd = sel[1] self.keyStart = sel[0] self.keyEnd = sel[1] self.selection = True
def get_current_sound(): playback_slider = mel.eval('$tmpVar = $gPlayBackSlider') if not playback_slider: print '# Could not get gPlayBackSlider' return sound_node = cmds.timeControl(playback_slider, query=True, sound=True) if not sound_node: cmds.warning('No sound node.') return return cmds.sound(sound_node, query=True, file=True)