diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-07-12 01:01:38 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-07-12 01:07:44 +0300 |
commit | cfbd605567f48229a923df382baf6db98fbafc61 (patch) | |
tree | d4218c49672047d6c3b37517034660b3b5dcd966 /source/blender/blenkernel/intern/camera.c | |
parent | 71a57a37b2eebbed53b5335019287b4df9c30519 (diff) | |
parent | 7212ebd09f9720883581221be923ae5e97ff5d76 (diff) |
Merge branch 'master' into blender2.8
Conflicts:
intern/cycles/blender/addon/ui.py
source/blender/blenkernel/BKE_particle.h
source/blender/blenkernel/intern/dynamicpaint.c
source/blender/blenkernel/intern/library.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/particle_distribute.c
source/blender/blenkernel/intern/texture.c
source/blender/editors/object/object_add.c
source/blender/editors/object/object_relations.c
source/blender/editors/physics/particle_edit.c
source/blender/editors/physics/particle_object.c
source/blender/editors/transform/transform_snap_object.c
Diffstat (limited to 'source/blender/blenkernel/intern/camera.c')
-rw-r--r-- | source/blender/blenkernel/intern/camera.c | 58 |
1 files changed, 21 insertions, 37 deletions
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index eabee742327..ae7aac8b54f 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -49,6 +49,8 @@ #include "BKE_object.h" #include "BKE_global.h" #include "BKE_library.h" +#include "BKE_library_query.h" +#include "BKE_library_remap.h" #include "BKE_main.h" #include "BKE_scene.h" #include "BKE_screen.h" @@ -91,64 +93,46 @@ void *BKE_camera_add(Main *bmain, const char *name) return cam; } -Camera *BKE_camera_copy(Camera *cam) +Camera *BKE_camera_copy(Main *bmain, Camera *cam) { Camera *camn; - camn = BKE_libblock_copy(&cam->id); + camn = BKE_libblock_copy(bmain, &cam->id); - id_lib_extern((ID *)camn->dof_ob); - - if (cam->id.lib) { - BKE_id_lib_local_paths(G.main, cam->id.lib, &camn->id); + if (ID_IS_LINKED_DATABLOCK(cam)) { + BKE_id_expand_local(&camn->id); + BKE_id_lib_local_paths(bmain, cam->id.lib, &camn->id); } return camn; } -void BKE_camera_make_local(Camera *cam) +void BKE_camera_make_local(Main *bmain, Camera *cam) { - Main *bmain = G.main; - Object *ob; bool is_local = false, is_lib = false; /* - only lib users: do nothing * - only local users: set flag * - mixed: make copy */ - - if (cam->id.lib == NULL) return; - if (cam->id.us == 1) { - id_clear_lib_data(bmain, &cam->id); + + if (!ID_IS_LINKED_DATABLOCK(cam)) { return; } - - for (ob = bmain->object.first; ob && ELEM(0, is_lib, is_local); ob = ob->id.next) { - if (ob->data == cam) { - if (ob->id.lib) is_lib = true; - else is_local = true; - } - } - - if (is_local && is_lib == false) { - id_clear_lib_data(bmain, &cam->id); - } - else if (is_local && is_lib) { - Camera *cam_new = BKE_camera_copy(cam); - cam_new->id.us = 0; + BKE_library_ID_test_usages(bmain, cam, &is_local, &is_lib); + + if (is_local) { + if (!is_lib) { + id_clear_lib_data(bmain, &cam->id); + BKE_id_expand_local(&cam->id); + } + else { + Camera *cam_new = BKE_camera_copy(bmain, cam); - /* Remap paths of new ID using old library as base. */ - BKE_id_lib_local_paths(bmain, cam->id.lib, &cam_new->id); + cam_new->id.us = 0; - for (ob = bmain->object.first; ob; ob = ob->id.next) { - if (ob->data == cam) { - if (ob->id.lib == NULL) { - ob->data = cam_new; - id_us_plus(&cam_new->id); - id_us_min(&cam->id); - } - } + BKE_libblock_remap(bmain, cam, cam_new, ID_REMAP_SKIP_INDIRECT_USAGE); } } } |