diff options
author | Sergej Reich <sergej.reich@googlemail.com> | 2013-02-09 14:04:25 +0400 |
---|---|---|
committer | Sergej Reich <sergej.reich@googlemail.com> | 2013-02-09 14:04:25 +0400 |
commit | 6738c941ffc68f25f93eb219c4c3c3ddc3cf7c4c (patch) | |
tree | 46717f287b900b0612dc191a3c3c0c152654970f /source/blender/blenkernel/intern | |
parent | 777fb934a7e1645a4df76f40b1d1f1f712c74c62 (diff) |
rigidbody: Relink constraints when duplicating objects
This will preserve constraint <-> rigid body realationships so
constraint setups aren't broken after duplication.
Based on a patch by Brandon Hechinger (jaggz), thanks.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/rigidbody.c | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 2312d801e0d..87457621ced 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -3185,6 +3185,9 @@ void BKE_object_relink(Object *ob) if (ob->adt) BKE_relink_animdata(ob->adt); + + if (ob->rigidbody_constraint) + BKE_rigidbody_relink_constraint(ob->rigidbody_constraint); ID_NEW(ob->parent); diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c index 58afc658867..24355149926 100644 --- a/source/blender/blenkernel/intern/rigidbody.c +++ b/source/blender/blenkernel/intern/rigidbody.c @@ -203,8 +203,6 @@ RigidBodyCon *BKE_rigidbody_copy_constraint(Object *ob) /* just duplicate the whole struct first (to catch all the settings) */ rbcN = MEM_dupallocN(ob->rigidbody_constraint); - // RB_TODO be more clever about copying constrained objects - /* tag object as needing to be verified */ rbcN->flag |= RBC_FLAG_NEEDS_VALIDATE; @@ -216,6 +214,13 @@ RigidBodyCon *BKE_rigidbody_copy_constraint(Object *ob) return rbcN; } +/* preserve relationships between constraints and rigid bodies after duplication */ +void BKE_rigidbody_relink_constraint(RigidBodyCon *rbc) +{ + ID_NEW(rbc->ob1); + ID_NEW(rbc->ob2); +} + /* ************************************** */ /* Setup Utilities - Validate Sim Instances */ @@ -1291,6 +1296,7 @@ void BKE_rigidbody_free_object(Object *ob) {} void BKE_rigidbody_free_constraint(Object *ob) {} struct RigidBodyOb *BKE_rigidbody_copy_object(Object *ob) { return NULL; } struct RigidBodyCon *BKE_rigidbody_copy_constraint(Object *ob) { return NULL; } +void BKE_rigidbody_relink_constraint(RigidBodyCon *rbc) {} void BKE_rigidbody_validate_sim_shape(Object *ob, short rebuild) {} void BKE_rigidbody_validate_sim_object(RigidBodyWorld *rbw, Object *ob, short rebuild) {} void BKE_rigidbody_validate_sim_constraint(RigidBodyWorld *rbw, Object *ob, short rebuild) {} |