From 9dde3e42a7c5bc5f7896fd30e2b3a5859d6857bf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 21 Dec 2018 11:40:47 +1100 Subject: 3D View: add object color drawing option Has some advantages over existing options. - Using material links color to rendering with no way to vary colors if objects share a material. - Random gives no control, objects may randomly have the same color, duplicating an object often changes it's color. --- release/scripts/startup/bl_ui/space_view3d.py | 2 +- source/blender/draw/engines/workbench/workbench_deferred.c | 3 ++- source/blender/draw/engines/workbench/workbench_forward.c | 4 +++- source/blender/draw/engines/workbench/workbench_materials.c | 4 ++++ source/blender/makesdna/DNA_view3d_types.h | 1 + source/blender/makesrna/intern/rna_space.c | 2 ++ 6 files changed, 13 insertions(+), 3 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 85c43e78e0a..c1b4849ddad 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -4378,7 +4378,7 @@ class VIEW3D_PT_shading(Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'HEADER' bl_label = "Shading" - bl_ui_units_x = 11 + bl_ui_units_x = 12 @classmethod def get_shading(cls, context): diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c index 99c33697617..c3b469674d3 100644 --- a/source/blender/draw/engines/workbench/workbench_deferred.c +++ b/source/blender/draw/engines/workbench/workbench_deferred.c @@ -832,7 +832,8 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob) DRW_shgroup_call_object_add(material->shgrp, geom_array[i], ob); } } - else if (ELEM(wpd->shading.color_type, V3D_SHADING_SINGLE_COLOR, V3D_SHADING_RANDOM_COLOR)) { + else if (ELEM(wpd->shading.color_type, + V3D_SHADING_SINGLE_COLOR, V3D_SHADING_OBJECT_COLOR, V3D_SHADING_RANDOM_COLOR)) { /* Draw solid color */ material = get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type); if (is_sculpt_mode) { diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index 7a0a5e20864..ca02cc2b5ea 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -528,7 +528,9 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) /* Fallback from not drawn OB_TEXTURE mode or just OB_SOLID mode */ if (!is_drawn) { - if (ELEM(wpd->shading.color_type, V3D_SHADING_SINGLE_COLOR, V3D_SHADING_RANDOM_COLOR)) { + if (ELEM(wpd->shading.color_type, + V3D_SHADING_SINGLE_COLOR, V3D_SHADING_OBJECT_COLOR, V3D_SHADING_RANDOM_COLOR)) + { /* No material split needed */ struct GPUBatch *geom = DRW_cache_object_surface_get(ob); if (geom) { diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index 5360cf3683b..faca4b401dc 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -37,6 +37,10 @@ void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Mate hsv_to_rgb_v(hsv, data->diffuse_color); copy_v3_v3(data->base_color, data->diffuse_color); } + else if (color_type == V3D_SHADING_OBJECT_COLOR) { + copy_v3_v3(data->diffuse_color, ob->col); + copy_v3_v3(data->base_color, data->diffuse_color); + } else { /* V3D_SHADING_MATERIAL_COLOR */ if (mat) { diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 336dbec214b..72c9be2c12c 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -405,6 +405,7 @@ enum { V3D_SHADING_RANDOM_COLOR = 1, V3D_SHADING_SINGLE_COLOR = 2, V3D_SHADING_TEXTURE_COLOR = 3, + V3D_SHADING_OBJECT_COLOR = 4, }; /* View3DShading->background_type */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index b77eed67d21..ef1b60272f3 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -284,6 +284,7 @@ static const EnumPropertyItem rna_enum_viewport_lighting_items[] = { static const EnumPropertyItem rna_enum_shading_color_type_items[] = { {V3D_SHADING_SINGLE_COLOR, "SINGLE", 0, "Single", "Show scene in a single color"}, {V3D_SHADING_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show material color"}, + {V3D_SHADING_OBJECT_COLOR, "OBJECT", 0, "Object", "Show object color"}, {V3D_SHADING_RANDOM_COLOR, "RANDOM", 0, "Random", "Show random object color"}, {V3D_SHADING_TEXTURE_COLOR, "TEXTURE", 0, "Texture", "Show texture"}, {0, NULL, 0, NULL, NULL} @@ -819,6 +820,7 @@ static const EnumPropertyItem *rna_View3DShading_color_type_itemf( if (shading->type == OB_SOLID) { RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_SINGLE_COLOR); RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_MATERIAL_COLOR); + RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_OBJECT_COLOR); RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_RANDOM_COLOR); if (shading->light != V3D_LIGHTING_MATCAP) { RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_TEXTURE_COLOR); -- cgit v1.2.3