35 #include "../outliner_intern.h"
41 template<
typename T>
using List = ListBaseWrapper<T>;
57 void object_tree_elements_lookup_create_recursive(
TreeElement *te_parent);
58 void make_object_parent_hierarchy_collections();
98 add_view_layer(ten.
subtree, ten);
100 add_layer_collection_objects_children(ten);
117 add_layer_collection_objects(
tree, *lc, parent);
121 void TreeDisplayViewLayer::add_layer_collections_recursive(
ListBase &
tree,
137 ten->
name =
id->name + 2;
148 if (!exclude && show_objects_) {
149 add_layer_collection_objects(ten->
subtree, *lc, *ten);
162 void TreeDisplayViewLayer::add_layer_collection_objects(
ListBase &
tree,
174 void TreeDisplayViewLayer::add_layer_collection_objects_children(
TreeElement &collection_tree_elem)
178 child_builder(collection_tree_elem);
197 object_tree_elements_lookup_create_recursive(&collection_tree_elem);
198 make_object_parent_hierarchy_collections();
204 void ObjectsChildrenBuilder::object_tree_elements_lookup_create_recursive(
TreeElement *te_parent)
210 object_tree_elements_lookup_create_recursive(te);
220 object_tree_elements_lookup_create_recursive(te);
229 void ObjectsChildrenBuilder::make_object_parent_hierarchy_collections()
231 for (ObjectTreeElementsMap::MutableItem item : object_tree_elements_map_.items()) {
234 if (child->
parent ==
nullptr) {
238 Vector<TreeElement *> &child_ob_tree_elements = item.value;
239 Vector<TreeElement *> *parent_ob_tree_elements = object_tree_elements_map_.lookup_ptr(
241 if (parent_ob_tree_elements ==
nullptr) {
245 for (
TreeElement *parent_ob_tree_element : *parent_ob_tree_elements) {
246 TreeElement *parent_ob_collection_tree_element =
nullptr;
251 parent_ob_collection_tree_element = parent_ob_tree_element->
parent;
255 parent_ob_collection_tree_element = parent_ob_collection_tree_element->
parent;
258 for (
TreeElement *child_ob_tree_element : child_ob_tree_elements) {
259 if (child_ob_tree_element->parent == parent_ob_collection_tree_element) {
262 BLI_addtail(&parent_ob_tree_element->subtree, child_ob_tree_element);
263 child_ob_tree_element->parent = parent_ob_tree_element;
273 &parent_ob_tree_element->subtree,
275 parent_ob_tree_element,
280 child_ob_tree_elements.append(child_ob_tree_element);
struct Base * BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob)
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_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_LINKED(_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
@ TSE_LIBRARY_OVERRIDE_BASE
@ SO_FILTER_NO_LIB_OVERRIDE
@ SO_FILTER_NO_COLLECTION
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Value & lookup_or_add(const Key &key, const Value &value)
void append(const T &value)
Base Class For Tree-Displays.
SpaceOutliner & space_outliner_
ObjectsChildrenBuilder(SpaceOutliner &soutliner)
void operator()(TreeElement &collection_tree_elem)
~ObjectsChildrenBuilder()=default
ListBase buildTree(const TreeSourceData &source_data) override
TreeDisplayViewLayer(SpaceOutliner &space_outliner)
ListBaseWrapper< T > List
@ TE_CHILD_NOT_IN_COLLECTION
#define SUPPORT_FILTER_OUTLINER(space_outliner_)
void outliner_free_tree(ListBase *tree)
TreeElement * outliner_add_element(SpaceOutliner *space_outliner, ListBase *lb, void *idv, TreeElement *parent, short type, short index)
void outliner_make_object_parent_hierarchy(ListBase *lb)
ListBase layer_collections
struct Collection * collection
struct TreeElement * parent
The data to build the tree from.
struct ViewLayer * view_layer
ListBase layer_collections
Establish and manage Outliner trees for different display modes.