diff options
Diffstat (limited to 'intern/python/modules/Blender/Lamp.py')
-rw-r--r-- | intern/python/modules/Blender/Lamp.py | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/intern/python/modules/Blender/Lamp.py b/intern/python/modules/Blender/Lamp.py new file mode 100644 index 00000000000..ab7ed63592a --- /dev/null +++ b/intern/python/modules/Blender/Lamp.py @@ -0,0 +1,168 @@ +"""The Blender Lamp module + +This module provides control over **Lamp** objects in Blender. + +Example:: + + from Blender import Lamp + l = Lamp.New('Spot') + l.setMode('square', 'shadow') + ob = Object.New('Lamp') + ob.link(l) +""" + +import _Blender.Lamp as _Lamp +import shadow + +_validBufferSizes = [512, 768, 1024, 1536, 2560] + +def _setBufferSize(self, bufsize): + """Set the lamp's buffersize. This function makes sure that a valid +bufferSize value is set (unlike setting lamp.bufferSize directly)""" + if bufsize not in _validBufferSizes: + print """Buffer size should be one of: +%s +Setting to default 512""" % _validBufferSizes + bufsize = 512 + self._object.bufferSize = bufsize + +class Lamp(shadow.hasIPO, shadow.hasModes): + """Wrapper for Blender Lamp DataBlock + + Attributes + + mode -- Lamp mode value - see EditButtons. Do not access directly + See setMode() + + type -- Lamp type value - see EditButtons. No direct access, please. + See setType() + + col -- RGB vector (R, G, B) of lamp colour + + energy -- Intensity (float) + + dist -- clipping distance of a spot lamp or decay range + + spotSize -- float angle (in degrees) of spot cone + (between 0.0 and 180.0) + + spotBlend -- value defining the blurriness of the spot edge + + haloInt -- Halo intensity + + clipStart -- shadow buffer clipping start + + clipStart -- shadow buffer clipping end + + bias -- The bias value for the shadowbuffer routine + + softness -- The filter value for the shadow blurring + + samples -- Number of samples in shadow calculation - the + larger, the better + + bufferSize -- Size of the shadow buffer which should be one of: + [512, 768, 1024, 1536, 2560] + + haloStep -- Number of steps in halo calculation - the smaller, the + the better (and slower). A value of 0 disables shadow + halo calculation + """ + + _emulation = {'Energ' : "energy", + 'SpoSi' : "spotSize", + 'SpoBl' : "SpotBlend", + 'HaInt' : "haloInt", + 'Dist' : "dist", + 'Quad1' : "quad1", + 'Quad2' : "quad2", + } + + _setters = {'bufferSize' : _setBufferSize} + + t = _Lamp.Types + + Types = {'Lamp' : t.LOCAL, + 'Spot' : t.SPOT, + 'Sun' : t.SUN, + 'Hemi' : t.HEMI, + } + + t = _Lamp.Modes + + Modes = {'quad' : t.QUAD, + 'sphere' : t.SPHERE, + 'shadow' : t.SHAD, + 'halo' : t.HALO, + 'layer' : t.LAYER, + 'negative' : t.NEG, + 'onlyShadow' : t.ONLYSHADOW, + 'square' : t.SQUARE, + } + + del t + + def __repr__(self): + return "[Lamp \"%s\"]" % self.name + + def setType(self, name): + """Set the Lamp type of Lamp 'self'. 'name' must be a string of: + +* 'Lamp': A standard point light source + +* 'Spot': A spot light + +* 'Sun' : A unidirectional light source, very far away (like a Sun!) + +* 'Hemi': A diffuse hemispherical light source (daylight without sun)""" + + try: + self._object.type = self.Types[name] + except: + raise TypeError, "type must be one of %s" % self.Types.keys() + + def getType(self): + """Returns the lamp's type as string. See setType()""" + for k in self.Types.keys(): + if self.Types[k] == self.type: + return k + + def getMode(self): + """Returns the Lamp modes as a list of strings""" + return shadow._getModeBits(self.Modes, self._object.mode) + + def setMode(self, *args): + """Set the Lamp mode of Lamp 'self'. This function takes a variable number +of string arguments of the types listed in self.Modes. + + Example:: + + l = Lamp.New() + l.setMode('quad', 'shadow') +""" + print args + self._object.mode = shadow._setModeBits(self.Modes, args) + + def getBufferSize(self): + return self.bufferSize + +def New(type = "Lamp", name = "Lamp"): + """Returns a new Lamp datablock of type 'type' and optional name 'name' +""" + t = Lamp.Types[type] + rawlamp = _Lamp.New() + rawlamp.type = t + rawlamp.name = name + return Lamp(rawlamp) + + +def get(name = None): + """If 'name' given, the Lamp 'name' is returned if existing, 'None' otherwise. +If no name is given, a list of all Lamps is returned""" + + if name: + return Lamp(_Lamp.get(name)) + else: + return shadow._List(_Lamp.get(), Lamp) + +Types = _Lamp.Types |