diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-11-08 17:16:49 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-11-08 23:39:01 +0300 |
commit | 206c94fea98d44ed9667607638c455c7c0e63822 (patch) | |
tree | ddc1f6f30c18d10674daaeeaee6b465550447709 /source/blender/editors | |
parent | 670e6cab4319b94c96c6a61cb76199f1054b935a (diff) |
Farewell Scene->base
While getting rid of Scene->base we got the following fixes:
* Fix "Convert To" operator
* Fix "NLA allowing to selected objects that are not selectable
* Fix scene.objects (readonly, no option to link/unlink)
Note: Collada needs to use the context SceneLayer for adding objects
however I added a placeholder, so Collada maintainers can fix this
properly.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/animation/anim_channels_edit.c | 19 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_markers.c | 6 | ||||
-rw-r--r-- | source/blender/editors/include/ED_object.h | 8 | ||||
-rw-r--r-- | source/blender/editors/include/ED_screen.h | 6 | ||||
-rw-r--r-- | source/blender/editors/mesh/mesh_navmesh.c | 7 | ||||
-rw-r--r-- | source/blender/editors/object/object_add.c | 30 | ||||
-rw-r--r-- | source/blender/editors/object/object_relations.c | 26 | ||||
-rw-r--r-- | source/blender/editors/object/object_select.c | 25 | ||||
-rw-r--r-- | source/blender/editors/scene/scene_edit.c | 2 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_channels.c | 23 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/space_outliner.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 13 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 7 |
14 files changed, 102 insertions, 93 deletions
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 26ba61f0f20..e705d0268e3 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -2684,6 +2684,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index, { bDopeSheet *ads = (bDopeSheet *)ac->data; Scene *sce = (Scene *)ads->source; + SceneLayer *scene_layer = ac->scene_layer; BaseLegacy *base = (BaseLegacy *)ale->data; Object *ob = base->object; AnimData *adt = ob->adt; @@ -2691,30 +2692,30 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index, /* set selection status */ if (selectmode == SELECT_INVERT) { /* swap select */ - base->flag_legacy ^= SELECT; - BKE_scene_base_flag_sync_from_base(base); + ED_object_base_select(base, BA_INVERT); + BKE_scene_object_base_flag_sync_from_base(base); if (adt) adt->flag ^= ADT_UI_SELECTED; } else { - BaseLegacy *b; + Base *b; /* deselect all */ /* TODO: should this deselect all other types of channels too? */ - for (b = sce->base.first; b; b = b->next) { - b->flag_legacy &= ~SELECT; - BKE_scene_base_flag_sync_from_base(b); + for (b = scene_layer->object_bases.first; b; b = b->next) { + ED_object_base_select(b, BA_DESELECT); + BKE_scene_object_base_flag_sync_from_base(b); if (b->object->adt) b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE); } /* select object now */ - base->flag_legacy |= SELECT; - ob->flag |= SELECT; + ED_object_base_select(base, BA_SELECT); + BKE_scene_object_base_flag_sync_from_base(base); if (adt) adt->flag |= ADT_UI_SELECTED; } /* change active object - regardless of whether it is now selected [T37883] */ - ED_base_object_activate(C, base); /* adds notifier */ + ED_object_base_activate(C, base); /* adds notifier */ if ((adt) && (adt->flag & ADT_UI_SELECTED)) adt->flag |= ADT_UI_ACTIVE; diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index b24f48a10f9..4821fdd6af7 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -1143,13 +1143,13 @@ static int ed_marker_select(bContext *C, const wmEvent *event, bool extend, bool if (camera) { Scene *scene = CTX_data_scene(C); - SceneLayer *sl = CTX_data_scene_layer(C); + SceneLayer *scene_layer = CTX_data_scene_layer(C); Base *base; TimeMarker *marker; int sel = 0; if (!extend) - BKE_scene_base_deselect_all(scene); + BKE_scene_layer_base_deselect_all(scene_layer); for (marker = markers->first; marker; marker = marker->next) { if (marker->frame == cfra) { @@ -1161,7 +1161,7 @@ static int ed_marker_select(bContext *C, const wmEvent *event, bool extend, bool for (marker = markers->first; marker; marker = marker->next) { if (marker->camera) { if (marker->frame == cfra) { - base = BKE_scene_layer_base_find(sl, marker->camera); + base = BKE_scene_layer_base_find(scene_layer, marker->camera); if (base) { ED_object_base_select(base, sel); if (sel) diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 5e3c91e15ab..19c1588fe7e 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -83,6 +83,12 @@ typedef enum eParentType { PAR_VERTEX_TRI, } eParentType; +typedef enum eObjectSelect_Mode{ + BA_DESELECT = 0, + BA_SELECT = 1, + BA_INVERT = 2, +} eObjectSelect_Mode; + #ifdef __RNA_TYPES_H__ extern struct EnumPropertyItem prop_clear_parent_types[]; extern struct EnumPropertyItem prop_make_parent_types[]; @@ -104,7 +110,7 @@ void ED_base_object_select(struct BaseLegacy *base, short mode); /* includes notifier */ void ED_base_object_activate(struct bContext *C, struct BaseLegacy *base); -void ED_object_base_select(struct Base *base, short mode); +void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode); void ED_object_base_activate(struct bContext *C, struct Base *base); void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob); diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 8a1c7239955..f7219ce6846 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -49,6 +49,7 @@ struct WorkSpace; struct WorkSpaceInstanceHook; struct bContext; struct Scene; +struct SceneLayer; struct bScreen; struct ARegion; struct uiBlock; @@ -113,7 +114,10 @@ void ED_screen_draw(struct wmWindow *win); void ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win); void ED_screen_do_listen(struct bContext *C, struct wmNotifier *note); bool ED_screen_change(struct bContext *C, struct bScreen *sc); -void ED_screen_update_after_scene_change(const struct bScreen *screen, struct Scene *scene_new); +void ED_screen_update_after_scene_change( + const struct bScreen *screen, + struct Scene *scene_new, + struct SceneLayer *scene_layer); void ED_screen_set_subwinactive(struct bContext *C, const struct wmEvent *event); void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen); void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable); diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index e5705d2d3e7..8d60a94ee34 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -40,6 +40,7 @@ #include "BLI_math_vector.h" #include "BLI_linklist.h" +#include "BKE_layer.h" #include "BKE_library.h" #include "BKE_context.h" #include "BKE_mesh.h" @@ -337,7 +338,7 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, int i, j, k; unsigned short *v; int face[3]; - Scene *scene = CTX_data_scene(C); + SceneLayer *scene_layer = CTX_data_scene_layer(C); Object *obedit; int createob = base == NULL; int nverts, nmeshes, nvp; @@ -355,8 +356,8 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh, } else { obedit = base->object; - BKE_scene_base_deselect_all(scene); - BKE_scene_base_select(scene, base); + BKE_scene_layer_base_deselect_all(scene_layer); + BKE_scene_layer_base_select(scene_layer, base); copy_v3_v3(obedit->loc, co); copy_v3_v3(obedit->rot, rot); } diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index a761caab29b..ac24b106383 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1665,11 +1665,12 @@ static void curvetomesh(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, static int convert_poll(bContext *C) { - Object *obact = CTX_data_active_object(C); Scene *scene = CTX_data_scene(C); + Base *base_act = CTX_data_active_base(C); + Object *obact = base_act ? base_act->object : NULL; return (!ID_IS_LINKED(scene) && obact && scene->obedit != obact && - (obact->flag & SELECT) && !ID_IS_LINKED(obact)); + (base_act->flag & BASE_SELECTED) && !ID_IS_LINKED(obact)); } /* Helper for convert_exec */ @@ -1699,7 +1700,7 @@ static int convert_exec(bContext *C, wmOperator *op) SceneLayer *sl = CTX_data_scene_layer(C); EvaluationContext eval_ctx; Base *basen = NULL, *basact = NULL; - Object *ob, *ob1, *newob, *obact = CTX_data_active_object(C); + Object *ob1, *newob, *obact = CTX_data_active_object(C); DerivedMesh *dm; Curve *cu; Nurb *nu; @@ -1714,10 +1715,8 @@ static int convert_exec(bContext *C, wmOperator *op) /* don't forget multiple users! */ { - BaseLegacy *base; - - for (base = scene->base.first; base; base = base->next) { - ob = base->object; + FOREACH_SCENE_OBJECT(scene, ob) + { ob->flag &= ~OB_DONE; /* flag data thats not been edited (only needed for !keep_original) */ @@ -1736,6 +1735,7 @@ static int convert_exec(bContext *C, wmOperator *op) } } } + FOREACH_SCENE_OBJECT_END } ListBase selected_editable_bases = CTX_data_collection_get(C, "selected_editable_bases"); @@ -1745,8 +1745,8 @@ static int convert_exec(bContext *C, wmOperator *op) * on other objects data masks too, see: T50950. */ { for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { - BaseLegacy *base = link->ptr.data; - ob = base->object; + Base *base = link->ptr.data; + Object *ob = base->object; /* The way object type conversion works currently (enforcing conversion of *all* objetcs using converted * obdata, even some un-selected/hidden/inother scene ones, sounds totally bad to me. @@ -1770,8 +1770,8 @@ static int convert_exec(bContext *C, wmOperator *op) } for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) { - BaseLegacy *base = link->ptr.data; - ob = base->object; + Base *base = link->ptr.data; + Object *ob = base->object; if (ob->flag & OB_DONE || !IS_TAGGED(ob->data)) { if (ob->type != target) { @@ -1941,8 +1941,8 @@ static int convert_exec(bContext *C, wmOperator *op) else if (ob->type == OB_MBALL && target == OB_MESH) { Object *baseob; - base->flag &= ~SELECT; - ob->flag &= ~SELECT; + base->flag &= ~BASE_SELECTED; + ob->base_flag &= ~BASE_SELECTED; baseob = BKE_mball_basis_find(scene, ob); @@ -2007,8 +2007,8 @@ static int convert_exec(bContext *C, wmOperator *op) if (mballConverted) { FOREACH_SCENE_OBJECT(scene, ob_mball) { - if (ob->type == OB_MBALL) { - if (ob->flag & OB_DONE) { + if (ob_mball->type == OB_MBALL) { + if (ob_mball->flag & OB_DONE) { Object *ob_basis = NULL; if (BKE_mball_is_basis(ob_mball) || ((ob_basis = BKE_mball_basis_find(scene, ob_mball)) && (ob_basis->flag & OB_DONE))) diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index b9848a0cb4a..e2815bf2282 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -355,7 +355,6 @@ static int make_proxy_exec(bContext *C, wmOperator *op) if (ob) { Object *newob; - Base *newbase, *oldbase = BASACT_NEW(scene_layer); char name[MAX_ID_NAME + 4]; BLI_snprintf(name, sizeof(name), "%s_proxy", ((ID *)(gob ? gob : ob))->name + 2); @@ -364,16 +363,6 @@ static int make_proxy_exec(bContext *C, wmOperator *op) newob = BKE_object_add_from(bmain, scene, scene_layer, OB_EMPTY, name, gob ? gob : ob); /* set layers OK */ - newbase = BASACT_NEW(scene_layer); /* BKE_object_add sets active... */ - newbase->lay = oldbase->lay; - newob->lay = newbase->lay; - - /* remove base, leave user count of object, it gets linked in BKE_object_make_proxy */ - if (gob == NULL) { - BKE_scene_base_unlink(scene, oldbase); - MEM_freeN(oldbase); - } - BKE_object_make_proxy(newob, ob, gob); /* Set back pointer immediately so dependency graph knows that this is @@ -2048,12 +2037,13 @@ void ED_object_single_users(Main *bmain, Scene *scene, const bool full, const bo { IDP_RelinkProperty(scene->id.properties); - for (Base *base = scene->base.first; base; base = base->next) { - Object *ob = base->object; + FOREACH_SCENE_OBJECT(scene, ob) + { if (!ID_IS_LINKED(ob)) { IDP_RelinkProperty(ob->id.properties); } } + FOREACH_SCENE_OBJECT_END if (scene->nodetree) { IDP_RelinkProperty(scene->nodetree->id.properties); @@ -2236,15 +2226,15 @@ static int make_local_exec(bContext *C, wmOperator *op) /* Note: we (ab)use LIB_TAG_PRE_EXISTING to cherry pick which ID to make local... */ if (mode == MAKE_LOCAL_ALL) { - SceneLayer *sl = CTX_data_scene_layer(C); - SceneCollection *sc = CTX_data_scene_collection(C); + SceneLayer *scene_layer = CTX_data_scene_layer(C); + SceneCollection *scene_collection = CTX_data_scene_collection(C); BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, false); - /* de-select so the user can differentiate newly instanced from existing objects */ - BKE_scene_base_deselect_all(scene); + /* De-select so the user can differentiate newly instanced from existing objects. */ + BKE_scene_layer_base_deselect_all(scene_layer); - if (make_local_all__instance_indirect_unused(bmain, scene, sl, sc)) { + if (make_local_all__instance_indirect_unused(bmain, scene, scene_layer, scene_collection)) { BKE_report(op->reports, RPT_INFO, "Orphan library objects added to the current scene to avoid loss"); } } diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index d0c37fc108a..9da7154ae8d 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -127,16 +127,25 @@ void ED_base_object_activate(bContext *C, BaseLegacy *base) WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, NULL); } -void ED_object_base_select(Base *base, short mode) +void ED_object_base_select(Base *base, eObjectSelect_Mode mode) { + if (mode == BA_INVERT) { + mode = (base->flag & BASE_SELECTED) != 0 ? BA_DESELECT : BA_SELECT; + } + if (base) { - if (mode == BA_SELECT) { - if ((base->flag & BASE_SELECTABLED) != 0) { - base->flag |= BASE_SELECTED; - } - } - else if (mode == BA_DESELECT) { - base->flag &= ~BASE_SELECTED; + switch (mode) { + case BA_SELECT: + if ((base->flag & BASE_SELECTABLED) != 0) { + base->flag |= BASE_SELECTED; + } + break; + case BA_DESELECT: + base->flag &= ~BASE_SELECTED; + break; + case BA_INVERT: + /* Never happens. */ + break; } } } diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c index 4a104a330a4..dca4cc77e5b 100644 --- a/source/blender/editors/scene/scene_edit.c +++ b/source/blender/editors/scene/scene_edit.c @@ -132,7 +132,7 @@ void ED_scene_changed_update(Main *bmain, bContext *C, Scene *scene_new, const b DEG_graph_relations_update(depsgraph, bmain, scene_new); DEG_on_visible_update(bmain, false); - ED_screen_update_after_scene_change(active_screen, scene_new); + ED_screen_update_after_scene_change(active_screen, scene_new, layer_new); ED_render_engine_changed(bmain); ED_update_for_newframe(bmain, scene_new, depsgraph); diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 5e0afe0ec39..749a857fdaa 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -45,6 +45,7 @@ #include "BKE_icons.h" #include "BKE_image.h" #include "BKE_global.h" +#include "BKE_layer.h" #include "BKE_library.h" #include "BKE_library_remap.h" #include "BKE_main.h" @@ -1302,13 +1303,13 @@ bool ED_screen_change(bContext *C, bScreen *sc) return false; } -static void screen_set_3dview_camera(Scene *scene, ScrArea *sa, View3D *v3d) +static void screen_set_3dview_camera(Scene *scene, SceneLayer *scene_layer, ScrArea *sa, View3D *v3d) { /* fix any cameras that are used in the 3d view but not in the scene */ BKE_screen_view3d_sync(v3d, scene); - if (!v3d->camera || !BKE_scene_base_find(scene, v3d->camera)) { - v3d->camera = BKE_scene_camera_find(scene); + if (!v3d->camera || !BKE_scene_layer_base_find(scene_layer, v3d->camera)) { + v3d->camera = BKE_scene_layer_camera_find(scene_layer); // XXX if (sc == curscreen) handle_view3d_lock(); if (!v3d->camera) { ARegion *ar; @@ -1332,13 +1333,13 @@ static void screen_set_3dview_camera(Scene *scene, ScrArea *sa, View3D *v3d) } } -void ED_screen_update_after_scene_change(const bScreen *screen, Scene *scene_new) +void ED_screen_update_after_scene_change(const bScreen *screen, Scene *scene_new, SceneLayer *scene_layer) { for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { if (sl->spacetype == SPACE_VIEW3D) { View3D *v3d = (View3D *)sl; - screen_set_3dview_camera(scene_new, sa, v3d); + screen_set_3dview_camera(scene_new, scene_layer, sa, v3d); } } } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 48e822ef876..c1c9326b4ef 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -124,9 +124,8 @@ static int mouse_nla_channels(bContext *C, bAnimContext *ac, float x, int channe } case ANIMTYPE_OBJECT: { - bDopeSheet *ads = (bDopeSheet *)ac->data; - Scene *sce = (Scene *)ads->source; - BaseLegacy *base = (BaseLegacy *)ale->data; + SceneLayer *scene_layer = ac->scene_layer; + Base *base = (Base *)ale->data; Object *ob = base->object; AnimData *adt = ob->adt; @@ -134,30 +133,28 @@ static int mouse_nla_channels(bContext *C, bAnimContext *ac, float x, int channe /* set selection status */ if (selectmode == SELECT_INVERT) { /* swap select */ - base->flag_legacy ^= SELECT; - BKE_scene_base_flag_sync_from_base(base); + ED_object_base_select(base, BA_INVERT); + BKE_scene_object_base_flag_sync_from_base(base); if (adt) adt->flag ^= ADT_UI_SELECTED; } else { - BaseLegacy *b; - /* deselect all */ /* TODO: should this deselect all other types of channels too? */ - for (b = sce->base.first; b; b = b->next) { - b->flag_legacy &= ~SELECT; - BKE_scene_base_flag_sync_from_base(b); + for (Base *b = scene_layer->object_bases.first; b; b = b->next) { + ED_object_base_select(b, BA_DESELECT); + BKE_scene_object_base_flag_sync_from_base(b); if (b->object->adt) b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE); } /* select object now */ - base->flag_legacy |= SELECT; - ob->flag |= SELECT; + ED_object_base_select(base, BA_SELECT); + BKE_scene_object_base_flag_sync_from_base(base); if (adt) adt->flag |= ADT_UI_SELECTED; } /* change active object - regardless of whether it is now selected [T37883] */ - ED_base_object_activate(C, base); /* adds notifier */ + ED_object_base_activate(C, base); /* adds notifier */ if ((adt) && (adt->flag & ADT_UI_SELECTED)) adt->flag |= ADT_UI_ACTIVE; diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 346e567dd8d..229d999eb9e 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -39,6 +39,7 @@ #include "BLI_mempool.h" #include "BKE_context.h" +#include "BKE_layer.h" #include "BKE_screen.h" #include "BKE_scene.h" #include "BKE_outliner_treehash.h" @@ -122,8 +123,17 @@ static int outliner_parent_drop_poll(bContext *C, wmDrag *drag, const wmEvent *e * element for object it means that all displayed objects belong to * active scene and parenting them is allowed (sergey) */ - if (!scene || BKE_scene_base_find(scene, (Object *)id)) { + if (!scene) { return 1; + } else { + for (SceneLayer *scene_layer = scene->render_layers.first; + scene_layer; + scene_layer = scene_layer->next) + { + if (BKE_scene_layer_base_find(scene_layer, (Object *)id)) { + return 1; + } + } } } else if (ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION)) { diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 9fe35d57168..0ec41fed13f 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -787,24 +787,13 @@ static void *view3d_main_region_duplicate(void *poin) return NULL; } -static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, const Scene *scene) +static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, const Scene *UNUSED(scene)) { wmWindow *win = wmn->wm->winactive; unsigned int lay_used = 0; - BaseLegacy *base; if (!win) return; - base = scene->base.first; - while (base) { - lay_used |= base->lay & ((1 << 20) - 1); /* ignore localview */ - - if (lay_used == (1 << 20) - 1) - break; - - base = base->next; - } - const bScreen *screen = WM_window_get_active_screen(win); for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { if (sa->spacetype == SPACE_VIEW3D) { diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index b157dd7f1e8..15ac7ec1174 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -52,6 +52,7 @@ #include "BKE_camera.h" #include "BKE_context.h" #include "BKE_font.h" +#include "BKE_layer.h" #include "BKE_library.h" #include "BKE_object.h" #include "BKE_paint.h" @@ -3914,7 +3915,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) ARegion *ar; RegionView3D *rv3d; Scene *scene = CTX_data_scene(C); - SceneLayer *sl = CTX_data_scene_layer(C); + SceneLayer *scene_layer = CTX_data_scene_layer(C); static int perspo = RV3D_PERSP; int viewnum, nextperspo; bool align_active; @@ -3949,7 +3950,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) /* lastview - */ if (rv3d->persp != RV3D_CAMOB) { - Object *ob = OBACT_NEW(sl); + Object *ob = OBACT_NEW(scene_layer); if (!rv3d->smooth_timer) { /* store settings of current view before allowing overwriting with camera view @@ -3984,7 +3985,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) v3d->camera = ob; if (v3d->camera == NULL) - v3d->camera = BKE_scene_camera_find(scene); + v3d->camera = BKE_scene_layer_camera_find(scene_layer); /* couldnt find any useful camera, bail out */ if (v3d->camera == NULL) |