44 void object_tree_elements_lookup_create_recursive(
TreeElement *te_parent);
45 void make_object_parent_hierarchy_collections();
70 view_layer_ = view_layer;
86 tselem->
flag &= ~TSE_CLOSED;
89 te_view_layer.
name = view_layer->name;
92 add_view_layer(*scene, te_view_layer.
subtree, &te_view_layer);
130 add_layer_collection_objects(ten.subtree, *lc, ten);
133 add_layer_collection_objects_children(ten);
138void TreeDisplayViewLayer::add_layer_collections_recursive(
ListBase &
tree,
140 TreeElement &parent_ten)
156 tselem->
flag &= ~TSE_CLOSED;
161 if (!exclude && show_objects_) {
162 add_layer_collection_objects(ten->subtree, *lc, *ten);
167void TreeDisplayViewLayer::add_layer_collection_objects(
ListBase &
tree,
176 te_object->directdata = base;
180void TreeDisplayViewLayer::add_layer_collection_objects_children(TreeElement &collection_tree_elem)
184 child_builder(collection_tree_elem);
198 : outliner_(space_outliner)
204 object_tree_elements_lookup_create_recursive(&collection_tree_elem);
205 make_object_parent_hierarchy_collections();
211void ObjectsChildrenBuilder::object_tree_elements_lookup_create_recursive(
TreeElement *te_parent)
217 object_tree_elements_lookup_create_recursive(te);
227 object_tree_elements_lookup_create_recursive(te);
236void ObjectsChildrenBuilder::make_object_parent_hierarchy_collections()
241 if (child->
parent ==
nullptr) {
245 Vector<TreeElement *> &child_ob_tree_elements = item.value;
246 Vector<TreeElement *> *parent_ob_tree_elements = object_tree_elements_map_.
lookup_ptr(
248 if (parent_ob_tree_elements ==
nullptr) {
252 for (TreeElement *parent_ob_tree_element : *parent_ob_tree_elements) {
253 TreeElement *parent_ob_collection_tree_element =
nullptr;
258 parent_ob_collection_tree_element = parent_ob_tree_element->parent;
259 while (!
ELEM(
TREESTORE(parent_ob_collection_tree_element)->type,
263 parent_ob_collection_tree_element = parent_ob_collection_tree_element->parent;
266 for (TreeElement *child_ob_tree_element : child_ob_tree_elements) {
267 if (child_ob_tree_element->parent == parent_ob_collection_tree_element) {
269 BLI_remlink(&parent_ob_collection_tree_element->subtree, child_ob_tree_element);
270 BLI_addtail(&parent_ob_tree_element->subtree, child_ob_tree_element);
271 child_ob_tree_element->parent = parent_ob_tree_element;
282 &parent_ob_tree_element->subtree,
283 reinterpret_cast<ID *
>(child),
285 parent_ob_tree_element,
290 child_ob_tree_elements.append(child_ob_tree_element);
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define ID_IS_EDITABLE(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
Object groups, one object can be in many groups at once.
@ LAYER_COLLECTION_EXCLUDE
@ TSE_VIEW_COLLECTION_BASE
@ SO_FILTER_NO_VIEW_LAYERS
@ SO_FILTER_NO_COLLECTION
const Value * lookup_ptr(const Key &key) const
MutableMapItem< Object *, TreeChildren > MutableItem
Value & lookup_or_add(const Key &key, const Value &value)
void append(const T &value)
Base Class For Tree-Displays.
SpaceOutliner & space_outliner_
static TreeElement * add_element(SpaceOutliner *space_outliner, ListBase *lb, ID *owner_id, void *create_data, TreeElement *parent, short type, short index, const bool expand=true)
void operator()(TreeElement &collection_tree_elem)
~ObjectsChildrenBuilder()=default
ObjectsChildrenBuilder(SpaceOutliner &space_outliner)
ListBase build_tree(const TreeSourceData &source_data) override
TreeDisplayViewLayer(SpaceOutliner &space_outliner)
bool supports_mode_column() const override
GPU_SHADER_INTERFACE_INFO(depth_2d_update_iface, "").smooth(Type fragColor push_constant(Type::VEC2, "extent") .push_constant(Type source_data
ListBaseWrapper< T > List
void outliner_make_object_parent_hierarchy(ListBase *lb)
@ TE_CHILD_NOT_IN_COLLECTION
ListBaseWrapperTemplate< ListBase, T > ListBaseWrapper
ListBase layer_collections
struct Collection * collection
ListBase layer_collections
The data to build the tree from.
Establish and manage Outliner trees for different display modes.