[Bf-blender-cvs] [5bad5f996f2] blender2.8: Icons: optionally use material color
Campbell Barton
noreply at git.blender.org
Sun May 13 16:24:49 CEST 2018
Commit: 5bad5f996f219049102e1e923fe642bd4bfe3f7e
Author: Campbell Barton
Date: Sun May 13 16:21:11 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB5bad5f996f219049102e1e923fe642bd4bfe3f7e
Icons: optionally use material color
The RGB node is used if it exists,
this is multiplied by the vertex color.
===================================================================
M release/datafiles/blender_icons_geom.py
===================================================================
diff --git a/release/datafiles/blender_icons_geom.py b/release/datafiles/blender_icons_geom.py
index fa2d8273370..f983ffd356c 100644
--- a/release/datafiles/blender_icons_geom.py
+++ b/release/datafiles/blender_icons_geom.py
@@ -74,6 +74,24 @@ class TriMesh:
return me
+def object_material_colors(ob):
+ material_colors = []
+ color_default = (1.0, 1.0, 1.0, 1.0)
+ for slot in ob.material_slots:
+ material = slot.material
+ color = color_default
+ if material is not None and material.use_nodes:
+ node_tree = material.node_tree
+ if node_tree is not None:
+ color = next((
+ node.outputs[0].default_value[:]
+ for node in node_tree.nodes
+ if node.type == 'RGB'
+ ), color_default)
+ material_colors.append(color)
+ return material_colors
+
+
def object_child_map(objects):
objects_children = {}
for ob in objects:
@@ -89,7 +107,7 @@ def object_child_map(objects):
return objects_children
-def mesh_data_lists_from_mesh(me):
+def mesh_data_lists_from_mesh(me, material_colors):
me_loops = me.loops[:]
me_loops_color = me.vertex_colors.active.data[:]
me_verts = me.vertices[:]
@@ -102,11 +120,16 @@ def mesh_data_lists_from_mesh(me):
tris_colors = []
for p in me_polys:
-
# Backface culling (allows using spheres without tedious manual deleting).
if p.normal.z <= 0.0:
continue
+ material_index = p.material_index
+ if material_index < len(material_colors):
+ base_color = material_colors[p.material_index]
+ else:
+ base_color = (1.0, 1.0, 1.0, 1.0)
+
l_sta = p.loop_start
l_len = p.loop_total
loops_poly = me_loops[l_sta:l_sta + l_len]
@@ -137,7 +160,7 @@ def mesh_data_lists_from_mesh(me):
))
# Color as RGBA for each tri
tris_colors.append(
- [[int(c * 255) for c in cn.color] for cn in (c0, c1, c2)]
+ [[int(c * b * 255) for c, b in zip(cn.color, base_color)] for cn in (c0, c1, c2)]
)
i1 = i2
return (tris_coords, tris_colors)
@@ -156,7 +179,10 @@ def mesh_data_lists_from_objects(ob_parent, ob_children):
with TriMesh(ob) as me:
if has_parent:
me.transform(parent_matrix_inverted * ob.matrix_world)
- tris_coords_iter, tris_colors_iter = mesh_data_lists_from_mesh(me)
+ tris_coords_iter, tris_colors_iter = mesh_data_lists_from_mesh(
+ me,
+ object_material_colors(ob),
+ )
tris_coords.extend(tris_coords_iter)
tris_colors.extend(tris_colors_iter)
has_parent = True
More information about the Bf-blender-cvs
mailing list