Yup it really is because of the lambda function... I change the apply button
command to this:applyButton = pm.button( height=buttonHeight, label='Apply',
command='avRandomizer._windowApply("%s", %d)' %(window, False) )baking the command into a dumb string, and the undo work as expected. I am suspecting that the lambda function is going through the code, building some sort of huge command list. When I call the lambda function Maya is not recording one command but many commands, thus giving me this undo problem. I would still really like to be able to use lambda function in my window command, because sometimes sending a command as a string is not possible... like if I want to send a list to my function, building a string might prove problematic. On Fri, Apr 3, 2009 at 9:57 AM, sberger <[email protected]> wrote: > > Hi, I am using pymel to build this window. in my Apply button I am > using lambda in the command flag: > > applyButton = pm.button( height=buttonHeight, label='Apply', > command=lambda *args: _windowApply(window, False) ) > > In the aply function, I grab values from the window and use these > values to call another command ... my randomize command: > # get translate values > if trEnable: > trRelative = pm.radioButtonGrp('TranslateRelAbsRadio', q=True, > select=True) > trX = pm.floatSliderGrp('TranslateXslider', q=True, value=True) > trY = pm.floatSliderGrp('TranslateYslider', q=True, value=True) > trZ = pm.floatSliderGrp('TranslateZslider', q=True, value=True) > # call the randomize command > avRandom.randomTranslate((trX,trY,trZ), trRelative) > > this randomize command loops the selection and apply a random value in > translate, rotate or scale. > > here is the catch: > When running the randomize command on a few object, then do undo, all > the translate on all objects are undo-ed in one go. > When I run the _windowsApply() by itself (for debuging purpose), the > undo works... it undos all the translate of all the objects in one go. > > BUT > > When I run it by pressing my apply button (i.e the _windowsApply() is > called through the lambda function ... then the undo undo each object > one after the other instead of all of them in one go.... > > Anyone have any idea why that is? > > > > -- They say, "Evil prevails when good men fail to act." What they ought to say is, "Evil prevails." Nicolas Cage as Yuri Orlov in Lord of War. --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/python_inside_maya -~----------~----~----~----~------~----~------~--~---
