Scene Refactor Proposal
This page proposes additions to the existing BPY API, as discussed by Willain and Campbell (31/08/2006) Variable names may change, existing functionality may eventually be depricated (after 2.43 release) and only these functions supported. - for now we will not break compatibility.
The Super Iterator
This came up when dealing with objects and listbases. scn.getChildren() scn.Link() and scn.Unlink() is not an ideal way to deal with objects. A thin wrapper for listbases is very efficient and fits nicely into the python API as a set() like pyType.
a new iterator has been added to the scene called objects. This allows you do iterate through the scenes objects and has functions for adding and removing.
for ob in scn.objects: print ob.name scn.objects.add(my_object) # Add an existing object, like scn.link() scn.objects.remove(my_object) # Remove an existing object, like scn.Unlink() ob= scn.objects.new(obdata) # make a new object from obdata, replaces the existing 2-3 step method and avoids objects having no data. ob= scn.objects.new(Mesh.Primitives.Cube(2.0))
ob= scn.objects.active #get the active object, like ob= scn.getActiveObject() ob= scn.objects['MyObject'] # get an object from the scene by name, must not be confused with Object.Get('MyObject') scn.objects.remove('myObject') # remove the object by name rather then getting the obdata first. scn.objects.extend([ob1, ob2, ob3]) # add objects at once.
The advantage of this is that it separates all objects into a part of scene and makes the scenes functions less polluted.
scn.objects.selected # iterator that iterates over selected objects, inherits most functionality from scn.objects scn.objects.context # iterator that iterates over visible selected objects.
2 new iterator that will be added
- Blender.scenes # will be "scenes" where "from Blender import *" is used.
active= Blender.scenes.active # consistent with scns.objects.active for scn in scenes: print scn.name
Other iterators exist- group.objects, object.modifiers, mesh.verts, - we will try and make these iterators be consistent where possible.
More could be added but for now this is what we will add in the short term.
A problem with the existing API is that data access is mixed in. A new module will be added - name is undecieded... but for now we'll call it "Data"
This would eventuallly replace the Get() functions
we would have access to .meshes, .worlds etc, These would be thin wrappers around G.main listbases.
Eventually .add() .remove() etc could be added also where applicable.
It may be that this is added as a part of Blender.Library