[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