def __init__(self):
self.SPOT = int()
self.SUN = int()
self.NORMAL = int()
self.HEMI = int()
self.type = None
self.energy = float()
self.shadowClipStart = float()
self.shadowClipEnd = float()
self.shadowFrustumSize = float()
self.shadowBindId = int()
self.shadowMapType = int()
self.shadowBias = float()
self.shadowBleedBias = float()
self.useShadow = bool()
self.shadowColor = mathutils.Color()
self.shadowMatrix = mathutils.Matrix()
self.distance = float()
self.color = [0,0,0]
self.lin_attenuation = float()
self.quad_attenuation = float()
self.spotsize = float()
self.spotblend = float()
self.staticShadow = bool()
python类Color()的实例源码
def __init__(self, op='', data=0.0, inputs=()):
if op:
self.type = 'op'
if type(op) == Color:
print(end='')
self.op = op
self.value = data
self.inputs = inputs
if op == 'mixC' and inputs[1] == None:
pass
else:
self.type = 'val'
self.value = data
self.exported = None # exported blender node
def __init__(self):
self.finalcolorc = Holder(Node(data=Color()))
self.finalcolora = Holder(Node(data=0.0))
self.vertexcolorc = Holder(Node(data=Color()))
self.vertexcolora = Holder(Node(data=0.0))
self.reg1c = Holder(Node(data=Color()))
self.reg1a = Holder(Node(data=0.0))
self.reg2c = Holder(Node(data=Color()))
self.reg2a = Holder(Node(data=0.0))
self.reg3c = Holder(Node(data=Color()))
self.reg3a = Holder(Node(data=0.0))
self.texcoords = []
self.vcolorindex = 0
self.textures = [None]*8
self.konsts = [None]*8
self.flag = 0 # scenegraph use
# those functions are used for node computation
def __init__(self):
# Index of the vertex in the Blender buffer
self.blenderIndex = None
# Position of the vertex: Vector((0.0, 0.0, 0.0))
self.pos = None
# Normal of the vertex: Vector((0.0, 0.0, 0.0))
self.normal = None
# Color of the vertex: (0, 0, 0, 0)...(255, 255, 255, 255)
self.color = None
# UV coordinates of the vertex: Vector((0.0, 0.0))..Vector((1.0, 1.0))
self.uv = None
# UV2 coordinates of the vertex: Vector((0.0, 0.0))..Vector((1.0, 1.0))
self.uv2 = None
# Tangent of the vertex: Vector((0.0, 0.0, 0.0, 0.0))
self.tangent = None
# Bitangent of the vertex: Vector((0.0, 0.0, 0.0))
self.bitangent = None
# Bones weights: list of tuple(boneIndex, weight)
self.weights = None
# returns True is this vertex is a changed morph of vertex 'other'
def light(self, en, scene, name):
"""
en: dxf entity
name: ignored; exists to make separate and merged objects methods universally callable from _call_types()
Creates, links and returns a new light object depending on the type and color of the dxf entity.
"""
# light_type : distant = 1; point = 2; spot = 3
if self.import_light:
type_map = ["NONE", "SUN", "POINT", "SPOT"]
layer = self.dwg.layers[en.layer]
lamp = bpy.data.lamps.new(en.name, type_map[en.light_type])
if en.color != 256:
aci = en.color
else:
aci = layer.color
c = dxfgrabber.aci_to_true_color(aci)
lamp.color = Color(c.rgb())
if en.light_type == 3:
lamp.spot_size = en.hotspot_angle
o = bpy.data.objects.new(en.name, lamp)
o.location = self.proj(en.position)
dir = self.proj(en.target) - self.proj(en.position)
o.rotation_quaternion = dir.rotation_difference(Vector((0, 0, -1)))
scene.objects.link(o)
return o
def random_id(length=8):
""" Generates a random alphanumeric id string.
"""
tlength = int(length / 2)
rlength = int(length / 2) + int(length % 2)
chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
text = ""
for i in range(0, rlength):
text += random.choice(chars)
text += str(hex(int(time.time())))[2:][-tlength:].rjust(tlength, '0')[::-1]
return text
#=============================================
# Color correction functions
#=============================================
def DrawLeftText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x, yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt, yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Draw text (Right position)
def DrawRightText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x - blf.dimensions(font_id, text)[0], yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt - blf.dimensions(font_id, text)[0], yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Opengl draws
def update_color_1(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 1"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color1
update_caller(self, input_name="Color 1")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 1"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color1
update_caller(self, input_name="Color 1")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 1"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color1
update_caller(self, input_name="Color 1")
return None
def update_color_2(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 2"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color2
update_caller(self, input_name="Color 2")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 2"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color2
update_caller(self, input_name="Color 2")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 2"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color2
update_caller(self, input_name="Color 2")
return None
def update_color_3(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 3"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color3
update_caller(self, input_name="Color 3")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 3"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color3
update_caller(self, input_name="Color 3")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 3"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color3
update_caller(self, input_name="Color 3")
return None
def update_color_4(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 4"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color4
update_caller(self, input_name="Color 4")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 4"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color4
update_caller(self, input_name="Color 4")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 4"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color4
update_caller(self, input_name="Color 4")
return None
def update_color_5(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 5"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color5
update_caller(self, input_name="Color 5")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 5"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color5
update_caller(self, input_name="Color 5")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 5"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color5
update_caller(self, input_name="Color 5")
return None
def draw(self, context):
settings = context.material.pbr_export_settings
self.layout.label('Base Color:')
box = self.layout.box()
box.prop(settings, 'base_color_factor', text='Factor')
box.prop_search(settings, 'base_color_texture', bpy.data, 'textures')
self.layout.label('Roughness:')
box = self.layout.box()
box.prop(settings, 'metallic_factor', text='Metallic')
box.prop(settings, 'roughness_factor', text='Factor')
box.prop_search(settings, 'metal_roughness_texture', bpy.data, 'textures')
self.layout.label('Emissive:')
box = self.layout.box()
box.prop(settings, 'emissive_factor', text='Factor')
box.prop_search(settings, 'emissive_texture', bpy.data, 'textures')
self.layout.prop_search(settings, 'normal_texture', bpy.data, 'textures')
self.layout.prop_search(settings, 'occlusion_texture', bpy.data, 'textures')
def light(self, en, scene, name):
"""
en: dxf entity
name: ignored; exists to make separate and merged objects methods universally callable from _call_types()
Creates, links and returns a new light object depending on the type and color of the dxf entity.
"""
# light_type : distant = 1; point = 2; spot = 3
if self.import_light:
type_map = ["NONE", "SUN", "POINT", "SPOT"]
layer = self.dwg.layers[en.layer]
lamp = bpy.data.lamps.new(en.name, type_map[en.light_type])
if en.color != 256:
aci = en.color
else:
aci = layer.color
c = dxfgrabber.aci_to_true_color(aci)
lamp.color = Color(c.rgb())
if en.light_type == 3:
lamp.spot_size = en.hotspot_angle
o = bpy.data.objects.new(en.name, lamp)
o.location = self.proj(en.position)
dir = self.proj(en.target) - self.proj(en.position)
o.rotation_quaternion = dir.rotation_difference(Vector((0, 0, -1)))
scene.objects.link(o)
return o
def update_color_1(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 1"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color1
update_caller(self, input_name="Color 1")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 1"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color1
update_caller(self, input_name="Color 1")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 1"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color1
update_caller(self, input_name="Color 1")
return None
def update_color_2(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 2"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color2
update_caller(self, input_name="Color 2")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 2"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color2
update_caller(self, input_name="Color 2")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 2"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color2
update_caller(self, input_name="Color 2")
return None
def update_color_3(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 3"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color3
update_caller(self, input_name="Color 3")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 3"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color3
update_caller(self, input_name="Color 3")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 3"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color3
update_caller(self, input_name="Color 3")
return None
def update_color_4(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 4"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color4
update_caller(self, input_name="Color 4")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 4"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color4
update_caller(self, input_name="Color 4")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 4"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color4
update_caller(self, input_name="Color 4")
return None
def update_color_5(self, context):
for world in bpy.data.worlds:
if world.node_tree is not None:
for node in world.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 5"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color5
update_caller(self, input_name="Color 5")
for mat in bpy.data.materials:
if mat.node_tree is not None:
for node in mat.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 5"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color5
update_caller(self, input_name="Color 5")
for lamps in bpy.data.lamps:
if lamps.node_tree is not None:
for node in lamps.node_tree.nodes:
if node.bl_idname == 'spectrum_palette.node':
node.outputs["Color 5"].default_value = bpy.context.scene.kaleidoscope_spectrum_props.color5
update_caller(self, input_name="Color 5")
return None
def shoot(self):
obj = self.owner
vec = mathutils.Vector((0, 1, 0))
sender = obj
previous = obj.worldPosition
lastHitObject = obj
while True:
mirror, location, normal = sender.rayCast(sender.worldPosition + vec, None, 60)
bge.render.drawLine(previous, location, mathutils.Color((255, 0, 0)))
previous = location
if mirror != None and mirror.name.find("Mirror") != -1:
lastHitObject = mirror
vec = vec.reflect(normal)
print(mirror)
sender = mirror
else:
#At this point mirror is the last object hit (not an actual mirror)
print("Reached end")
#print(mirror)
break
print("Last Hit Object:")
print(lastHitObject)
def DrawCenterText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x - blf.dimensions(font_id, text)[0] / 2, yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt - blf.dimensions(font_id, text)[0] / 2, yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Draw text (Left position)
def DrawLeftText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x, yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt, yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Draw text (Right position)
def DrawRightText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x - blf.dimensions(font_id, text)[0], yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt - blf.dimensions(font_id, text)[0], yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Opengl draws
def DrawCenterText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x - blf.dimensions(font_id, text)[0] / 2, yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt - blf.dimensions(font_id, text)[0] / 2, yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Draw text (Left position)
def DrawLeftText(text, xt, yt, Size, Color, self):
font_id = 0
# Offset Shadow
Sshadow_x = 2
Sshadow_y = -2
blf.size(font_id, Size, 72)
blf.position(font_id, xt + Sshadow_x, yt + Sshadow_y, 0)
bgl.glColor4f(0.0, 0.0, 0.0, 1.0)
blf.draw(font_id, text)
blf.position(font_id, xt, yt, 0)
if Color is not None:
mColor = mathutils.Color((Color[0], Color[1], Color[2]))
bgl.glColor4f(mColor.r, mColor.g, mColor.b, 1.0)
else:
bgl.glColor4f(1.0, 1.0, 1.0, 1.0)
blf.draw(font_id, text)
# Draw text (Right position)
def __init__(self):
self.shader = BL_Shader()
self.blending = (0,0)
self.alpha = float()
self.hardness = int()
self.emit = float()
self.ambient = float()
self.specularAlpha = float()
self.specularIntensity = float()
self.diffuseIntensity = float()
self.specularColor = mathutils.Color()
self.diffuseColor = mathutils.Color()
self.textures = BL_Texture()
def __init__(self):
self.KX_MIST_QUADRATIC = int()
self.KX_MIST_LINEAR = int()
self.KX_MIST_INV_QUADRATIC = int()
self.mistEnable = bool()
self.mistStart = float()
self.mistDistance = float()
self.mistIntensity = float()
self.mistType = None
self.mistColor = mathutils.Color()
self.horizonColor = mathutils.Color()
self.zenithColor = mathutils.Color()
self.ambientColor = mathutils.Color()
self.exposure = float()
self.range = float()
def __add__(self, other):
if not isinstance(other, Node):
other = Node(data=other)
if other.type == 'val':
if other.value in (0, Color((0,0,0)), Vector((0,0,0))):
return self # useless addition if other is zero
if self.type == 'val':
if self.value in (0, Color((0,0,0)), Vector((0,0,0))):
return other # useless addition if other is zero
return Node('ADD', inputs=(self, other))
def __mul__(self, other):
if not isinstance(other, Node):
other = Node(data=other)
if other.type == 'val':
if other.value in (1, Color((1,1,1)), Vector((1,1,1))):
return self # useless addition if other is zero
if self.type == 'val':
if self.value in (1, Color((1,1,1)), Vector((1,1,1))):
return other # useless addition if other is zero
return Node('MULTIPLY', inputs=(self, other))