Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-05-13 17:21:11 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-13 17:24:38 +0300
commit5bad5f996f219049102e1e923fe642bd4bfe3f7e (patch)
tree2524f2b40a4201fe0fa4390edd2f3e7d3324317c /release/datafiles/blender_icons_geom.py
parent94a62853ae7d3f5fc118b333459941891cdbd1a4 (diff)
Icons: optionally use material color
The RGB node is used if it exists, this is multiplied by the vertex color.
Diffstat (limited to 'release/datafiles/blender_icons_geom.py')
-rw-r--r--release/datafiles/blender_icons_geom.py34
1 files changed, 30 insertions, 4 deletions
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