diff options
author | Nathan Craddock <nzcraddock@gmail.com> | 2020-09-16 00:09:41 +0300 |
---|---|---|
committer | Nathan Craddock <nzcraddock@gmail.com> | 2020-09-16 00:29:19 +0300 |
commit | f4a2024c448568badb44709b342d4f47002c456b (patch) | |
tree | e775facaee5396ef2982e8a5cb8295ea9d1787c3 | |
parent | 4d04a345a618165f587ab7e5f396f92a13c5731a (diff) |
Constraints: Add link and copy functions
Add functions to copy a single constraint between objects or between
bones, and another function to link constraints. This is in preparation
for constraint drag and drop in the outliner.
Differential Revision: https://developer.blender.org/D8642
-rw-r--r-- | source/blender/editors/include/ED_object.h | 12 | ||||
-rw-r--r-- | source/blender/editors/object/object_constraint.c | 28 |
2 files changed, 40 insertions, 0 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 282df25172f..fcf18f306e1 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -346,6 +346,18 @@ void ED_object_constraint_dependency_tag_update(struct Main *bmain, bool ED_object_constraint_move_to_index(struct Object *ob, struct bConstraint *con, const int index); +void ED_object_constraint_link(struct Main *bmain, + struct Object *ob_dst, + struct ListBase *dst, + struct ListBase *src); +void ED_object_constraint_copy_for_object(struct Main *bmain, + struct Object *ob_dst, + struct bConstraint *con); +void ED_object_constraint_copy_for_pose(struct Main *bmain, + struct Object *ob_dst, + struct bPoseChannel *pchan, + struct bConstraint *con); + /* object_modes.c */ bool ED_object_mode_compat_test(const struct Object *ob, eObjectMode mode); bool ED_object_mode_compat_set(struct bContext *C, diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index f0a320e42cf..b062ae0c698 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -1436,6 +1436,34 @@ bool ED_object_constraint_move_to_index(Object *ob, bConstraint *con, const int return true; } + +void ED_object_constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src) +{ + BKE_constraints_free(dst); + BKE_constraints_copy(dst, src, true); + LISTBASE_FOREACH (bConstraint *, con, dst) { + ED_object_constraint_dependency_tag_update(bmain, ob_dst, con); + } + WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, NULL); +} + +void ED_object_constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con) +{ + BKE_constraint_copy_for_object(ob_dst, con); + ED_object_constraint_dependency_tag_update(bmain, ob_dst, con); + WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob_dst); +} + +void ED_object_constraint_copy_for_pose(Main *bmain, + Object *ob_dst, + bPoseChannel *pchan, + bConstraint *con) +{ + BKE_constraint_copy_for_pose(ob_dst, pchan, con); + ED_object_constraint_dependency_tag_update(bmain, ob_dst, con); + WM_main_add_notifier(NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob_dst); +} + /** \} */ /* ------------------------------------------------------------------- */ |