diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-06-12 00:47:00 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-06-12 00:47:00 +0300 |
commit | 7dae8e54cc6d3783ff78f2f4f9674bd4219f652c (patch) | |
tree | dc8aba540aa3ff2970903933a989dc0db4486247 /source/blender | |
parent | 774e034d40f9494a2523076992fc19e534ecfb17 (diff) |
Fix wrong proxy pointer hanging around after making all local
The issue was caused because of the following circumstances:
- Making All Local will just iterate all IDs and clear linked flags
- It will not do anything with objects which are already local (and
since proxy rig is local nothing will be changing it).
This commit makes it so id_clear_lib_data() takes care of clearing
all related proxy pointers, avoiding situations when proxy rig will
point to a local armature.
Reviewers: campbellbarton
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D1276
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index bf6f7a5f22c..39bcf519f95 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -1421,6 +1421,15 @@ void id_clear_lib_data(Main *bmain, ID *id) if (ntree) { ntree->id.lib = NULL; } + + if (GS(id->name) == ID_OB) { + Object *object = (Object*)id; + if (object->proxy_from != NULL) { + object->proxy_from->proxy = NULL; + object->proxy_from->proxy_group = NULL; + } + object->proxy = object->proxy_from = object->proxy_group = NULL; + } } /* next to indirect usage in read/writefile also in editobject.c scene.c */ diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index a11f83876a4..647aadf237c 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1609,7 +1609,7 @@ void BKE_object_make_local(Object *ob) if (ob->id.lib == NULL) return; - ob->proxy = ob->proxy_from = NULL; + ob->proxy = ob->proxy_from = ob->proxy_group = NULL; if (ob->id.us == 1) { id_clear_lib_data(bmain, &ob->id); |