blender/intern/python/modules/Blender/Lamp.py

169 lines
4.3 KiB
Python
Raw Normal View History

2002-10-12 11:37:38 +00:00
"""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
2002-10-12 11:37:38 +00:00
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