252 lines
6.5 KiB
Python
252 lines
6.5 KiB
Python
"""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
|