Commit: 206c94fea98d44ed9667607638c455c7c0e63822
Author: Dalai Felinto
Date:   Wed Nov 8 12:16:49 2017 -0200
Branches: blender2.8
https://developer.blender.org/rB206c94fea98d44ed9667607638c455c7c0e63822

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.

===================================================================

M       source/blender/blenkernel/BKE_layer.h
M       source/blender/blenkernel/BKE_object.h
M       source/blender/blenkernel/BKE_scene.h
M       source/blender/blenkernel/intern/blender_copybuffer.c
M       source/blender/blenkernel/intern/camera.c
M       source/blender/blenkernel/intern/group.c
M       source/blender/blenkernel/intern/layer.c
M       source/blender/blenkernel/intern/library_query.c
M       source/blender/blenkernel/intern/library_remap.c
M       source/blender/blenkernel/intern/object.c
M       source/blender/blenkernel/intern/scene.c
M       source/blender/blenkernel/intern/tracking.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/versioning_250.c
M       source/blender/blenloader/intern/writefile.c
M       source/blender/collada/DocumentImporter.cpp
M       source/blender/collada/EffectExporter.cpp
M       source/blender/collada/collada_utils.cpp
M       source/blender/editors/animation/anim_channels_edit.c
M       source/blender/editors/animation/anim_markers.c
M       source/blender/editors/include/ED_object.h
M       source/blender/editors/include/ED_screen.h
M       source/blender/editors/mesh/mesh_navmesh.c
M       source/blender/editors/object/object_add.c
M       source/blender/editors/object/object_relations.c
M       source/blender/editors/object/object_select.c
M       source/blender/editors/scene/scene_edit.c
M       source/blender/editors/screen/screen_edit.c
M       source/blender/editors/space_nla/nla_channels.c
M       source/blender/editors/space_outliner/space_outliner.c
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/editors/space_view3d/view3d_edit.c
M       
source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M       source/blender/makesdna/DNA_object_types.h
M       source/blender/makesdna/DNA_scene_types.h
M       source/blender/makesrna/intern/rna_object.c
M       source/blender/makesrna/intern/rna_object_api.c
M       source/blender/makesrna/intern/rna_scene.c
M       source/blender/render/intern/source/pipeline.c
M       source/blenderplayer/bad_level_call_stubs/stubs.c
M       source/gameengine/Ketsji/KX_Light.cpp

===================================================================

diff --git a/source/blender/blenkernel/BKE_layer.h 
b/source/blender/blenkernel/BKE_layer.h
index 1585742729c..aa2a2167b95 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -67,8 +67,10 @@ void BKE_scene_layer_free(struct SceneLayer *sl);
 
 void BKE_scene_layer_selected_objects_tag(struct SceneLayer *sl, const int 
tag);
 
+struct Object *BKE_scene_layer_camera_find(struct SceneLayer *sl);
 struct SceneLayer *BKE_scene_layer_find_from_collection(const struct Scene 
*scene, struct LayerCollection *lc);
 struct Base *BKE_scene_layer_base_find(struct SceneLayer *sl, struct Object 
*ob);
+struct Base *BKE_scene_layer_base_find_by_name(struct SceneLayer *sl, struct 
Object *ob);
 void BKE_scene_layer_base_deselect_all(struct SceneLayer *sl);
 void BKE_scene_layer_base_select(struct SceneLayer *sl, struct Base *selbase);
 
diff --git a/source/blender/blenkernel/BKE_object.h 
b/source/blender/blenkernel/BKE_object.h
index 5dcd22190ac..380da4530b9 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -63,7 +63,6 @@ void BKE_object_free_particlesystems(struct Object *ob);
 void BKE_object_free_softbody(struct Object *ob);
 void BKE_object_free_bulletsoftbody(struct Object *ob);
 void BKE_object_free_curve_cache(struct Object *ob);
-void BKE_object_update_base_layer(struct Scene *scene, struct Object *ob);
 
 void BKE_object_free(struct Object *ob);
 void BKE_object_free_derived_caches(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_scene.h 
b/source/blender/blenkernel/BKE_scene.h
index b9e88d02efc..04761b3fa9e 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -88,13 +88,8 @@ struct Scene *BKE_scene_add(struct Main *bmain, const char 
*name);
 
 void BKE_scene_remove_rigidbody_object(struct Scene *scene, struct Object *ob);
 
-/* base functions */
-struct BaseLegacy *BKE_scene_base_find_by_name(struct Scene *scene, const char 
*name);
-struct BaseLegacy *BKE_scene_base_find(struct Scene *scene, struct Object *ob);
-struct BaseLegacy *BKE_scene_base_add(struct Scene *sce, struct Object *ob);
-void         BKE_scene_base_unlink(struct Scene *sce, struct BaseLegacy *base);
-void         BKE_scene_base_deselect_all(struct Scene *sce);
-void         BKE_scene_base_select(struct Scene *sce, struct BaseLegacy 
*selbase);
+bool BKE_scene_object_find(struct Scene *scene, struct Object *ob);
+struct Object *BKE_scene_object_find_by_name(struct Scene *scene, const char 
*name);
 
 /* Scene base iteration function.
  * Define struct here, so no need to bother with alloc/free it.
@@ -129,7 +124,6 @@ void BKE_scene_make_local(struct Main *bmain, struct Scene 
*sce, const bool lib_
 
 struct Scene *BKE_scene_find_from_collection(const struct Main *bmain, const 
struct SceneCollection *scene_collection);
 
-struct Object *BKE_scene_camera_find(struct Scene *sc);
 #ifdef DURIAN_CAMERA_SWITCH
 struct Object *BKE_scene_camera_switch_find(struct Scene *scene); // 
DURIAN_CAMERA_SWITCH
 #endif
diff --git a/source/blender/blenkernel/intern/blender_copybuffer.c 
b/source/blender/blenkernel/intern/blender_copybuffer.c
index 2d37f3ab0cb..f249765e016 100644
--- a/source/blender/blenkernel/intern/blender_copybuffer.c
+++ b/source/blender/blenkernel/intern/blender_copybuffer.c
@@ -45,6 +45,7 @@
 #include "BKE_blendfile.h"
 #include "BKE_context.h"
 #include "BKE_global.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
 #include "BKE_scene.h"
@@ -119,7 +120,7 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, 
const short flag, Re
 {
        Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
-       SceneLayer *sl = CTX_data_scene_layer(C);
+       SceneLayer *scene_layer = CTX_data_scene_layer(C);
        Main *mainl = NULL;
        Library *lib;
        BlendHandle *bh;
@@ -131,7 +132,7 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, 
const short flag, Re
                return false;
        }
 
-       BKE_scene_base_deselect_all(scene);
+       BKE_scene_layer_base_deselect_all(scene_layer);
 
        /* tag everything, all untagged data can be made local
         * its also generally useful to know what is new
@@ -144,7 +145,7 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, 
const short flag, Re
 
        BLO_library_link_copypaste(mainl, bh);
 
-       BLO_library_link_end(mainl, &bh, flag, scene, sl);
+       BLO_library_link_end(mainl, &bh, flag, scene, scene_layer);
 
        /* mark all library linked objects to be updated */
        BKE_main_lib_objects_recalc_all(bmain);
diff --git a/source/blender/blenkernel/intern/camera.c 
b/source/blender/blenkernel/intern/camera.c
index ac004e58785..d9280a84678 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -49,6 +49,7 @@
 #include "BKE_camera.h"
 #include "BKE_object.h"
 #include "BKE_global.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_library_query.h"
 #include "BKE_library_remap.h"
@@ -885,9 +886,9 @@ static Object *camera_multiview_advanced(Scene *scene, 
Object *camera, const cha
        }
 
        if (name[0] != '\0') {
-               BaseLegacy *base = BKE_scene_base_find_by_name(scene, name);
-               if (base) {
-                       return base->object;
+               Object *ob = BKE_scene_object_find_by_name(scene, name);
+               if (ob != NULL) {
+                       return ob;
                }
        }
 
@@ -1018,4 +1019,4 @@ void BKE_camera_background_image_clear(Camera *cam)
 
                bgpic = next_bgpic;
        }
-}
\ No newline at end of file
+}
diff --git a/source/blender/blenkernel/intern/group.c 
b/source/blender/blenkernel/intern/group.c
index 5ccbe9f7054..5e5f8114ead 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -51,7 +51,7 @@
 #include "BKE_library.h"
 #include "BKE_main.h"
 #include "BKE_object.h"
-#include "BKE_scene.h" /* BKE_scene_base_find */
+#include "BKE_scene.h"
 
 static void free_group_object(GroupObject *go)
 {
diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index 3544cf02afb..c6ee00c5839 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -203,6 +203,24 @@ static bool 
find_scene_collection_in_scene_collections(ListBase *lb, const Layer
        return false;
 }
 
+/**
+ * Fallback for when a Scene has no camera to use
+ *
+ * \param scene_layer: in general you want to use the same SceneLayer that is 
used
+ * for depsgraph. If rendering you pass the scene active layer, when viewing 
in the viewport
+ * you want to get SceneLayer from context.
+ */
+Object *BKE_scene_layer_camera_find(SceneLayer *scene_layer)
+{
+       for (Base *base = scene_layer->object_bases.first; base; base = 
base->next) {
+               if (base->object->type == OB_CAMERA) {
+                       return base->object;
+               }
+       }
+
+       return NULL;
+}
+
 /**
  * Find the SceneLayer a LayerCollection belongs to
  */
diff --git a/source/blender/blenkernel/intern/library_query.c 
b/source/blender/blenkernel/intern/library_query.c
index c59fd1b4085..3b870fbc234 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -408,7 +408,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, 
LibraryIDLinkCallback call
                                Scene *scene = (Scene *) id;
                                ToolSettings *toolsett = scene->toolsettings;
                                SceneRenderLayer *srl;
-                               BaseLegacy *legacy_base;
 
                                CALLBACK_INVOKE(scene->camera, IDWALK_CB_NOP);
                                CALLBACK_INVOKE(scene->world, IDWALK_CB_USER);
@@ -466,10 +465,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, 
LibraryIDLinkCallback call
 
                                CALLBACK_INVOKE(scene->gpd, IDWALK_CB_USER);
 
-                               for (legacy_base = scene->base.first; 
legacy_base; legacy_base = legacy_base->next) {
-                                       CALLBACK_INVOKE(legacy_base->object, 
IDWALK_CB_USER);
-                               }
-
                                FOREACH_SCENE_COLLECTION(scene, sc)
                                {
                                        for (LinkData *link = 
sc->objects.first; link; link = link->next) {
diff --git a/source/blender/blenkernel/intern/library_remap.c 
b/source/blender/blenkernel/intern/library_remap.c
index 13975dbcdeb..e897f3c5330 100644
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@ -85,6 +85,7 @@
 #include "BKE_key.h"
 #include "BKE_lamp.h"
 #include "BKE_lattice.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_library_query.h"
 #include "BKE_library_remap.h"
@@ -256,24 +257,6 @@ static int foreach_libblock_remap_callback(void 
*user_data, ID *id_self, ID **id
        return IDWALK_RET_NOP;
 }
 
-/* Some remapping unfortunately require extra and/or specific handling, tackle 
those here. */
-static void libblock_remap_data_preprocess_scene_base_unlink(
-        IDRemap *r_id_remap_data, Scene *sce, BaseLegacy *base, const bool 
skip_indirect, const bool is_indirect)
-{
-       if (skip_indirect && is_indirect) {
-               r_id_remap_data->skipped_indirect++;
-               r_id_remap_data->skipped_refcounted++;
-       }
-       else {
-               id_us_min((ID *)base->object);
-               BKE_scene_base_unlink(sce, base);
-               MEM_freeN(base);
-               if (!is_indirect) {
-                       r_id_remap_data->status |= ID_REMAP_IS_LINKED_DIRECT;
-               }
-       }
-}
-
 /* Some remapping unfortunately require extra and/or specific handling, tackle 
those here. */
 static void libblock_remap_data_preprocess_scene_object_unlink(
         IDRemap *r_id_remap_data, Scene *sce, Object *ob, const bool 
skip_indirect, const bool is_indirect)
@@ -310,27 +293,12 @@ static void libblock_remap_data_preprocess(IDRemap 
*r_id_remap_data)
                                                            r_id_remap_data, 
sce, ob_iter, skip_indirect, is_indirect);
                                        }
                                        FOREACH_SCENE_OBJECT_END
-
-
-                                       BaseLegacy *base, *base_next;
-                                       for (base = sce->base.first; base; base 
= base_next) {
-                                               base_next = base->next;
-                                               
libblock_remap_data_preprocess_scene_base_unlink(
-                                                           r_id_remap_data, 
sce, base, skip_indirect, is_indirect);
-                                       }
                                }
                                else if (GS(r_id_remap_data->old_id->name) == 
ID_OB) {
                                        /* ... a specific object from scene. */
                                        Object *old_ob = (Object 
*)r_id_remap_data->old_id;
-
                                        
libblock_remap_data_preprocess_scene_object_unlink(
                                                    r_id_remap_data, sce, 
old_ob, skip_indirect, is_indirect);
-
-                                       BaseLegacy *base = 
BKE_scene_base_find(sce, old_ob);
-                                       if (base) {
-                       

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to