Differential D11830 Diff 39222 source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
| Show First 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
| TreeDisplayViewLayer::TreeDisplayViewLayer(SpaceOutliner &space_outliner) | TreeDisplayViewLayer::TreeDisplayViewLayer(SpaceOutliner &space_outliner) | ||||
| : AbstractTreeDisplay(space_outliner) | : AbstractTreeDisplay(space_outliner) | ||||
| { | { | ||||
| } | } | ||||
| ListBase TreeDisplayViewLayer::buildTree(const TreeSourceData &source_data) | ListBase TreeDisplayViewLayer::buildTree(const TreeSourceData &source_data) | ||||
| { | { | ||||
| ListBase tree = {nullptr}; | ListBase tree = {nullptr}; | ||||
| Scene *scene = source_data.scene; | Scene *scene = source_data.scene; | ||||
| show_objects_ = !(space_outliner_.filter & SO_FILTER_NO_OBJECT); | show_objects_ = !(space_outliner_.filter & SO_FILTER_NO_OBJECT); | ||||
| const bool show_children = (space_outliner_.filter & SO_FILTER_NO_CHILDREN) == 0; | |||||
| for (auto *view_layer : ListBaseWrapper<ViewLayer>(scene->view_layers)) { | for (auto *view_layer : ListBaseWrapper<ViewLayer>(scene->view_layers)) { | ||||
| view_layer_ = view_layer; | |||||
| if (space_outliner_.filter & SO_FILTER_NO_VIEW_LAYERS) { | if (space_outliner_.filter & SO_FILTER_NO_VIEW_LAYERS) { | ||||
| if (view_layer != source_data.view_layer) { | if (view_layer != source_data.view_layer) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| } | |||||
| add_view_layer(scene, &tree, (TreeElement *)nullptr); | |||||
| } | |||||
| else { | |||||
| TreeElement &te_view_layer = *outliner_add_element( | TreeElement &te_view_layer = *outliner_add_element( | ||||
| &space_outliner_, &tree, scene, nullptr, TSE_R_LAYER, 0); | &space_outliner_, &tree, scene, nullptr, TSE_R_LAYER, 0); | ||||
| TREESTORE(&te_view_layer)->flag &= ~TSE_CLOSED; | TREESTORE(&te_view_layer)->flag &= ~TSE_CLOSED; | ||||
| te_view_layer.name = view_layer->name; | te_view_layer.name = view_layer->name; | ||||
| te_view_layer.directdata = view_layer; | te_view_layer.directdata = view_layer; | ||||
| view_layer_ = view_layer; | |||||
| add_view_layer(scene, &te_view_layer.subtree, &te_view_layer); | |||||
| } | |||||
| } | |||||
HooglyBoogly: This is much simpler I think:
```
if (space_outliner_.filter & SO_FILTER_NO_VIEW_LAYERS) {… | |||||
| return tree; | |||||
| } | |||||
| void TreeDisplayViewLayer::add_view_layer(Scene *scene, ListBase *tree, TreeElement *parent) | |||||
HooglyBooglyUnsubmitted Not Done Inline ActionsIn other functions in this file, the parameters that aren't expected to be null are passed as references, we should do that here too. HooglyBoogly: In other functions in this file, the parameters that aren't expected to be null are passed as… | |||||
| { | |||||
| const bool show_children = (space_outliner_.filter & SO_FILTER_NO_CHILDREN) == 0; | |||||
| if (space_outliner_.filter & SO_FILTER_NO_COLLECTION) { | if (space_outliner_.filter & SO_FILTER_NO_COLLECTION) { | ||||
| /* Show objects in the view layer. */ | /* Show objects in the view layer. */ | ||||
| for (Base *base : List<Base>(view_layer_->object_bases)) { | for (Base *base : List<Base>(view_layer_->object_bases)) { | ||||
| TreeElement *te_object = outliner_add_element(&space_outliner_, | TreeElement *te_object = outliner_add_element( | ||||
| &te_view_layer.subtree, | &space_outliner_, tree, base->object, parent, TSE_SOME_ID, 0); | ||||
| base->object, | |||||
| &te_view_layer, | |||||
| TSE_SOME_ID, | |||||
| 0); | |||||
| te_object->directdata = base; | te_object->directdata = base; | ||||
| } | } | ||||
| if (show_children) { | if (show_children) { | ||||
| outliner_make_object_parent_hierarchy(&tree); | outliner_make_object_parent_hierarchy(tree); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| /* Show collections in the view layer. */ | /* Show collections in the view layer. */ | ||||
| TreeElement &ten = *outliner_add_element(&space_outliner_, | TreeElement &ten = *outliner_add_element( | ||||
| &te_view_layer.subtree, | &space_outliner_, tree, scene, parent, TSE_VIEW_COLLECTION_BASE, 0); | ||||
| source_data.scene, | |||||
| &te_view_layer, | |||||
| TSE_VIEW_COLLECTION_BASE, | |||||
| 0); | |||||
| ten.name = IFACE_("Scene Collection"); | ten.name = IFACE_("Scene Collection"); | ||||
| TREESTORE(&ten)->flag &= ~TSE_CLOSED; | TREESTORE(&ten)->flag &= ~TSE_CLOSED; | ||||
| add_view_layer(ten.subtree, ten); | add_view_layer_content(ten.subtree, ten); | ||||
| if (show_children) { | if (show_children) { | ||||
| add_layer_collection_objects_children(ten); | add_layer_collection_objects_children(ten); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return tree; | void TreeDisplayViewLayer::add_view_layer_content(ListBase &tree, TreeElement &parent) | ||||
| } | |||||
| void TreeDisplayViewLayer::add_view_layer(ListBase &tree, TreeElement &parent) | |||||
| { | { | ||||
| /* First layer collection is for master collection, don't show it. */ | /* First layer collection is for master collection, don't show it. */ | ||||
| LayerCollection *lc = static_cast<LayerCollection *>(view_layer_->layer_collections.first); | LayerCollection *lc = static_cast<LayerCollection *>(view_layer_->layer_collections.first); | ||||
| if (lc == nullptr) { | if (lc == nullptr) { | ||||
| return; | return; | ||||
| } | } | ||||
| add_layer_collections_recursive(tree, lc->layer_collections, parent); | add_layer_collections_recursive(tree, lc->layer_collections, parent); | ||||
| ▲ Show 20 Lines • Show All 174 Lines • Show Last 20 Lines | |||||
This is much simpler I think:
if (space_outliner_.filter & SO_FILTER_NO_VIEW_LAYERS) { view_layer_ = source_data.view_layer; add_view_layer(scene, &tree, nullptr); } else { for (auto *view_layer : ListBaseWrapper<ViewLayer>(scene->view_layers)) { view_layer_ = view_layer; TreeElement &te_view_layer = *outliner_add_element( &space_outliner_, &tree, scene, nullptr, TSE_R_LAYER, 0); TREESTORE(&te_view_layer)->flag &= ~TSE_CLOSED; te_view_layer.name = view_layer->name; te_view_layer.directdata = view_layer; add_view_layer(scene, &te_view_layer.subtree, &te_view_layer); } }