[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54405] trunk/blender/source/blender/ blenkernel: rigidbody: Relink constraints when duplicating objects

Sergej Reich sergej.reich at googlemail.com
Sat Feb 9 11:04:25 CET 2013


Revision: 54405
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54405
Author:   sergof
Date:     2013-02-09 10:04:25 +0000 (Sat, 09 Feb 2013)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_rigidbody.h
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/rigidbody.c

Modified: trunk/blender/source/blender/blenkernel/BKE_rigidbody.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_rigidbody.h	2013-02-09 10:04:23 UTC (rev 54404)
+++ trunk/blender/source/blender/blenkernel/BKE_rigidbody.h	2013-02-09 10:04:25 UTC (rev 54405)
@@ -52,6 +52,7 @@
 
 struct RigidBodyOb *BKE_rigidbody_copy_object(struct Object *ob);
 struct RigidBodyCon *BKE_rigidbody_copy_constraint(struct Object *ob);
+void BKE_rigidbody_relink_constraint(struct RigidBodyCon *rbc);
 
 /* -------------- */
 /* Setup */

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2013-02-09 10:04:23 UTC (rev 54404)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2013-02-09 10:04:25 UTC (rev 54405)
@@ -3185,6 +3185,9 @@
 
 	if (ob->adt)
 		BKE_relink_animdata(ob->adt);
+	
+	if (ob->rigidbody_constraint)
+		BKE_rigidbody_relink_constraint(ob->rigidbody_constraint);
 
 	ID_NEW(ob->parent);
 

Modified: trunk/blender/source/blender/blenkernel/intern/rigidbody.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/rigidbody.c	2013-02-09 10:04:23 UTC (rev 54404)
+++ trunk/blender/source/blender/blenkernel/intern/rigidbody.c	2013-02-09 10:04:25 UTC (rev 54405)
@@ -203,8 +203,6 @@
 		/* 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 @@
 	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_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) {}




More information about the Bf-blender-cvs mailing list