diff options
Diffstat (limited to 'intern/python/modules/Blender/Material.py')
-rw-r--r-- | intern/python/modules/Blender/Material.py | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/intern/python/modules/Blender/Material.py b/intern/python/modules/Blender/Material.py new file mode 100644 index 00000000000..f24541f0f03 --- /dev/null +++ b/intern/python/modules/Blender/Material.py @@ -0,0 +1,251 @@ +"""The Blender Material module + + This module provides access to *Material* datablocks + + Example:: + + from Blender import Material, NMesh, Object, Scene + m = Material.New() # create free Material datablock + m.rgbCol = (1.0, 0.0, 0.3) # assign RGB values + mesh = NMesh.GetRaw() # get new mesh + mesh.addMaterial(m) # add material to mesh + object = Object.New('Mesh') # create new object + object.link(mesh) # link mesh data to object + Scene.getCurrent().link(ob) # link object to current scene +""" + +import _Blender.Material as _Material +import shadow +#import Blender.Curve as Curve + +# These are getters and setters needed for emulation + +def _getRGB(obj): + return (obj.R, obj.G, obj.B) + +def _getSpec(obj): + return (obj.specR, obj.specG, obj.specB) + +def _getMir(obj): + return (obj.mirR, obj.mirG, obj.mirB) + +def _setRGB(obj, rgb): + obj.R, obj.G, obj.B = rgb + +def _setSpec(obj, rgb): + obj.specR, obj.specG, obj.specB = rgb + +def _setMir(obj, rgb): + obj.mirR, obj.mirG, obj.mirB = rgb + + + +class Material(shadow.hasIPO, shadow.hasModes): + """Material DataBlock object + + See example in the Material module documentation on how to create + an instance of a Material object. + + Attributes + + The following attributes are colour vectors (r, g, b) + + rgbCol -- The color vector (R, G, B). + The RGB values can be accessed individually as .R, .G and .B + + specCol -- Specularity color vector (specR, specG, specG) + + mirCol -- Mirror color vector (mirR, mirG, mirB) + + The following are float values: + + alpha -- The transparency + + ref -- Reflectivity float value + + emit -- Emit intensity value + + amb -- Ambient intensity value + + spec -- specularity value + + specTransp -- Specular transpareny + + haloSize -- Halo size + + mode -- The material mode bit vector - see Material.ModeFlags + + hard -- The hardness value + +""" + + _emulation = {'Mode' : "mode", + 'Ref' : "ref", + 'HaSize' : "haloSize", + 'SpTra' : "specTransp", + 'Alpha' : "alpha", + 'Spec' : "spec", + 'Emit' : "emit", + 'Hard' : "hard", + 'Amb' : "amb", + } + + _getters = {'rgbCol' : _getRGB, + 'specCol' : _getSpec, + 'mirCol' : _getMir, + } + + _setters = {'rgbCol' : _setRGB, + 'specCol' : _setSpec, + 'mirCol' : _setMir, + } + + t = _Material.Modes + + Modes = {'traceable' : t.TRACEABLE, + 'shadow' : t.SHADOW, + 'shadeless' : t.SHADELESS, + 'wire' : t.WIRE, + 'vcolLight' : t.VCOL_LIGHT, + 'vcolPaint' : t.VCOL_PAINT, + 'zTransp' : t.ZTRANSP, + 'zInvert' : t.ZINVERT, + 'onlyShadow': t.ONLYSHADOW, + 'star' : t.STAR, + 'texFace' : t.TEXFACE, + 'noMist' : t.NOMIST, + } + + t = _Material.HaloModes + + HaloModes = { "rings" : t.RINGS, + "lines" : t.LINES, + "tex" : t.TEX, + "haloPuno": t.PUNO, + "shade" : t.SHADE, + "flare" : t.FLARE, + } + + + del t + + def setMode(self, *args): + """Set the mode of 'self'. This function takes a variable number +of string arguments of the types listed in self.Modes. + + Example:: + + m = Material.New() + m.setMode('shadow', 'wire') +""" + flags = 0 + try: + for a in args: + flags |= self.Modes[a] + except: + raise TypeError, "mode must be one of" % self.Modes.keys() + self._object.mode = flags + + def setHaloMode(self, *args): + """Sets the material to Halo mode. +This function takes a variable number of string arguments of the types +listed in self.HaloModes""" + flags = _Material.Modes.HALO + + try: + for a in args: + flags |= self.HaloModes[a] + except: + raise TypeError, "mode must be one of" % self.HaloModes.keys() + self._object.mode = flags + + +class ModeFlags: + """Readonly dictionary + +...containing Material mode bitvectors: + +|------------------------------------------| +| Name | Description | +|==========================================| +| TRACEABLE | visible for shadow lamps | +|------------------------------------------| +| SHADOW | cast shadow | +|------------------------------------------| +| SHADELESS | do not shade | +|------------------------------------------| +| WIRE | draw in wireframe | +|------------------------------------------| +| VCOL_LIGHT | use vertex colors | +| | with lighting | +|------------------------------------------| +| VCOL_PAINT | vertex colours | +|------------------------------------------| +| HALO | Halo material | +|------------------------------------------| +| ZTRANSP | Z transparency | +|------------------------------------------| +| ZINVERT | invert Z | +|------------------------------------------| +| ONLYSHADOW | only shadow, but | +| | don't render | +|------------------------------------------| +| STAR | ? | +|------------------------------------------| +| TEXFACE | textured faces | +|------------------------------------------| +| NOMIST | disable mist | +|------------------------------------------| + +These mode flags directly represent the buttons in the Material parameters +window (EditButtons) + +Example:: + + # be 'm' a material + from Blender.Material.Modes import * + m.mode |= (TRACEABLE + WIRE) # Set 'wire' and 'traceable' flagsd + m.mode &= ~SHADELESS # clear 'shadeless' flag +""" + + t = _Material.Modes + TRACEABLE = t.TRACEABLE + SHADOW = t.SHADOW + SHADELESS = t.SHADELESS + WIRE = t.WIRE + VCOL_LIGHT = t.VCOL_LIGHT + VCOL_PAINT = t.VCOL_PAINT + HALO = t.HALO + ZTRANSP = t.ZTRANSP + ZINVERT = t.ZINVERT + ONLYSHADOW = t.ONLYSHADOW + STAR = t.STAR + TEXFACE = t.TEXFACE + NOMIST = t.NOMIST + del t + +# override: +ModeFlags = _Material.Modes + +def get(name = None): + """If 'name' given, the Material 'name' is returned if existing, 'None' otherwise. +If no name is given, a list of all Materials is returned""" + if name: + return Material(_Material.get(name)) + else: + return shadow._List(_Material.get(), Material) + +Get = get # emulation + +def New(name = None): + """Creates a new, empty Material and returns it. + +Example:: + + from Blender import Material + mat = Material.New() +""" + mat = Material(_Material.New()) + if name: + mat.name = name + return mat |