diff options
Diffstat (limited to 'intern/python/modules/Blender/Scene.py')
-rw-r--r-- | intern/python/modules/Blender/Scene.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/intern/python/modules/Blender/Scene.py b/intern/python/modules/Blender/Scene.py new file mode 100644 index 00000000000..a6deaeb5a46 --- /dev/null +++ b/intern/python/modules/Blender/Scene.py @@ -0,0 +1,143 @@ +"""The Blender Scene module + + This module provides *Scene* manipulation routines. + + Example:: + + from Blender import Scene + + curscene = Scene.getCurrent() + ob = curscene.getChildren()[0] # first object + newscene = Scene.New('testscene') + cam = curscene.getCurrentCamera() # get current camera object + newscene.link(ob) # link 'ob' to Scene + newscene.link(cam) + newscene.makeCurrent() # make current Scene +""" +import _Blender.Scene as _Scene + +from Object import Object +import shadow + +class Scene(shadow.shadowEx): + """Wrapper for Scene DataBlock +""" + def link(self, object): + """Links Object 'object' into Scene 'self'.""" + # This is a strange workaround; Python does not release + # 'self' (and thus self._object) when an exception in the C API occurs. + # Therefore, we catch that exception and do it ourselves.. + # Maybe Python 2.2 is able to resolve this reference dependency ? + try: + return self._object.link(object._object) + except: + del self._object + raise + + def unlink(self, object): + """Unlinks (deletes) Object 'object' from Scene.""" + ret = self._object.unlink(object._object) + return ret + + def copy(self, duplicate_objects = 1): + """Returns a copy of itself. + +The optional argument defines, how the Scene's children objects are +duplicated:: + + 0: Link Objects + 1: Link Object data + 2: Full Copy""" + return Scene(self._object.copy(duplicate_objects)) + + def update(self): + """Updates scene 'self'. + This function explicitely resorts the base list of a newly created object + hierarchy.""" + return self._object.update() + + def makeCurrent(self): + """Makes 'self' the current Scene""" + return self._object.makeCurrent() + + def frameSettings(self, start = None, end = None, current = None): + """Sets or retrieves the Scene's frame settings. +If the frame arguments are specified, they are set. +A tuple (start, end, current) is returned in any case.""" + if start and end and current: + return self._object.frameSettings(start, end, current) + else: + return self._object.frameSettings() + + def currentFrame(self, frame = None): + """If 'frame' is given, the current frame is set and returned in any case""" + if frame: + return self._object.frameSettings(-1, -1, frame) + return self._object.frameSettings()[2] + + def startFrame(self, frame = None): + """If 'frame' is given, the start frame is set and returned in any case""" + if frame: + return self._object.frameSettings(frame, -1, -1) + return self._object.frameSettings()[0] + + def endFrame(self, frame = None): + """If 'frame' is given, the end frame is set and returned in any case""" + if frame: + return self._object.frameSettings(-1, frame, -1) + return self._object.frameSettings()[1] + + def getChildren(self): + """Returns a list of the Scene's children Objects""" + return shadow._List(self._object.getChildren(), Object) + + def getCurrentCamera(self): + """Returns current active camera Object""" + cam = self._object.getCurrentCamera() + if cam: + return Object(cam) + + def setCurrentCamera(self, object): + """Sets the current active camera Object 'object'""" + return self._object.setCurrentCamera(object._object) + + def getRenderdir(self): + """Returns directory where rendered images are saved to""" + return self._object.getRenderdir(self._object) + + def getBackbufdir(self): + """Returns the Backbuffer images location""" + return self._object.getBackbufdir(self._object) + +# Module methods + +def New(name = 'Scene'): + """Creates and returns new Scene with (optionally given) name""" + return Scene(_Scene.New(name)) + +def get(name = None): + """Returns a Scene object with name 'name' if given, None if not existing, +or a list of all Scenes otherwise.""" + if name: + ob = _Scene.get(name) + if ob: + return Scene(ob) + else: + return None + else: + return shadow._List(_Scene.get(), Scene) + +Get = get # emulation + +def getCurrent(): + """Returns the currently active Scene""" + sc = Scene(_Scene.getCurrent()) + return sc + +def unlink(scene): + """Removes the Scene 'scene' from Blender""" + if scene._object.name == _Scene.getCurrent().name: + raise SystemError, "current Scene can not be removed!" + for ob in scene.getChildren(): + scene.unlink(ob) + return _Scene.unlink(scene._object) |