"""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)