The mel proc setPlayBackRangeToMinMax.mel probably has some help for you.
Here is the auto pymel version.
# script created by pymel.melparse.mel2py from mel file:
# ~\maya\2009\scripts\tcSetPlayBackRangeToMinMax.mel
from pymel import *
import uiRes
#
# Description:
# Sometimes it's useful to set the playback range to be the
# min/max of all the animation in the system. We define that
# to be the first and last keys from all the time-based
# animation curves we can find.
#
def setPlaybackRangeToMinMax():
animTL=ls(type='animCurveTL')
# Get a list of animCurve in the system.
# Check only for types created through
# keyframing: time to linear, time to
# angular, and time to unitless (for scale,
# or user created attributes).
#
animTA=ls(type='animCurveTA')
animTU=ls(type='animCurveTU')
animTT=ls(type='animCurveTT')
keys=[]
largestKey=-100000.0
smallestKey=100000.0
keyCount=0
for curve in animTL:
last=int(keyframe(curve,
q=1,kc=1))
if last>0:
last-=1
keys=keyframe(curve,
q=1,index=[0, last],tc=1)
keyCount+=len(keys)
for key in keys:
if key>largestKey:
largestKey=float(key)
if key<smallestKey:
smallestKey=float(key)
for curve in animTA:
last=int(keyframe(curve,
q=1,kc=1))
if last>0:
last-=1
keys=keyframe(curve,
q=1,index=[0, last],tc=1)
keyCount+=len(keys)
for key in keys:
if key>largestKey:
largestKey=float(key)
if key<smallestKey:
smallestKey=float(key)
for curve in animTU:
last=int(keyframe(curve,
q=1,kc=1))
if last>0:
last-=1
keys=keyframe(curve,
q=1,index=[0, last],tc=1)
keyCount+=len(keys)
for key in keys:
if key>largestKey:
largestKey=float(key)
if key<smallestKey:
smallestKey=float(key)
for curve in animTT:
last=int(keyframe(curve,
q=1,kc=1))
if last>0:
last-=1
keys=keyframe(curve,
q=1,index=[0, last],tc=1)
keyCount+=len(keys)
for key in keys:
if key>largestKey:
largestKey=float(key)
if key<smallestKey:
smallestKey=float(key)
if keyCount>0:
playbackOptions(max=(int(largestKey)),min=(int(smallestKey)))
# Only adjust the playback range if we've found animation.
#
else:
mel.error(uiRes.uiRes("m_TimeSliderMenu.kNoKeysError"))
On Wed, Mar 9, 2011 at 12:30 PM, Ctorres <[email protected]> wrote:
> Thanks all for your information... I tried all those things suggested
> and i couldn't get any of those things to work. I'm not sure if its
> because I'm using Maya 2009, but I experimented with other things to
> try to fix my problem. The only other solution i got to work was
> replacing timeSlider=True in the mc.keyFrame with time=(0, 1000).
> Thanks again.
>
> -------------------------------------new
> code-----------------------------
> import maya.cmds as mc
> #create sphere
> mc.polySphere(ch=True,o=True, r=5)
>
> #key sphere in diffrent time
> mc.currentTime(5, edit=True )
> mc.setKeyframe("pSphere1")
> mc.currentTime(10, edit=True )
> mc.setAttr("pSphere1.translateY", 5)
> mc.setKeyframe("pSphere1")
> mc.currentTime(0, edit=True )
>
> #getting first and last key
> firstKey = mc.findKeyframe(time=(0, 1000), which='first')
> lastKey = mc.findKeyframe(time=(0, 1000), which='last')
> print firstKey
> print lastKey
>
>
> firstKey = mc.findKeyframe(timeSlider=True, which='first')
> lastKey = mc.findKeyframe(timeSlider=True, which='last')
>
>
> On Mar 3, 6:59 pm, Ian Jones <[email protected]> wrote:
> > Here is what I was seeing with refresh:
> >
> > for x in xrange(0,10):
> > mc.file(new=True,force=True)
> >
> > mc.polySphere(ch=True,o=True, r=5)
> >
> > #key sphere in diffrent time
> >
> > mc.currentTime(5, edit=True )
> >
> > mc.setKeyframe("pSphere1")
> >
> > mc.currentTime(10, edit=True )
> >
> > mc.setAttr("pSphere1.translateY", 5)
> >
> > mc.setKeyframe("pSphere1")
> >
> > mc.currentTime(0, edit=True )
> >
> > mc.refresh()
> >
> > #getting first and last key
> >
> > firstKey = mc.findKeyframe(timeSlider=True, which='first')
> >
> > lastKey = mc.findKeyframe(timeSlider=True, which='last')
> >
> > print firstKey
> >
> > print lastKey
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > 0.0
> >
> > Not sure why though.
> >
> > On Thu, Mar 3, 2011 at 4:55 PM, Ian Jones <[email protected]>
> wrote:
> > > I tested mc.refresh() and mc.dgdirty(a=True) and both when placed in
> loops
> > > (new-file, run code) didn't end up printing the correct results.
> However on
> > > single runs seemed to work okay.
> >
> > > maya.utils.processIdleEvents() was probably what I was looking for
> though
> > > when I was thinking about the executeInMainThread. Just wanted
> something to
> > > make sure everything was caught up before running.
> >
> > > Ian
> >
> > > On Wed, Mar 2, 2011 at 10:40 PM, Paul Molodowitch <[email protected]
> >wrote:
> >
> > >> On Wed, Mar 2, 2011 at 8:28 PM, Ian Jones <[email protected]>
> wrote:
> >
> > >>> So this is annoying but I think this has something to do with how
> > >>> findKeyframe works.
> >
> > >>> If you add a pause it seems to work just fine:
> >
> > >>> import maya.cmds as mc
> >
> > >>> #create sphere
> >
> > >>> mc.polySphere(ch=True,o=True, r=5)
> >
> > >>> #key sphere in diffrent time
> >
> > >>> mc.currentTime(5, edit=True )
> >
> > >>> mc.setKeyframe("pSphere1")
> >
> > >>> mc.currentTime(10, edit=True )
> >
> > >>> mc.setAttr("pSphere1.translateY", 5)
> >
> > >>> mc.setKeyframe("pSphere1")
> >
> > >>> mc.currentTime(0, edit=True )
> >
> > >>> #Not sure why this fixes it technically - but it seems to have
> removed it
> > >>> for myself.
> >
> > >>> import time
> >
> > >>> time.sleep(1) #.4 was actually the smallest value that seemed to
> reliably
> > >>> get the correct result
> >
> > >> Out of curiosity, I gave maya.utils.processIdleEvents() and
> mc.refresh() a
> > >> shot, and those both seemed to do the trick. Though I was testing in
> gui
> > >> mode, and sometimes those don't work so hot in batch mode... so you
> might
> > >> want to test that if you need it there.
> >
> > >>> #getting first and last key
> >
> > >>> firstKey = mc.findKeyframe(timeSlider=True, which='first')
> >
> > >>> lastKey = mc.findKeyframe(timeSlider=True, which='last')
> >
> > >>> print firstKey
> >
> > >>> print lastKey
> >
> > >>> Of interesting note this didn't fix it without the pause and I'm not
> sure
> > >>> why:
> >
> > >>> import maya.utils
> >
> > >>> firstKey = maya.utils.executeInMainThreadWithResult(
> > >>> mc.findKeyframe,timeSlider=True, which='first')
> >
> > >>> lastKey = maya.utils.executeInMainThreadWithResult(
> > >>> mc.findKeyframe,timeSlider=True, which='last')
> >
> > >> According to the docstring for executeInMainThreadWithResult, if
> you're
> > >> already in the main thread, this essentially doesn't do anything...
> were you
> > >> thinking of maya.utils.executeDeferred? Of course, then you'd have to
> find
> > >> some way to get the result back...
> >
> > >> - Paul
> >
> > >>> Ian
> >
> > >>> On Fri, Feb 25, 2011 at 5:39 PM, Ctorres <[email protected]>
> wrote:
> >
> > >>>> Hey all,
> > >>>> For some reason I can't get this code to work correctly.Please help.
> > >>>> I'm working out of Maya 2009. So when I run this python code I get
> the
> > >>>> values for the firstKey and lastKey as 0 but if I just run the last
> 4
> > >>>> lines of code. I will get something different now, firstKey=5 and
> > >>>> lastKey=10. I'm not sure what is happening here. I guess my ultimate
> > >>>> goal is to find out what is the first keyframe and lastkeyframe of
> any
> > >>>> maya scene and be able to set a piece of code in the end like this
> > >>>> ------ mc.playbackOptions(aet=lastKey, ast=firstKey)
> >
> > >>>> Thanks Again,
> > >>>> Chris
> >
> > >>>> --------Start New Scene----------
> >
> > >>>> import maya.cmds as mc
> > >>>> #create sphere
> > >>>> mc.polySphere(ch=True,o=True, r=5)
> >
> > >>>> #key sphere in diffrent time
> > >>>> mc.currentTime(5, edit=True )
> > >>>> mc.setKeyframe("pSphere1")
> > >>>> mc.currentTime(10, edit=True )
> > >>>> mc.setAttr("pSphere1.translateY", 5)
> > >>>> mc.setKeyframe("pSphere1")
> > >>>> mc.currentTime(0, edit=True )
> >
> > >>>> #getting first and last key
> > >>>> firstKey = mc.findKeyframe(timeSlider=True, which='first')
> > >>>> lastKey = mc.findKeyframe(timeSlider=True, which='last')
> > >>>> print firstKey
> > >>>> print lastKey
> >
> > >>>> --
> > >>>>http://groups.google.com/group/python_inside_maya
> >
> > >>> --
> > >>>http://groups.google.com/group/python_inside_maya
> >
> > >> --
> > >>http://groups.google.com/group/python_inside_maya
> >
> >
>
> --
> http://groups.google.com/group/python_inside_maya
>
--
http://groups.google.com/group/python_inside_maya