- based on a request by Campbell (he also provided a patch for scene.Layer) access to layers was improved a little, keeping the old method (ob.Layers is a bitmask) and adding the nicer one (ob.layers is a list of ints). Done for objects and scenes. House-cleaning: .Layer was renamed to .Layers (actually just using strncmp instead of strcmp, so both work, same done for Window.ViewLayers). - finally committing patch by Ken Hughes to let .clearScriptLinks() accept a parameter (list of strings) to clear only specified texts. - doc updates and fixes (JMS reported a problem in nmesh.transform() example code). Thanks all who contributed.
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Blender.Registry module
 | 
						|
 | 
						|
"""
 | 
						|
The Blender.Registry submodule.
 | 
						|
 | 
						|
B{New}: L{GetKey} and L{SetKey} have been updated to save and load scripts
 | 
						|
*configuration data* to files.
 | 
						|
 | 
						|
Registry
 | 
						|
========
 | 
						|
 | 
						|
This module provides a way to create, retrieve and edit B{persistent data} in
 | 
						|
Blender.
 | 
						|
 | 
						|
When a script is executed it has its own private global dictionary,
 | 
						|
which is deleted when the script exits. This is done to avoid problems with
 | 
						|
name clashes and garbage collecting.  But because of this, the data created by
 | 
						|
a script isn't kept after it leaves: the data is not persistent.  The Registry
 | 
						|
module was created to give programmers a way around this limitation.
 | 
						|
 | 
						|
Possible uses:
 | 
						|
 - saving arbitrary data from a script that itself or another one will need
 | 
						|
   to access later.
 | 
						|
 - saving configuration data for a script: users can view and edit this data
 | 
						|
   using the "Scripts Configuration Editor" script.
 | 
						|
 - saving the current state of a script's GUI (its button values) to restore it
 | 
						|
   when the script is executed again.
 | 
						|
 | 
						|
Example::
 | 
						|
 | 
						|
  import Blender
 | 
						|
  from Blender import Registry
 | 
						|
 | 
						|
  # this function updates the Registry when we need to:
 | 
						|
  def update_Registry():
 | 
						|
    d = {}
 | 
						|
    d['myvar1'] = myvar1
 | 
						|
    d['myvar2'] = myvar2
 | 
						|
    d['mystr'] = mystr
 | 
						|
    # cache = True: data is also saved to a file
 | 
						|
    Blender.Registry.SetKey('MyScript', d, True)
 | 
						|
 | 
						|
  # first declare global variables that should go to the Registry:
 | 
						|
  myvar1 = 0
 | 
						|
  myvar2 = 3.2
 | 
						|
  mystr = "hello"
 | 
						|
 | 
						|
  # then check if they are already there (saved on a
 | 
						|
  # previous execution of this script):
 | 
						|
  rdict = Registry.GetKey('MyScript', True) # True to check on disk also
 | 
						|
  if rdict: # if found, get the values saved there
 | 
						|
    try:
 | 
						|
      myvar1 = rdict['myvar1']
 | 
						|
      myvar2 = rdict['myvar2']
 | 
						|
      mystr = rdict['mystr']
 | 
						|
    except: update_Registry() # if data isn't valid rewrite it
 | 
						|
 | 
						|
  # ...
 | 
						|
  # here goes the main part of the script ...
 | 
						|
  # ...
 | 
						|
 | 
						|
  # if at some point the data is changed, we update the Registry:
 | 
						|
  update_Registry()
 | 
						|
 | 
						|
@note: In Python terms, the Registry holds a dictionary of dictionaries.
 | 
						|
  Technically any Python or BPython object can be stored: there are no
 | 
						|
  restrictions, but ...
 | 
						|
 | 
						|
@note: We have a few recommendations:
 | 
						|
 
 | 
						|
  Data saved to the Registry is kept in memory, so if you decide to store large
 | 
						|
  amounts your script users should be clearly informed about it --
 | 
						|
  always keep in mind that you have no idea about their resources and the
 | 
						|
  applications they are running at a given time (unless you are the only
 | 
						|
  user), so let them decide.
 | 
						|
 | 
						|
  There are restrictions to the data that gets automatically saved to disk by
 | 
						|
  L{SetKey}(keyname, dict, True):  this feature is only meant for simple data
 | 
						|
  (bools, ints, floats, strings and dictionaries or sequences of these types).
 | 
						|
  Strings are clamped if longer than 300 characters and at most 60 elements are
 | 
						|
  allowed.  Since this is only meant for scripts configuration variables,
 | 
						|
  these are sensible restrictions, generous enough for the task.
 | 
						|
 | 
						|
  For more demanding needs, it's of course trivial to save data to another 
 | 
						|
  file or to a L{Blender Text<Text>}.
 | 
						|
"""
 | 
						|
 | 
						|
def Keys ():
 | 
						|
  """
 | 
						|
  Get all keys currently in the Registry's dictionary.
 | 
						|
  """
 | 
						|
 | 
						|
def GetKey (key, cached = False):
 | 
						|
  """
 | 
						|
  Get key 'key' from the Registry.
 | 
						|
  @type key: string
 | 
						|
  @param key: a key from the Registry dictionary.
 | 
						|
  @type cached: bool
 | 
						|
  @param cached: if True and the requested key isn't already loaded in the
 | 
						|
      Registry, it will also be searched on the user or default scripts config
 | 
						|
      data dir (config subdir in L{Blender.Get}('datadir')).
 | 
						|
  @return: the dictionary called 'key'.
 | 
						|
  """
 | 
						|
 | 
						|
def SetKey (key, dict, cache = False):
 | 
						|
  """
 | 
						|
  Store a new entry in the Registry.
 | 
						|
  @type key: string
 | 
						|
  @param key: the name of the new entry, tipically your script's name.
 | 
						|
  @type dict: dictionary
 | 
						|
  @param dict: a dict with all data you want to save in the Registry.
 | 
						|
  @type cache: bool
 | 
						|
  @param cache: if True the given key data will also be saved as a file
 | 
						|
      in the config subdir of the scripts user or default data dir (see
 | 
						|
      L{Blender.Get}).
 | 
						|
  @warn: as stated in the notes above, there are restrictions to what can
 | 
						|
      be automatically stored in config files.
 | 
						|
  """
 | 
						|
 | 
						|
def RemoveKey (key):
 | 
						|
  """
 | 
						|
  Remove the dictionary with key 'key' from the Registry.
 | 
						|
  @type key: string
 | 
						|
  @param key: the name of an existing Registry key.
 | 
						|
  """
 |