[Bf-blender-cvs] [da8b4f9] particles_refactor: Moved transform utility functions for objects into the rigidbody_objects source file.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:07:10 CEST 2014


Commit: da8b4f91129c30a5bcb8845155a52b0d62285c28
Author: Lukas Tönne
Date:   Tue Apr 1 17:16:08 2014 +0200
https://developer.blender.org/rBda8b4f91129c30a5bcb8845155a52b0d62285c28

Moved transform utility functions for objects into the rigidbody_objects
source file.

Renamed them a bit to make clear these are for objects only.

===================================================================

M	source/blender/blenkernel/BKE_rigidbody.h
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/blenkernel/intern/rigidbody_objects.c
M	source/blender/editors/transform/transform_conversions.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h
index 1b5f390..53178de 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -96,8 +96,6 @@ void BKE_rigidbody_remove_constraint(struct Scene *scene, struct Object *ob);
 /* -------------- */
 /* Simulation */
 
-void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle);
-void BKE_rigidbody_apply_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
 bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime);
 void BKE_rigidbody_cache_reset(struct RigidBodyWorld *rbw);
 void BKE_rigidbody_rebuild_world(struct Scene *scene, float ctime);
@@ -109,5 +107,7 @@ void BKE_rigidbody_do_simulation(struct Scene *scene, float ctime);
 
 void BKE_rigidbody_objects_build(struct Scene *scene, struct RigidBodyWorld *rbw, bool rebuild);
 void BKE_rigidbody_objects_apply(struct Scene *scene, struct RigidBodyWorld *rbw);
+void BKE_rigidbody_object_aftertrans_update(struct Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle);
+void BKE_rigidbody_object_apply_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
 
 #endif /* __BKE_RIGIDBODY_H__ */
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 913ad4e..7585691 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2343,7 +2343,7 @@ void BKE_object_where_is_calc_time_ex(Scene *scene, Object *ob, float ctime,
 	/* try to fall back to the scene rigid body world if none given */
 	rbw = rbw ? rbw : scene->rigidbody_world;
 	/* read values pushed into RBO from sim/cache... */
-	BKE_rigidbody_apply_transforms(rbw, ob, ctime);
+	BKE_rigidbody_object_apply_transforms(rbw, ob, ctime);
 	
 	/* solve constraints */
 	if (ob->constraints.first && !(ob->transflag & OB_NO_CONSTRAINTS)) {
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index a5e2e70..c7f563a 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1279,66 +1279,6 @@ bool BKE_rigidbody_check_sim_running(RigidBodyWorld *rbw, float ctime)
 	return (rbw && (rbw->flag & RBW_FLAG_MUTED) == 0 && ctime > rbw->pointcache->startframe);
 }
 
-/* Sync rigid body and object transformations */
-void BKE_rigidbody_apply_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
-{
-	RigidBodyOb *rbo = ob->rigidbody_object;
-
-	/* keep original transform for kinematic and passive objects */
-	if (ELEM(NULL, rbw, rbo) || rbo->flag & RBO_FLAG_KINEMATIC || rbo->type == RBO_TYPE_PASSIVE)
-		return;
-
-	/* use rigid body transform after cache start frame if objects is not being transformed */
-	if (BKE_rigidbody_check_sim_running(rbw, ctime) && !(ob->flag & SELECT && G.moving & G_TRANSFORM_OBJ)) {
-		float mat[4][4], size_mat[4][4], size[3];
-
-		normalize_qt(rbo->orn); // RB_TODO investigate why quaternion isn't normalized at this point
-		quat_to_mat4(mat, rbo->orn);
-		copy_v3_v3(mat[3], rbo->pos);
-
-		mat4_to_size(size, ob->obmat);
-		size_to_mat4(size_mat, size);
-		mul_m4_m4m4(mat, mat, size_mat);
-
-		copy_m4_m4(ob->obmat, mat);
-	}
-	/* otherwise set rigid body transform to current obmat */
-	else {
-		mat4_to_loc_quat(rbo->pos, rbo->orn, ob->obmat);
-	}
-}
-
-/* Used when canceling transforms - return rigidbody and object to initial states */
-void BKE_rigidbody_aftertrans_update(Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle)
-{
-	RigidBodyOb *rbo = ob->rigidbody_object;
-
-	/* return rigid body and object to their initial states */
-	copy_v3_v3(rbo->pos, ob->loc);
-	copy_v3_v3(ob->loc, loc);
-
-	if (ob->rotmode > 0) {
-		eulO_to_quat(rbo->orn, ob->rot, ob->rotmode);
-		copy_v3_v3(ob->rot, rot);
-	}
-	else if (ob->rotmode == ROT_MODE_AXISANGLE) {
-		axis_angle_to_quat(rbo->orn, ob->rotAxis, ob->rotAngle);
-		copy_v3_v3(ob->rotAxis, rotAxis);
-		ob->rotAngle = rotAngle;
-	}
-	else {
-		copy_qt_qt(rbo->orn, ob->quat);
-		copy_qt_qt(ob->quat, quat);
-	}
-	if (rbo->physics_object) {
-		/* allow passive objects to return to original transform */
-		if (rbo->type == RBO_TYPE_PASSIVE)
-			RB_body_set_kinematic_state(rbo->physics_object, true);
-		RB_body_set_loc_rot(rbo->physics_object, rbo->pos, rbo->orn);
-	}
-	// RB_TODO update rigid body physics object's loc/rot for dynamic objects here as well (needs to be done outside bullet's update loop)
-}
-
 void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw)
 {
 	if (rbw)
diff --git a/source/blender/blenkernel/intern/rigidbody_objects.c b/source/blender/blenkernel/intern/rigidbody_objects.c
index a39f140..fb688bc 100644
--- a/source/blender/blenkernel/intern/rigidbody_objects.c
+++ b/source/blender/blenkernel/intern/rigidbody_objects.c
@@ -277,3 +277,66 @@ void BKE_rigidbody_objects_apply(Scene *scene, RigidBodyWorld *rbw)
 		rigidbody_world_apply_object(scene, ob);
 	}
 }
+
+/* ------------------------ */
+/* transform utilities */
+
+/* Sync rigid body and object transformations */
+void BKE_rigidbody_object_apply_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
+{
+	RigidBodyOb *rbo = ob->rigidbody_object;
+
+	/* keep original transform for kinematic and passive objects */
+	if (ELEM(NULL, rbw, rbo) || rbo->flag & RBO_FLAG_KINEMATIC || rbo->type == RBO_TYPE_PASSIVE)
+		return;
+
+	/* use rigid body transform after cache start frame if objects is not being transformed */
+	if (BKE_rigidbody_check_sim_running(rbw, ctime) && !(ob->flag & SELECT && G.moving & G_TRANSFORM_OBJ)) {
+		float mat[4][4], size_mat[4][4], size[3];
+
+		normalize_qt(rbo->orn); // RB_TODO investigate why quaternion isn't normalized at this point
+		quat_to_mat4(mat, rbo->orn);
+		copy_v3_v3(mat[3], rbo->pos);
+
+		mat4_to_size(size, ob->obmat);
+		size_to_mat4(size_mat, size);
+		mul_m4_m4m4(mat, mat, size_mat);
+
+		copy_m4_m4(ob->obmat, mat);
+	}
+	/* otherwise set rigid body transform to current obmat */
+	else {
+		mat4_to_loc_quat(rbo->pos, rbo->orn, ob->obmat);
+	}
+}
+
+/* Used when canceling transforms - return rigidbody and object to initial states */
+void BKE_rigidbody_object_aftertrans_update(Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle)
+{
+	RigidBodyOb *rbo = ob->rigidbody_object;
+
+	/* return rigid body and object to their initial states */
+	copy_v3_v3(rbo->pos, ob->loc);
+	copy_v3_v3(ob->loc, loc);
+
+	if (ob->rotmode > 0) {
+		eulO_to_quat(rbo->orn, ob->rot, ob->rotmode);
+		copy_v3_v3(ob->rot, rot);
+	}
+	else if (ob->rotmode == ROT_MODE_AXISANGLE) {
+		axis_angle_to_quat(rbo->orn, ob->rotAxis, ob->rotAngle);
+		copy_v3_v3(ob->rotAxis, rotAxis);
+		ob->rotAngle = rotAngle;
+	}
+	else {
+		copy_qt_qt(rbo->orn, ob->quat);
+		copy_qt_qt(ob->quat, quat);
+	}
+	if (rbo->physics_object) {
+		/* allow passive objects to return to original transform */
+		if (rbo->type == RBO_TYPE_PASSIVE)
+			RB_body_set_kinematic_state(rbo->physics_object, true);
+		RB_body_set_loc_rot(rbo->physics_object, rbo->pos, rbo->orn);
+	}
+	// RB_TODO update rigid body physics object's loc/rot for dynamic objects here as well (needs to be done outside bullet's update loop)
+}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 4dd7f3c..be79cff 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -5805,7 +5805,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
 			if (ob->rigidbody_object && canceled) {
 				float ctime = BKE_scene_frame_get(t->scene);
 				if (BKE_rigidbody_check_sim_running(t->scene->rigidbody_world, ctime))
-					BKE_rigidbody_aftertrans_update(ob, td->ext->oloc, td->ext->orot, td->ext->oquat, td->ext->orotAxis, td->ext->orotAngle);
+					BKE_rigidbody_object_aftertrans_update(ob, td->ext->oloc, td->ext->orot, td->ext->oquat, td->ext->orotAxis, td->ext->orotAngle);
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list