[Bf-committers] Global undo & running python scripts

Willian Padovani Germano wgermano at ig.com.br
Thu Feb 3 03:53:07 CET 2005


Ton Roosendaal wrote:

> A related issue was reported in the tracker about running python  
> scripts (with GUI). Can one of our python team members say something  
> about the correct circumstances to detect whether a running script 
> can  be closed and safely restarted after Undo?

Hi,

A well behaved script would work fine with close / restart, but there 
are a few things we still have to add, for example to restart them 
automatically, if needed.  But that could be a little cumbersome.  I 
prefer to investigate a little before commenting.  I didn't find the bug 
report you mention, Ton.  Could someone tell me which one it is?

We keep a separate dictionary (accessible with module Blender.Registry) 
for as long as Blender is running, so scripts can save config / current 
state data in dictionaries saved in this "registry dictionary".  I still 
have (will try before 2.37) to make Blender save these as small data 
files for each script when saving files or at least when leaving -- and 
then reload this config data on startup.  To "tell" scripts that they 
will be closed can be done easily by adding a new callback: there are 
already draw, event and button event ones, we can add a quit cb so 
scripts can leave with some elegance.

Not closing the scripts because of undo might prove a better idea 
indeed, Campbell.  All data in a script's gui is Python data.  And 
scripts with guis should always check Blender data to ensure it is still 
available before they redraw anything, so changes shouldn't be a 
problem, Ton.  Maybe it's possible to keep scripts open, since they can 
keep track of relevant changes themselves if well coded.

Jonathan Merritt mentions using callbacks in favor of scriptlinks.  Both 
have their uses and Ton and the bpython team agree that the callbacks 
are needed for interactive use, they are part of the plan for the new 
event system and something might even be added to the new transform 
system being worked on, let's see (and discuss) later.

It's not hard at all to code them, it's basically what the 
Blender.Draw.Register function does already.  But probably it's better 
not to do it before the new event and transform code is in place.  I'd 
say this is a good time to discuss, possibly using the wiki.

-- 
Willian



More information about the Bf-committers mailing list