blender/intern/python/modules/Blender/Scene.py
Wouter van Heyst 6b65e39a44 Revert to the FUTURE_PYTHON_API, this means:
- switching the define on in buildsystems (NaN, auto and msvc are done)
- again import _Blender, which is the C module, from the Python modules
2003-02-06 03:30:25 +00:00

144 lines
4.2 KiB
Python

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