Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_outliner/outliner_tree.c
| Show First 20 Lines • Show All 228 Lines • ▼ Show 20 Lines | for (curBone = curBone->childbase.first; curBone; curBone = curBone->next) { | ||||
| outliner_add_bone(soops, &te->subtree, id, curBone, te, a); | outliner_add_bone(soops, &te->subtree, id, curBone, te, a); | ||||
| } | } | ||||
| } | } | ||||
| /* -------------------------------------------------------- */ | /* -------------------------------------------------------- */ | ||||
| #define LOG2I(x) (int)(log(x) / M_LN2) | #define LOG2I(x) (int)(log(x) / M_LN2) | ||||
| static void outliner_add_passes(SpaceOops *soops, TreeElement *tenla, ID *id, SceneLayer *scene_layer) | static void outliner_add_passes(SpaceOops *soops, TreeElement *tenla, ID *id, ViewLayer *view_layer) | ||||
| { | { | ||||
| TreeStoreElem *tselem = NULL; | TreeStoreElem *tselem = NULL; | ||||
| TreeElement *te = NULL; | TreeElement *te = NULL; | ||||
| /* log stuff is to convert bitflags (powers of 2) to small integers, | /* log stuff is to convert bitflags (powers of 2) to small integers, | ||||
| * in order to not overflow short tselem->nr */ | * in order to not overflow short tselem->nr */ | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_COMBINED)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_COMBINED)); | ||||
| te->name = IFACE_("Combined"); | te->name = IFACE_("Combined"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| /* save cpu cycles, but we add the first to invoke an open/close triangle */ | /* save cpu cycles, but we add the first to invoke an open/close triangle */ | ||||
| tselem = TREESTORE(tenla); | tselem = TREESTORE(tenla); | ||||
| if (tselem->flag & TSE_CLOSED) | if (tselem->flag & TSE_CLOSED) | ||||
| return; | return; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_Z)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_Z)); | ||||
| te->name = IFACE_("Z"); | te->name = IFACE_("Z"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_VECTOR)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_VECTOR)); | ||||
| te->name = IFACE_("Vector"); | te->name = IFACE_("Vector"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_NORMAL)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_NORMAL)); | ||||
| te->name = IFACE_("Normal"); | te->name = IFACE_("Normal"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_UV)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_UV)); | ||||
| te->name = IFACE_("UV"); | te->name = IFACE_("UV"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_MIST)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_MIST)); | ||||
| te->name = IFACE_("Mist"); | te->name = IFACE_("Mist"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXOB)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXOB)); | ||||
| te->name = IFACE_("Index Object"); | te->name = IFACE_("Index Object"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA)); | ||||
| te->name = IFACE_("Index Material"); | te->name = IFACE_("Index Material"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA)); | ||||
| te->name = IFACE_("Color"); | te->name = IFACE_("Color"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_DIFFUSE)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_DIFFUSE)); | ||||
| te->name = IFACE_("Diffuse"); | te->name = IFACE_("Diffuse"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SPEC)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SPEC)); | ||||
| te->name = IFACE_("Specular"); | te->name = IFACE_("Specular"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SHADOW)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SHADOW)); | ||||
| te->name = IFACE_("Shadow"); | te->name = IFACE_("Shadow"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_AO)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_AO)); | ||||
| te->name = IFACE_("AO"); | te->name = IFACE_("AO"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFLECT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFLECT)); | ||||
| te->name = IFACE_("Reflection"); | te->name = IFACE_("Reflection"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFRACT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFRACT)); | ||||
| te->name = IFACE_("Refraction"); | te->name = IFACE_("Refraction"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDIRECT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDIRECT)); | ||||
| te->name = IFACE_("Indirect"); | te->name = IFACE_("Indirect"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_ENVIRONMENT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_ENVIRONMENT)); | ||||
| te->name = IFACE_("Environment"); | te->name = IFACE_("Environment"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_EMIT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_EMIT)); | ||||
| te->name = IFACE_("Emit"); | te->name = IFACE_("Emit"); | ||||
| te->directdata = &scene_layer->passflag; | te->directdata = &view_layer->passflag; | ||||
| } | } | ||||
| #undef LOG2I | #undef LOG2I | ||||
| static bool outliner_animdata_test(AnimData *adt) | static bool outliner_animdata_test(AnimData *adt) | ||||
| { | { | ||||
| if (adt) | if (adt) | ||||
| return (adt->action || adt->drivers.first || adt->nla_tracks.first); | return (adt->action || adt->drivers.first || adt->nla_tracks.first); | ||||
| return false; | return false; | ||||
| } | } | ||||
| #ifdef WITH_FREESTYLE | #ifdef WITH_FREESTYLE | ||||
| static void outliner_add_line_styles(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | static void outliner_add_line_styles(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | ||||
| { | { | ||||
| SceneLayer *scene_layer; | ViewLayer *view_layer; | ||||
| FreestyleLineSet *lineset; | FreestyleLineSet *lineset; | ||||
| for (scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) { | ||||
| for (lineset = scene_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) { | for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) { | ||||
| FreestyleLineStyle *linestyle = lineset->linestyle; | FreestyleLineStyle *linestyle = lineset->linestyle; | ||||
| if (linestyle) { | if (linestyle) { | ||||
| linestyle->id.tag |= LIB_TAG_DOIT; | linestyle->id.tag |= LIB_TAG_DOIT; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| for (scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) { | ||||
| for (lineset = scene_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) { | for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) { | ||||
| FreestyleLineStyle *linestyle = lineset->linestyle; | FreestyleLineStyle *linestyle = lineset->linestyle; | ||||
| if (linestyle) { | if (linestyle) { | ||||
| if (!(linestyle->id.tag & LIB_TAG_DOIT)) | if (!(linestyle->id.tag & LIB_TAG_DOIT)) | ||||
| continue; | continue; | ||||
| linestyle->id.tag &= ~LIB_TAG_DOIT; | linestyle->id.tag &= ~LIB_TAG_DOIT; | ||||
| outliner_add_element(soops, lb, linestyle, te, 0, 0); | outliner_add_element(soops, lb, linestyle, te, 0, 0); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| static void outliner_add_scene_contents(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | static void outliner_add_scene_contents(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | ||||
| { | { | ||||
| SceneLayer *scene_layer; | ViewLayer *view_layer; | ||||
| TreeElement *tenla = outliner_add_element(soops, lb, sce, te, TSE_R_LAYER_BASE, 0); | TreeElement *tenla = outliner_add_element(soops, lb, sce, te, TSE_R_LAYER_BASE, 0); | ||||
| int a; | int a; | ||||
| tenla->name = IFACE_("RenderLayers"); | tenla->name = IFACE_("RenderLayers"); | ||||
| for (a = 0, scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next, a++) { | for (a = 0, view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next, a++) { | ||||
| TreeElement *tenlay = outliner_add_element(soops, &tenla->subtree, sce, te, TSE_R_LAYER, a); | TreeElement *tenlay = outliner_add_element(soops, &tenla->subtree, sce, te, TSE_R_LAYER, a); | ||||
| tenlay->name = scene_layer->name; | tenlay->name = view_layer->name; | ||||
| tenlay->directdata = &scene_layer->flag; | tenlay->directdata = &view_layer->flag; | ||||
| outliner_add_passes(soops, tenlay, &sce->id, scene_layer); | outliner_add_passes(soops, tenlay, &sce->id, view_layer); | ||||
| } | } | ||||
| // TODO: move this to the front? | // TODO: move this to the front? | ||||
| if (outliner_animdata_test(sce->adt)) | if (outliner_animdata_test(sce->adt)) | ||||
| outliner_add_element(soops, lb, sce, te, TSE_ANIM_DATA, 0); | outliner_add_element(soops, lb, sce, te, TSE_ANIM_DATA, 0); | ||||
| outliner_add_element(soops, lb, sce->gpd, te, 0, 0); | outliner_add_element(soops, lb, sce->gpd, te, 0, 0); | ||||
| ▲ Show 20 Lines • Show All 1,013 Lines • ▼ Show 20 Lines | for (LayerCollection *collection = layer_collections->first; collection; collection = collection->next) { | ||||
| for (LinkData *link = collection->object_bases.first; link; link = link->next) { | for (LinkData *link = collection->object_bases.first; link; link = link->next) { | ||||
| Base *base = (Base *)link->data; | Base *base = (Base *)link->data; | ||||
| TreeElement *te_object = outliner_add_element(soops, &ten->subtree, base->object, ten, 0, 0); | TreeElement *te_object = outliner_add_element(soops, &ten->subtree, base->object, ten, 0, 0); | ||||
| te_object->directdata = base; | te_object->directdata = base; | ||||
| } | } | ||||
| outliner_make_hierarchy(&ten->subtree); | outliner_make_hierarchy(&ten->subtree); | ||||
| } | } | ||||
| } | } | ||||
| static void outliner_add_collections_act_layer(SpaceOops *soops, SceneLayer *layer) | static void outliner_add_collections_act_layer(SpaceOops *soops, ViewLayer *layer) | ||||
| { | { | ||||
| outliner_add_layer_collections_recursive(soops, &soops->tree, &layer->layer_collections, NULL); | outliner_add_layer_collections_recursive(soops, &soops->tree, &layer->layer_collections, NULL); | ||||
| } | } | ||||
| static void outliner_scene_collections_reorder( | static void outliner_scene_collections_reorder( | ||||
| Main *bmain, const Scene *scene, | Main *bmain, const Scene *scene, | ||||
| TreeElement *insert_element, TreeElement *insert_handle, TreeElementInsertType action) | TreeElement *insert_element, TreeElement *insert_handle, TreeElementInsertType action) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 314 Lines • ▼ Show 20 Lines | static int outliner_filter_tree(SpaceOops *soops, ListBase *lb) | ||||
| return (BLI_listbase_is_empty(lb) == false); | return (BLI_listbase_is_empty(lb) == false); | ||||
| } | } | ||||
| /* ======================================================= */ | /* ======================================================= */ | ||||
| /* Main Tree Building API */ | /* Main Tree Building API */ | ||||
| /* Main entry point for building the tree data-structure that the outliner represents */ | /* Main entry point for building the tree data-structure that the outliner represents */ | ||||
| // TODO: split each mode into its own function? | // TODO: split each mode into its own function? | ||||
| void outliner_build_tree(Main *mainvar, Scene *scene, SceneLayer *sl, SpaceOops *soops) | void outliner_build_tree(Main *mainvar, Scene *scene, ViewLayer *view_layer, SpaceOops *soops) | ||||
| { | { | ||||
| TreeElement *te = NULL, *ten; | TreeElement *te = NULL, *ten; | ||||
| TreeStoreElem *tselem; | TreeStoreElem *tselem; | ||||
| int show_opened = !soops->treestore || !BLI_mempool_count(soops->treestore); /* on first view, we open scenes */ | int show_opened = !soops->treestore || !BLI_mempool_count(soops->treestore); /* on first view, we open scenes */ | ||||
| /* Are we looking for something - we want to tag parents to filter child matches | /* Are we looking for something - we want to tag parents to filter child matches | ||||
| * - NOT in datablocks view - searching all datablocks takes way too long to be useful | * - NOT in datablocks view - searching all datablocks takes way too long to be useful | ||||
| * - this variable is only set once per tree build */ | * - this variable is only set once per tree build */ | ||||
| ▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | else if (soops->outlinevis == SO_CUR_SCENE) { | ||||
| FOREACH_SCENE_OBJECT(scene, ob) | FOREACH_SCENE_OBJECT(scene, ob) | ||||
| { | { | ||||
| outliner_add_element(soops, &soops->tree, ob, NULL, 0, 0); | outliner_add_element(soops, &soops->tree, ob, NULL, 0, 0); | ||||
| } | } | ||||
| FOREACH_SCENE_OBJECT_END | FOREACH_SCENE_OBJECT_END | ||||
| outliner_make_hierarchy(&soops->tree); | outliner_make_hierarchy(&soops->tree); | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_VISIBLE) { | else if (soops->outlinevis == SO_VISIBLE) { | ||||
| FOREACH_VISIBLE_BASE(sl, base) | FOREACH_VISIBLE_BASE(view_layer, base) | ||||
| { | { | ||||
| ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0); | ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0); | ||||
| ten->directdata = base; | ten->directdata = base; | ||||
| } | } | ||||
| FOREACH_VISIBLE_BASE_END | FOREACH_VISIBLE_BASE_END | ||||
| outliner_make_hierarchy(&soops->tree); | outliner_make_hierarchy(&soops->tree); | ||||
| } | } | ||||
| Show All 10 Lines | for (group = mainvar->group.first; group; group = group->id.next) { | ||||
| } | } | ||||
| outliner_make_hierarchy(&te->subtree); | outliner_make_hierarchy(&te->subtree); | ||||
| /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */ | /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */ | ||||
| for (go = group->gobject.first; go; go = go->next) go->ob->id.newid = NULL; | for (go = group->gobject.first; go; go = go->next) go->ob->id.newid = NULL; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_SAME_TYPE) { | else if (soops->outlinevis == SO_SAME_TYPE) { | ||||
| Object *ob_active = OBACT(sl); | Object *ob_active = OBACT(view_layer); | ||||
| if (ob_active) { | if (ob_active) { | ||||
| FOREACH_SCENE_OBJECT(scene, ob) | FOREACH_SCENE_OBJECT(scene, ob) | ||||
| { | { | ||||
| if (ob->type == ob_active->type) { | if (ob->type == ob_active->type) { | ||||
| outliner_add_element(soops, &soops->tree, ob, NULL, 0, 0); | outliner_add_element(soops, &soops->tree, ob, NULL, 0, 0); | ||||
| } | } | ||||
| } | } | ||||
| FOREACH_SCENE_OBJECT_END | FOREACH_SCENE_OBJECT_END | ||||
| outliner_make_hierarchy(&soops->tree); | outliner_make_hierarchy(&soops->tree); | ||||
| } | } | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_SELECTED) { | else if (soops->outlinevis == SO_SELECTED) { | ||||
| FOREACH_SELECTED_BASE(sl, base) | FOREACH_SELECTED_BASE(view_layer, base) | ||||
| { | { | ||||
| ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0); | ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0); | ||||
| ten->directdata = base; | ten->directdata = base; | ||||
| } | } | ||||
| FOREACH_SELECTED_BASE_END | FOREACH_SELECTED_BASE_END | ||||
| outliner_make_hierarchy(&soops->tree); | outliner_make_hierarchy(&soops->tree); | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_SEQUENCE) { | else if (soops->outlinevis == SO_SEQUENCE) { | ||||
| ▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | if (show_opened) { | ||||
| tselem = TREESTORE(ten); | tselem = TREESTORE(ten); | ||||
| tselem->flag &= ~TSE_CLOSED; | tselem->flag &= ~TSE_CLOSED; | ||||
| } | } | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_ID_ORPHANS) { | else if (soops->outlinevis == SO_ID_ORPHANS) { | ||||
| outliner_add_orphaned_datablocks(mainvar, soops); | outliner_add_orphaned_datablocks(mainvar, soops); | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_ACT_LAYER) { | else if (soops->outlinevis == SO_ACT_LAYER) { | ||||
| outliner_add_collections_act_layer(soops, sl); | outliner_add_collections_act_layer(soops, view_layer); | ||||
| } | } | ||||
| else if (soops->outlinevis == SO_COLLECTIONS) { | else if (soops->outlinevis == SO_COLLECTIONS) { | ||||
| outliner_add_collections_master(soops, scene); | outliner_add_collections_master(soops, scene); | ||||
| } | } | ||||
| else { | else { | ||||
| ten = outliner_add_element(soops, &soops->tree, OBACT(sl), NULL, 0, 0); | ten = outliner_add_element(soops, &soops->tree, OBACT(view_layer), NULL, 0, 0); | ||||
| ten->directdata = BASACT(sl); | ten->directdata = BASACT(view_layer); | ||||
| } | } | ||||
| if ((soops->flag & SO_SKIP_SORT_ALPHA) == 0) { | if ((soops->flag & SO_SKIP_SORT_ALPHA) == 0) { | ||||
| outliner_sort(&soops->tree); | outliner_sort(&soops->tree); | ||||
| } | } | ||||
| outliner_filter_tree(soops, &soops->tree); | outliner_filter_tree(soops, &soops->tree); | ||||
| BKE_main_id_clear_newpoins(mainvar); | BKE_main_id_clear_newpoins(mainvar); | ||||
| } | } | ||||