22 #include "../outliner_intern.hh"
29 template<
typename T>
using List = ListBaseWrapper<T>;
45 void object_tree_elements_lookup_create_recursive(
TreeElement *te_parent);
46 void make_object_parent_hierarchy_collections();
70 view_layer_ = view_layer;
83 te_view_layer.
name = view_layer->name;
86 add_view_layer(*
scene, te_view_layer.
subtree, &te_view_layer);
124 add_layer_collection_objects(ten.
subtree, *lc, ten);
127 add_layer_collection_objects_children(ten);
132 void TreeDisplayViewLayer::add_layer_collections_recursive(
ListBase &
tree,
148 ten->
name =
id->name + 2;
159 if (!exclude && show_objects_) {
160 add_layer_collection_objects(ten->
subtree, *lc, *ten);
165 void TreeDisplayViewLayer::add_layer_collection_objects(
ListBase &
tree,
177 void TreeDisplayViewLayer::add_layer_collection_objects_children(
TreeElement &collection_tree_elem)
181 child_builder(collection_tree_elem);
200 object_tree_elements_lookup_create_recursive(&collection_tree_elem);
201 make_object_parent_hierarchy_collections();
207 void ObjectsChildrenBuilder::object_tree_elements_lookup_create_recursive(
TreeElement *te_parent)
213 object_tree_elements_lookup_create_recursive(te);
223 object_tree_elements_lookup_create_recursive(te);
232 void ObjectsChildrenBuilder::make_object_parent_hierarchy_collections()
234 for (ObjectTreeElementsMap::MutableItem item : object_tree_elements_map_.items()) {
237 if (child->
parent ==
nullptr) {
241 Vector<TreeElement *> &child_ob_tree_elements = item.value;
242 Vector<TreeElement *> *parent_ob_tree_elements = object_tree_elements_map_.lookup_ptr(
244 if (parent_ob_tree_elements ==
nullptr) {
248 for (
TreeElement *parent_ob_tree_element : *parent_ob_tree_elements) {
249 TreeElement *parent_ob_collection_tree_element =
nullptr;
254 parent_ob_collection_tree_element = parent_ob_tree_element->
parent;
258 parent_ob_collection_tree_element = parent_ob_collection_tree_element->
parent;
261 for (
TreeElement *child_ob_tree_element : child_ob_tree_elements) {
262 if (child_ob_tree_element->parent == parent_ob_collection_tree_element) {
265 BLI_addtail(&parent_ob_tree_element->subtree, child_ob_tree_element);
266 child_ob_tree_element->parent = parent_ob_tree_element;
276 &parent_ob_tree_element->subtree,
278 parent_ob_tree_element,
283 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_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
@ SO_FILTER_NO_VIEW_LAYERS
@ 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
bool supportsModeColumn() const override
ListBase buildTree(const TreeSourceData &source_data) override
TreeDisplayViewLayer(SpaceOutliner &space_outliner)
void outliner_make_object_parent_hierarchy(ListBase *lb)
TreeElement * outliner_add_element(SpaceOutliner *space_outliner, ListBase *lb, void *idv, TreeElement *parent, short type, short index, const bool expand)
ListBaseWrapper< T > List
@ TE_CHILD_NOT_IN_COLLECTION
ListBase layer_collections
struct Collection * collection
struct TreeElement * parent
ListBase layer_collections
The data to build the tree from.
Establish and manage Outliner trees for different display modes.