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
