78 #include "../../blender/blenloader/BLO_readfile.h"
105 TreeElement *te,
int *scenelevel,
int *objectlevel,
int *idlevel,
int *datalevel)
111 if (*datalevel == 0) {
112 *datalevel = tselem->
type;
114 else if (*datalevel != tselem->
type) {
119 const int idcode = (int)
GS(tselem->
id->
name);
120 bool is_standard_id =
false;
165 is_standard_id =
true;
177 is_standard_id =
true;
180 if (is_standard_id) {
184 else if (*idlevel != idcode) {
229 "Cannot unlink action '%s'. It's not clear which object or object-data it "
230 "should be unlinked from, there's no object or object-data as parent in the "
251 if (!te_is_material) {
262 "Cannot unlink material '%s'. It's not clear which object or object-data it "
263 "should be unlinked from, there's no object or object-data as parent in the "
305 totcol = pointcloud->
totcol;
306 matar = pointcloud->
mat;
319 if (
LIKELY(matar !=
nullptr)) {
320 for (
a = 0;
a < totcol;
a++) {
321 if (
a == te->
index && matar[
a]) {
342 "Cannot unlink texture '%s'. It's not clear which freestyle line style it should "
343 "be unlinked from, there's no freestyle line style as parent in the Outliner tree",
348 MTex **mtex =
nullptr;
360 if (
a == te->
index && mtex[
a]) {
363 mtex[
a]->
tex =
nullptr;
385 "Cannot unlink collection '%s'. It's not clear which scene, collection or "
386 "instance empties it should be unlinked from, there's no scene, collection or "
387 "instance empties as parent in the Outliner tree",
425 if (tsep && tsep->
id) {
436 "Cannot unlink object '%s' parented to another linked object '%s'",
441 te_parent = te_parent->
parent;
442 tsep = te_parent ?
TREESTORE(te_parent) :
nullptr;
446 if (tsep && tsep->
id) {
450 "Cannot unlink object '%s' from linked collection or scene '%s'",
485 "Cannot unlink world '%s'. It's not clear which scene it should be unlinked from, "
486 "there's no scene as parent in the Outliner tree",
496 parscene->
world =
nullptr;
532 "Apply the operation over selected data-blocks only"},
537 "Apply the operation over content of the selected items only (the data-blocks in their "
540 "SELECTED_AND_CONTENT",
542 "Selected & Content",
543 "Apply the operation over selected data-blocks and all their dependencies"},
544 {0,
nullptr, 0,
nullptr,
nullptr},
552 const bool has_parent_selected,
557 const bool do_selected =
ELEM(selection_set,
560 const bool do_content =
ELEM(selection_set,
570 if ((is_selected && do_selected) || (has_parent_selected && do_content)) {
585 is_selected || has_parent_selected,
604 space_outliner->
tree,
623 {0,
nullptr, 0,
nullptr,
nullptr},
632 bool success =
false;
638 if (operation_fn(
C, event, te, tselem)) {
691 ot->
name =
"Outliner Scene Operation";
692 ot->
idname =
"OUTLINER_OT_scene_operation";
754 const bool UNUSED(is_first))
782 static char search[64] =
"";
795 block, search, 0, ICON_VIEWZOOM,
sizeof(search), 10, 10, menu_width,
UI_UNIT_Y, 0, 0,
"");
823 const int offset[2] = {-(menu_width / 2), 0};
833 MergedSearchData *select_data = MEM_cnew<MergedSearchData>(
"merge_search_data");
901 reports,
RPT_WARNING,
"Cannot delete indirectly linked object '%s'", ob->
id.
name + 2);
908 "Cannot delete object '%s' from scene '%s', indirectly used objects need at "
988 ID *id_root_reference,
989 ID *id_instance_hint,
990 const bool is_override_instancing_object)
999 id_hierarchy_root_reference);
1000 value.
append(id_root_data);
1011 id_hierarchy_root_reference);
1013 value.
append(id_root_data);
1031 const bool do_hierarchy =
data->do_hierarchy;
1032 ID *id_root_reference = tselem->
id;
1055 data->selected_id_uid.add(object_iter->id.session_uuid);
1061 ID *id_instance_hint =
nullptr;
1062 bool is_override_instancing_object =
false;
1070 id_instance_hint = tsep->
id;
1071 is_override_instancing_object =
true;
1084 ID *id_hierarchy_root_reference = id_root_reference;
1085 while ((te = te->
parent) !=
nullptr) {
1095 if (id_current_hierarchy_root->
lib != id_root_reference->
lib) {
1107 id_root_reference->
lib) {
1108 id_hierarchy_root_reference =
1120 "Invalid anchor ('%s') found, needed to create library override from "
1122 id_current_hierarchy_root->
name,
1123 id_root_reference->
name);
1139 "Could not create library override from data-block '%s', one of its parents "
1140 "is not overridable ('%s')",
1141 id_root_reference->
name,
1142 id_current_hierarchy_root->
name);
1146 id_hierarchy_root_reference = id_current_hierarchy_root;
1152 if (!((id_hierarchy_root_reference->
lib == id_root_reference->
lib) ||
1156 id_root_reference->
lib))) {
1160 "Invalid hierarchy root ('%s') found, needed to create library override from "
1162 id_hierarchy_root_reference->
name,
1163 id_root_reference->
name);
1174 if (!is_selected &&
data->id_hierarchy_roots.contains(id_hierarchy_root_reference)) {
1178 data->id_root_add(id_hierarchy_root_reference,
1181 is_override_instancing_object);
1185 id_root_reference, id_root_reference, id_instance_hint, is_override_instancing_object);
1194 ID *id_hierarchy_root_reference,
1196 bool &r_aggregated_success)
1201 const bool do_hierarchy =
data.do_hierarchy;
1220 bool success =
false;
1222 ID *id_root_override =
nullptr;
1227 data_idroot.id_root_reference,
1228 id_hierarchy_root_reference,
1229 data_idroot.id_instance_hint,
1231 data.do_fully_editable);
1242 id_hierarchy_root_reference);
1246 id_hierarchy_root_reference = id_hierarchy_root_override;
1249 BLI_assert(id_hierarchy_root_override == id_hierarchy_root_reference);
1251 data_idroot.id_hierarchy_root_override = id_hierarchy_root_override;
1257 &bmain, data_idroot.id_root_reference,
true);
1259 success = id_root_override !=
nullptr;
1274 if (success && data_idroot.is_override_instancing_object) {
1277 &bmain,
scene,
reinterpret_cast<Object *
>(data_idroot.id_instance_hint));
1280 r_aggregated_success = r_aggregated_success && success;
1293 const bool do_hierarchy =
data.do_hierarchy;
1295 bool success =
true;
1296 for (
auto &&[id_hierarchy_root_reference, data_idroots] :
data.id_hierarchy_roots.items()) {
1298 *bmain,
scene, view_layer,
data, id_hierarchy_root_reference, data_idroots, success);
1304 "Could not create library override from one or more of the selected data-blocks");
1307 if (!do_hierarchy) {
1317 !
data.id_hierarchy_roots_uid.contains(
1338 ID *id_root = tselem->
id;
1340 const bool do_hierarchy =
data->do_hierarchy;
1343 CLOG_WARN(&
LOG,
"Could not reset library override of data block '%s'", id_root->
name);
1368 ID *
id = tselem->
id;
1373 "Cannot clear embedded library override id '%s', only overrides of real "
1374 "data-blocks can be directly deleted",
1383 bool do_remap_active =
false;
1384 if (
OBACT(view_layer) ==
reinterpret_cast<Object *
>(
id)) {
1386 do_remap_active =
true;
1389 if (do_remap_active) {
1390 Object *ref_object =
reinterpret_cast<Object *
>(
id->override_library->reference);
1392 if (basact !=
nullptr) {
1393 view_layer->
basact = basact;
1415 ID *id_root = tselem->
id;
1419 CLOG_WARN(&
LOG,
"Could not resync library override of data block '%s'", id_root->
name);
1427 data->id_root_set(id_root);
1437 const bool do_hierarchy_enforce =
data.do_resync_hierarchy_enforce;
1442 for (
auto &&id_hierarchy_root :
data.id_hierarchy_roots.keys()) {
1448 do_hierarchy_enforce,
1466 ID *id_root = tselem->
id;
1469 CLOG_WARN(&
LOG,
"Could not delete library override of data block '%s'", id_root->
name);
1477 data->id_root_set(id_root);
1487 for (
auto &&id_hierarchy_root :
data.id_hierarchy_roots.keys()) {
1500 ID *
id = tselem->
id;
1513 ID *
id = tselem->
id;
1526 ID *
id = tselem->
id;
1545 ID *
id = tselem->
id;
1567 ID *
id = tselem->
id;
1589 bool recurse_selected)
1593 bool select_handled =
false;
1598 if (scene_owner && scene_act != scene_owner) {
1605 C, reports, scene_owner ? scene_owner : scene_act, te,
nullptr, tselem,
user_data);
1606 select_handled =
true;
1610 if ((select_handled ==
false) || recurse_selected) {
1632 C, reports, scene_act, space_outliner, lb, operation_fn,
nullptr,
true);
1710 "OVERRIDE_LIBRARY_CREATE_HIERARCHY",
1713 "Create a local override of the selected linked data-blocks, and their hierarchy of "
1716 "OVERRIDE_LIBRARY_RESET",
1719 "Reset the selected local overrides to their linked references values"},
1721 "OVERRIDE_LIBRARY_CLEAR_SINGLE",
1724 "Delete the selected local overrides and relink their usages to the linked data-blocks if "
1725 "possible, else reset them and mark them as non editable"},
1726 {0,
nullptr, 0,
nullptr,
nullptr},
1731 "OVERRIDE_LIBRARY_RESYNC_HIERARCHY",
1734 "Rebuild the selected local overrides from their linked references, as well as their "
1735 "hierarchies of dependencies"},
1737 "OVERRIDE_LIBRARY_RESYNC_HIERARCHY_ENFORCE",
1740 "Rebuild the selected local overrides from their linked references, as well as their "
1741 "hierarchies of dependencies, enforcing these hierarchies to match the linked data (i.e. "
1742 "ignoring existing overrides on data-blocks pointer properties)"},
1745 "OVERRIDE_LIBRARY_DELETE_HIERARCHY",
1748 "Delete the selected local overrides (including their hierarchies of override dependencies) "
1749 "and relink their usages to the linked data-blocks"},
1750 {0,
nullptr, 0,
nullptr,
nullptr},
1765 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
1768 if (space_outliner ==
nullptr) {
1783 override_data.do_fully_editable =
false;
1842 override_data.do_resync_hierarchy_enforce =
true;
1853 ED_undo_push(
C,
"Resync Overridden Data Hierarchy Enforce");
1887 ot->
name =
"Outliner Library Override Operation";
1888 ot->
idname =
"OUTLINER_OT_liboverride_operation";
1889 ot->
description =
"Create, reset or clear library override hierarchies";
1904 "Over which part of the tree items to apply the operation");
1910 ot->
name =
"Outliner Library Override Troubleshoot Operation";
1911 ot->
idname =
"OUTLINER_OT_liboverride_troubleshoot_operation";
1912 ot->
description =
"Advanced operations over library override to help fix broken hierarchies";
1925 "Library Override Troubleshoot Operation",
1932 "Over which part of the tree items to apply the operation");
2073 if (!te_rna_struct) {
2112 lb = &ob->constraints;
2164 operation_fn(event, te, tselem, arg);
2173 Base *child_base, *base_next;
2182 child_base = base_next) {
2183 base_next = child_base->
next;
2184 for (parent = child_base->
object->
parent; parent && (parent !=
object);
2185 parent = parent->
parent) {
2193 base_next = base->
next;
2198 "Cannot delete indirectly linked object '%s'",
2206 "Cannot delete object '%s' from scene '%s', indirectly used objects need at least "
2216 if (object->
id.
us == 0) {
2235 for (; obedit && (obedit != base->
object); obedit = obedit->
parent) {
2238 if (obedit == base->
object) {
2261 {
OL_OP_SELECT,
"SELECT", ICON_RESTRICT_SELECT_OFF,
"Select",
""},
2268 "Make all users of selected data-blocks to use instead a new chosen one"},
2270 {0,
nullptr, 0,
nullptr,
nullptr},
2280 const char *
str =
nullptr;
2281 bool selection_changed =
false;
2284 if (space_outliner ==
nullptr) {
2301 str =
"Select Objects";
2302 selection_changed =
true;
2311 &space_outliner->
tree,
2320 str =
"Select Object Hierarchy";
2321 selection_changed =
true;
2327 str =
"Deselect Objects";
2328 selection_changed =
true;
2338 str =
"Rename Object";
2345 if (selection_changed) {
2351 if (
str !=
nullptr) {
2361 ot->
name =
"Outliner Object Operation";
2362 ot->
idname =
"OUTLINER_OT_object_operation";
2391 GSet *objects_to_delete,
2395 GSET_ITER (objects_to_delete_iter, objects_to_delete) {
2398 delete_fn(
C, reports,
scene, ob);
2405 GSet *objects_to_delete =
data->objects_set;
2421 ID *id_parent = tselem_parent->
id;
2428 ID *
id = tselem->
id;
2432 if (!(
data->is_liboverride_hierarchy_root_allowed ||
data->is_liboverride_allowed)) {
2437 if (!
data->is_liboverride_allowed) {
2455 const Base *basact_prev =
BASACT(view_layer);
2463 object_delete_data.is_liboverride_allowed =
false;
2464 object_delete_data.is_liboverride_hierarchy_root_allowed = delete_hierarchy;
2466 &space_outliner->
tree,
2470 &object_delete_data);
2472 if (delete_hierarchy) {
2499 if (basact_prev !=
BASACT(view_layer)) {
2517 ot->
description =
"Delete selected objects and collections";
2528 ot->
srna,
"hierarchy",
false,
"Hierarchy",
"Delete child objects and collections");
2567 "Make all users of selected data-blocks to use instead current (clicked) one"},
2576 "Ensure data-block gets saved even if it isn't in use (e.g. for motion and material "
2581 {0,
nullptr, 0,
nullptr,
nullptr},
2587 const int enum_value)
2600 switch (enum_value) {
2642 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
2645 if (space_outliner ==
nullptr) {
2822 ot->
name =
"Outliner ID Data Operation";
2823 ot->
idname =
"OUTLINER_OT_id_operation";
2824 ot->
description =
"General data-block management operations";
2856 "Delete this library and all its item.\n"
2857 "Warning: No undo"},
2862 "Select a new path for this library, and reload all its data"},
2863 {
OL_LIB_RELOAD,
"RELOAD", ICON_FILE_REFRESH,
"Reload",
"Reload all data from this library"},
2864 {0,
nullptr, 0,
nullptr,
nullptr},
2872 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
2875 if (space_outliner ==
nullptr) {
2922 ot->
name =
"Outliner Library Operation";
2923 ot->
idname =
"OUTLINER_OT_lib_operation";
2951 operation_fn(te, tselem, tsep, newid);
2982 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
2989 act =
reinterpret_cast<bAction *
>(
2992 if (act ==
nullptr) {
3001 "Action '%s' does not specify what data-blocks it can be used on "
3002 "(try setting the 'ID Root Type' setting from the data-blocks editor "
3003 "for this action to avoid future problems)",
3011 else if (idlevel ==
ID_AC) {
3032 ot->
name =
"Outliner Set Action";
3033 ot->
idname =
"OUTLINER_OT_action_set";
3074 "Clear Animation Data",
3075 "Remove this animation data container"},
3080 {0,
nullptr, 0,
nullptr,
nullptr},
3087 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3152 ot->
name =
"Outliner Animation Data Operation";
3153 ot->
idname =
"OUTLINER_OT_animdata_operation";
3175 {0,
nullptr, 0,
nullptr,
nullptr},
3197 ot->
name =
"Outliner Constraint Operation";
3198 ot->
idname =
"OUTLINER_OT_constraint_operation";
3221 {0,
nullptr, 0,
nullptr,
nullptr},
3243 ot->
name =
"Outliner Modifier Operation";
3244 ot->
idname =
"OUTLINER_OT_modifier_operation";
3265 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3270 switch (datalevel) {
3334 if (space_outliner ==
nullptr) {
3339 if (te ==
nullptr) {
3350 {0,
nullptr, 0,
nullptr,
nullptr}};
3354 {0,
nullptr, 0,
nullptr,
nullptr}};
3357 return optype_sel_linked;
3360 return optype_sel_and_hide;
3366 ot->
name =
"Outliner Data Operation";
3367 ot->
idname =
"OUTLINER_OT_data_operation";
3411 int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
3429 if (objectlevel || datalevel || idlevel) {
3440 if (idlevel == -1 || datalevel) {
3458 else if (datalevel) {
3459 if (datalevel == -1) {
3506 ®ion->
v2d, event->
mval[0], event->
mval[1], &view_mval[0], &view_mval[1]);
3509 space_outliner, &space_outliner->
tree, view_mval[1]);
3520 ot->
name =
"Context Menu";
3521 ot->
idname =
"OUTLINER_OT_operation";
void BKE_animdata_free(struct ID *id, bool do_id_user)
bool BKE_animdata_set_action(struct ReportList *reports, struct ID *id, struct bAction *act)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
bool BKE_collection_child_remove(struct Main *bmain, struct Collection *parent, struct Collection *child)
bool BKE_collection_object_remove(struct Main *bmain, struct Collection *collection, struct Object *object, bool free_us)
bool BKE_scene_collections_object_remove(struct Main *bmain, struct Scene *scene, struct Object *object, bool free_us)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
bool BKE_constraint_remove_ex(ListBase *list, struct Object *ob, struct bConstraint *con, bool clear_dep)
void BKE_constraints_active_set(ListBase *list, struct bConstraint *con)
struct Scene * CTX_data_scene(const bContext *C)
struct Object * CTX_data_edit_object(const bContext *C)
struct SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct ReportList * CTX_wm_reports(const bContext *C)
struct wmMsgBus * CTX_wm_message_bus(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void BKE_fcurves_free(ListBase *list)
bool BKE_idtype_idcode_is_linkable(short idcode)
struct Base * BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob)
void BKE_id_newptr_and_tag_clear(struct ID *id)
void BKE_main_id_newptr_and_tag_clear(struct Main *bmain)
void BKE_main_id_tag_all(struct Main *mainvar, int tag, bool value)
void id_us_min(struct ID *id)
void id_fake_user_set(struct ID *id)
bool id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop)
bool BKE_lib_id_make_local(struct Main *bmain, struct ID *id, int flags)
void BKE_id_delete(struct Main *bmain, void *idv) ATTR_NONNULL()
void id_fake_user_clear(struct ID *id)
size_t BKE_id_multi_tagged_delete(struct Main *bmain) ATTR_NONNULL()
void BKE_lib_override_library_make_local(struct ID *id)
bool BKE_lib_override_library_create(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Library *owner_library, struct ID *id_root_reference, struct ID *id_hierarchy_root_reference, struct ID *id_instance_hint, struct ID **r_id_root_override, const bool do_fully_editable)
void BKE_lib_override_library_id_hierarchy_reset(struct Main *bmain, struct ID *id_root, bool do_reset_system_override)
bool BKE_lib_override_library_resync(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct ID *id_root, struct Collection *override_resync_residual_storage, bool do_hierarchy_enforce, struct BlendFileReadReport *reports)
bool BKE_lib_override_library_is_hierarchy_leaf(struct Main *bmain, struct ID *id)
void BKE_lib_override_library_delete(struct Main *bmain, struct ID *id_root)
void BKE_lib_override_library_id_reset(struct Main *bmain, struct ID *id_root, bool do_reset_system_override)
struct ID * BKE_lib_override_library_create_from_id(struct Main *bmain, struct ID *reference_id, bool do_tagged_remap)
bool BKE_library_ID_is_indirectly_used(struct Main *bmain, void *idv)
@ ID_REMAP_SKIP_INDIRECT_USAGE
void void BKE_libblock_remap(struct Main *bmain, void *old_idv, void *new_idv, short remap_flags) ATTR_NONNULL(1
#define FOREACH_MAIN_ID_END
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
General operations, lookup, etc. for blender objects.
bool BKE_object_is_in_editmode(const struct Object *ob)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define BLI_assert_unreachable()
GSet * BLI_gset_ptr_new(const char *info)
#define GSET_ITER(gs_iter_, gset_)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
bool BLI_gset_add(GSet *gs, void *key)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define UNUSED_VARS_NDEBUG(...)
#define CLOG_WARN(clg_ref,...)
void DEG_id_tag_update_ex(struct Main *bmain, struct ID *id, int flag)
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
#define ID_IS_OVERRIDE_LIBRARY_VIRTUAL(_id)
#define ID_EXTRA_USERS(id)
@ ID_RECALC_COPY_ON_WRITE
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_OVERRIDABLE_LIBRARY(_id)
#define ID_IS_OVERRIDABLE_LIBRARY_HIERARCHY(_id)
#define ID_IS_LINKED(_id)
@ LIB_EMBEDDED_DATA_LIB_OVERRIDE
#define ID_REAL_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define ID_IS_OVERRIDE_LIBRARY_HIERARCHY_ROOT(_id)
@ IDOVERRIDE_LIBRARY_FLAG_SYSTEM_DEFINED
Object groups, one object can be in many groups at once.
Object is a sort of wrapper for general info.
#define TSE_IS_REAL_ID(_tse)
@ TSE_VIEW_COLLECTION_BASE
@ TSE_SCENE_COLLECTION_BASE
#define BASACT(_view_layer)
#define OBACT(_view_layer)
void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode)
bool ED_object_editmode_exit_ex(struct Main *bmain, struct Scene *scene, struct Object *obedit, int flag)
void ED_object_constraint_update(struct Main *bmain, struct Object *ob)
bool ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md)
bool ED_object_editmode_exit(struct bContext *C, int flag)
void ED_object_select_linked_by_id(struct bContext *C, struct ID *id)
void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob)
void ED_outliner_select_sync_from_all_tag(struct bContext *C)
void ED_outliner_select_sync_from_object_tag(struct bContext *C)
void ED_outliner_select_sync_from_outliner(struct bContext *C, struct SpaceOutliner *space_outliner)
bool ED_scene_delete(struct bContext *C, struct Main *bmain, struct Scene *scene) ATTR_NONNULL()
void ED_region_tag_redraw_no_rebuild(struct ARegion *region)
bool ED_operator_outliner_active(struct bContext *C)
void ED_sequencer_select_sequence_single(struct Scene *scene, struct Sequence *seq, bool deselect_all)
void ED_undo_push(struct bContext *C, const char *str)
_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
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to curves
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Map
const EnumPropertyItem * RNA_action_itemf(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, bool *r_free)
#define RNA_ENUM_ITEM_SEPR
@ UI_BUT_ACTIVATE_ON_INIT
void UI_block_theme_style_set(uiBlock *block, char theme_style)
int UI_searchbox_size_y(void)
uiBut * uiDefBut(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, void *poin, float min, float max, float a1, float a2, const char *tip)
void UI_block_bounds_set_popup(uiBlock *block, int addval, const int bounds_offset[2])
@ UI_BLOCK_THEME_STYLE_POPUP
void UI_but_func_search_set(uiBut *but, uiButSearchCreateFn search_create_fn, uiButSearchUpdateFn search_update_fn, void *arg, bool free_arg, uiFreeArgFunc search_arg_free_fn, uiButHandleFunc search_exec_fn, void *active)
uiBut * UI_context_active_but_get(const struct bContext *C)
bool UI_search_item_add(uiSearchItems *items, const char *name, void *poin, int iconid, int but_flag, uint8_t name_prefix_offset)
struct uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
void UI_but_tooltip_timer_remove(struct bContext *C, uiBut *but)
void uiItemS(uiLayout *layout)
void uiItemMContents(uiLayout *layout, const char *menuname)
void uiItemsEnumO(uiLayout *layout, const char *opname, const char *propname)
uiBlock * UI_block_begin(const struct bContext *C, struct ARegion *region, const char *name, eUIEmbossType emboss)
void UI_popup_menu_end(struct bContext *C, struct uiPopupMenu *pup)
uiBut * uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxlen, int x, int y, short width, short height, float a1, float a2, const char *tip)
int UI_search_items_find_index(uiSearchItems *items, const char *name)
void UI_block_flag_enable(uiBlock *block, int flag)
void UI_popup_block_invoke(struct bContext *C, uiBlockCreateFunc func, void *arg, uiFreeArgFunc arg_free)
void uiLayoutSetOperatorContext(uiLayout *layout, wmOperatorCallContext opcontext)
void UI_but_flag_enable(uiBut *but, int flag)
uiPopupMenu * UI_popup_menu_begin(struct bContext *C, const char *title, int icon) ATTR_NONNULL()
@ UI_BLOCK_MOVEMOUSE_QUIT
void UI_view2d_region_to_view(const struct View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define ND_LIB_OVERRIDE_CHANGED
@ WM_OP_INVOKE_REGION_WIN
#define ND_SPACE_OUTLINER
ATTR_WARN_UNUSED_RESULT const void * element
Value & lookup_or_add_default(const Key &key)
void append(const T &value)
const PointerRNA & getPointerRNA() const
Sequence & getSequence() const
SyclQueue void void size_t num_bytes void
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void(* MEM_freeN)(void *vmemh)
bool active
all scheduled work for the GPU.
void all_open(const SpaceOutliner &space_outliner, const VisitorFn visitor)
bool outliner_is_collection_tree_element(const TreeElement *te)
void outliner_collection_delete(bContext *C, Main *bmain, Scene *scene, ReportList *reports, bool do_hierarchy)
int tree_element_id_type_to_index(TreeElement *te)
TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
void id_remap_fn(bContext *C, ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
void lib_reload_fn(bContext *C, ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
void item_rename_fn(bContext *C, ReportList *reports, Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
void id_delete_tag_fn(bContext *C, ReportList *reports, Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
void lib_relocate_fn(bContext *C, ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
bool outliner_tree_traverse(const SpaceOutliner *space_outliner, ListBase *tree, int filter_te_flag, int filter_tselem_flag, TreeTraversalFunc func, void *customdata)
TreeElement * outliner_find_element_with_flag(const ListBase *lb, short flag)
void outliner_item_select(struct bContext *C, struct SpaceOutliner *space_outliner, struct TreeElement *te, short select_flag)
void outliner_cleanup_tree(struct SpaceOutliner *space_outliner)
void(* outliner_operation_fn)(struct bContext *C, struct ReportList *, struct Scene *scene, struct TreeElement *, struct TreeStoreElem *, TreeStoreElem *, void *)
TreeElement * outliner_find_item_at_y(const SpaceOutliner *space_outliner, const ListBase *tree, float view_co_y)
struct ID * outliner_search_back(TreeElement *te, short idcode)
#define TSELEM_OPEN(telm, sv)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
bool RNA_struct_is_ID(const StructRNA *type)
const char * RNA_property_identifier(const PropertyRNA *prop)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
const EnumPropertyItem DummyRNA_DEFAULT_items[]
const EnumPropertyItem DummyRNA_NULL_items[]
Editing * SEQ_editing_get(const Scene *scene)
void SEQ_relations_invalidate_dependent(Scene *scene, Sequence *seq)
struct ReportList * reports
struct ID * hierarchy_root
IDOverrideLibrary * override_library
unsigned int session_uuid
TreeElement * select_element
TreeElement * parent_element
struct Collection * instance_collection
void id_root_add(ID *id_hierarchy_root_reference, ID *id_root_reference, ID *id_instance_hint, const bool is_override_instancing_object)
Map< ID *, Vector< OutlinerLiboverrideDataIDRoot > > id_hierarchy_roots
Set< uint > id_hierarchy_roots_uid
Set< uint > selected_id_uid
void id_root_set(ID *id_hierarchy_root_reference)
bool do_resync_hierarchy_enforce
ID * id_hierarchy_root_override
bool is_override_instancing_object
struct Collection * master_collection
struct TreeElement * parent
TreeStoreElem * store_elem
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_menu_name_call(bContext *C, const char *menu_name, short context)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_operator_name_call(bContext *C, const char *opstring, wmOperatorCallContext context, PointerRNA *properties, const wmEvent *event)
#define WM_msg_publish_rna_prop(mbus, id_, data_, type_, prop_)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
const char * WM_operatortype_name(struct wmOperatorType *ot, struct PointerRNA *properties)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
int WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
void WM_window_set_active_scene(Main *bmain, bContext *C, wmWindow *win, Scene *scene)