From f88e6763d64f7f79e13680082f30e06aea11fab0 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Wed, 26 Apr 2017 10:40:41 +0200 Subject: Depsgraph and selection: Flush selcol on Depsgraph Selection code needs to iterate over DEG_OBJECT_ITER otherwise we won't get modifiers, dupli objects, ... Also make selection respect selectability flag. Review by: Sergey Sharybin --- .../depsgraph/intern/builder/deg_builder_nodes_scene.cc | 13 ++++++++----- source/blender/depsgraph/intern/depsgraph_query.cc | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'source/blender/depsgraph/intern') diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc index 3f9febc1228..db71dad5e5f 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc @@ -43,6 +43,7 @@ extern "C" { #include "BLI_utildefines.h" #include "DNA_node_types.h" +#include "DNA_layer_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" @@ -80,12 +81,14 @@ void DepsgraphNodeBuilder::build_scene(Main *bmain, Scene *scene) } /* scene objects */ - FOREACH_SCENE_OBJECT(scene, ob) - { - /* object itself */ - build_object(scene, ob); + int selection_color = 1; + for (SceneLayer *sl = (SceneLayer *)scene->render_layers.first; sl; sl = sl->next) { + for (Base *base = (Base *)sl->object_bases.first; base; base = base->next) { + /* object itself */ + build_object(scene, base->object); + base->selcol = selection_color++; + } } - FOREACH_SCENE_OBJECT_END /* rigidbody */ if (scene->rigidbody_world) { diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc b/source/blender/depsgraph/intern/depsgraph_query.cc index 6193fd3d7cf..eff1a44be01 100644 --- a/source/blender/depsgraph/intern/depsgraph_query.cc +++ b/source/blender/depsgraph/intern/depsgraph_query.cc @@ -137,6 +137,7 @@ void DAG_objects_iterator_next(Iterator *iter) /* Flushing depsgraph data. */ ob->base_flag = (base->flag | BASE_FROM_SET) & data->flag; ob->base_collection_properties = base->collection_properties; + ob->base_selection_color = base->selcol; data->base = base; return; } -- cgit v1.2.3