35 ObjectTreeElementsMap object_tree_elements_map_;
52 void object_tree_elements_lookup_create_recursive(
TreeElement *te_parent);
53 void make_object_parent_hierarchy_collections();
54 void add_object_and_parents_in_order(
Object *ob);
79 view_layer_ = view_layer;
98 te_view_layer.
name = view_layer->name;
101 add_view_layer(*scene, te_view_layer.
subtree, &te_view_layer);
139 add_layer_collection_objects(ten.subtree, *lc, ten);
142 add_layer_collection_objects_children(ten);
147void TreeDisplayViewLayer::add_layer_collections_recursive(
ListBase &
tree,
165 tselem->
flag &= ~TSE_CLOSED;
170 if (!exclude && show_objects_) {
171 add_layer_collection_objects(ten->subtree, *lc, *ten);
176void TreeDisplayViewLayer::add_layer_collection_objects(
ListBase &
tree,
185 te_object->directdata = base;
189void TreeDisplayViewLayer::add_layer_collection_objects_children(
TreeElement &collection_tree_elem)
193 child_builder(collection_tree_elem);
207 : outliner_(space_outliner)
213 object_tree_elements_lookup_create_recursive(&collection_tree_elem);
214 make_object_parent_hierarchy_collections();
220void ObjectsChildrenBuilder::object_tree_elements_lookup_create_recursive(
TreeElement *te_parent)
226 object_tree_elements_lookup_create_recursive(te);
234 add_object_and_parents_in_order(ob);
236 object_tree_elements_lookup_create_recursive(te);
245void ObjectsChildrenBuilder::make_object_parent_hierarchy_collections()
249 for (
Object *ob : ordered_objects_) {
250 if (ob->parent ==
nullptr) {
254 Vector<TreeElement *> *parent_ob_tree_elements = object_tree_elements_map_.lookup_ptr(
256 Vector<TreeElement *> *child_ob_tree_elements = object_tree_elements_map_.lookup_ptr(ob);
258 if (!parent_ob_tree_elements || !child_ob_tree_elements) {
262 for (TreeElement *parent_ob_tree_element : *parent_ob_tree_elements) {
263 TreeElement *parent_ob_collection_tree_element =
nullptr;
268 parent_ob_collection_tree_element = parent_ob_tree_element->parent;
269 while (!
ELEM(
TREESTORE(parent_ob_collection_tree_element)->type,
273 parent_ob_collection_tree_element = parent_ob_collection_tree_element->parent;
276 for (TreeElement *child_ob_tree_element : *child_ob_tree_elements) {
277 if (child_ob_tree_element->parent == parent_ob_collection_tree_element) {
279 BLI_remlink(&parent_ob_collection_tree_element->subtree, child_ob_tree_element);
280 BLI_addtail(&parent_ob_tree_element->subtree, child_ob_tree_element);
281 child_ob_tree_element->parent = parent_ob_tree_element;
292 &parent_ob_tree_element->subtree,
293 reinterpret_cast<ID *
>(ob),
295 parent_ob_tree_element,
300 child_ob_tree_elements->append(child_ob_tree_element);
306void ObjectsChildrenBuilder::add_object_and_parents_in_order(
Object *ob)
309 add_object_and_parents_in_order(parent);
311 if (objects_in_ordered_objects_.add(ob)) {
312 ordered_objects_.append(ob);
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(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(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.
struct CollectionObject CollectionObject
@ LAYER_COLLECTION_EXCLUDE
struct LayerCollection LayerCollection
@ TSE_VIEW_COLLECTION_BASE
struct TreeStoreElem TreeStoreElem
@ SO_FILTER_NO_VIEW_LAYERS
@ SO_FILTER_NO_COLLECTION
Value & lookup_or_add(const Key &key, const Value &value)
void append(const T &value)
AbstractTreeDisplay(SpaceOutliner &space_outliner)
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::float2_t, "extent") .push_constant(Type source_data
ListBaseWrapper< T > List
@ TE_CHILD_NOT_IN_COLLECTION
void outliner_make_object_parent_hierarchy(ListBase *lb)
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.