[Bf-blender-cvs] [66242f5] fracture_modifier: constraints transformation fix, transformations are updated on validation now

Martin Felke noreply at git.blender.org
Mon Jan 18 01:33:54 CET 2016


Commit: 66242f5e764393af29e24ed34350c5837f0b0a52
Author: Martin Felke
Date:   Mon Jan 18 01:33:45 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rB66242f5e764393af29e24ed34350c5837f0b0a52

constraints transformation fix, transformations are updated on validation now

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

M	source/blender/blenkernel/BKE_rigidbody.h
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/makesrna/intern/rna_modifier.c

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

diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h
index 116a858..f2e1806 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -76,7 +76,8 @@ void BKE_rigidbody_validate_sim_world(struct Scene *scene, struct RigidBodyWorld
 void BKE_rigidbody_validate_sim_object(struct RigidBodyWorld *rbw, struct Object *ob, short rebuild);
 void BKE_rigidbody_validate_sim_shape(struct Object *ob, short rebuild);
 void BKE_rigidbody_validate_sim_constraint(struct RigidBodyWorld *rbw, struct Object *ob, short rebuild);
-void BKE_rigidbody_validate_sim_shard_constraint(struct RigidBodyWorld *rbw, struct RigidBodyShardCon *rbsc, short rebuild);
+void BKE_rigidbody_validate_sim_shard_constraint(struct RigidBodyWorld *rbw, struct FractureModifierData* fmd, struct Object*,
+                                                 struct RigidBodyShardCon *rbsc, short rebuild);
 
 void BKE_rigidbody_validate_sim_shard(struct RigidBodyWorld *rbw, struct MeshIsland *mi, struct Object *ob, short rebuild, int transfer_speeds);
 void BKE_rigidbody_validate_sim_shard_shape(struct MeshIsland *mi, struct Object *ob, short rebuild);
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index c1a3471..5efb230 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1563,7 +1563,7 @@ static void rigidbody_validate_sim_constraint(RigidBodyWorld *rbw, Object *ob, b
 	}
 }
 
-static void rigidbody_create_shard_physics_constraint(RigidBodyShardCon *rbc)
+static void rigidbody_create_shard_physics_constraint(FractureModifierData* fmd, Object* ob, RigidBodyShardCon *rbc)
 {
 	float loc[3];
 	float rot[4];
@@ -1585,8 +1585,9 @@ static void rigidbody_create_shard_physics_constraint(RigidBodyShardCon *rbc)
 		return;
 	}
 
-	copy_v3_v3(loc, rbc->pos);
-	copy_v3_v3(rot, rbc->orn);
+	mul_v3_m4v3(loc, ob->obmat, rbc->pos);
+	mat4_to_quat(rot, ob->obmat);
+	mul_qt_qtqt(rot, rot, rbc->orn);
 
 	if (rb1 && rb2) {
 		switch (rbc->type) {
@@ -1714,7 +1715,7 @@ static void rigidbody_create_shard_physics_constraint(RigidBodyShardCon *rbc)
 /* Create physics sim representation of constraint given rigid body constraint settings
  * < rebuild: even if an instance already exists, replace it
  */
-void BKE_rigidbody_validate_sim_shard_constraint(RigidBodyWorld *rbw, RigidBodyShardCon *rbc, short rebuild)
+void BKE_rigidbody_validate_sim_shard_constraint(RigidBodyWorld *rbw, FractureModifierData *fmd, Object* ob, RigidBodyShardCon *rbc, short rebuild)
 {
 	/* sanity checks:
 	 *	- object should have a rigid body constraint
@@ -1750,7 +1751,7 @@ void BKE_rigidbody_validate_sim_shard_constraint(RigidBodyWorld *rbw, RigidBodyS
 			rbc->physics_constraint = NULL;
 		}
 
-		rigidbody_create_shard_physics_constraint(rbc);
+		rigidbody_create_shard_physics_constraint(fmd, ob, rbc);
 	}
 
 	if ((rbw && rbw->physics_world && rbc->physics_constraint)) {
@@ -3256,12 +3257,12 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
 			if (rebuild || rbsc->mi1->rigidbody->flag & RBO_FLAG_KINEMATIC_REBUILD ||
 				rbsc->mi2->rigidbody->flag & RBO_FLAG_KINEMATIC_REBUILD) {
 				/* World has been rebuilt so rebuild constraint */
-				BKE_rigidbody_validate_sim_shard_constraint(rbw, rbsc, true);
+				BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd,  ob,  rbsc, true);
 				BKE_rigidbody_start_dist_angle(rbsc);
 			}
 
 			else if (rbsc->flag & RBC_FLAG_NEEDS_VALIDATE) {
-				BKE_rigidbody_validate_sim_shard_constraint(rbw, rbsc, false);
+				BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, false);
 			}
 
 			if (rbsc->physics_constraint && rbw && (rbw->flag & RBW_FLAG_REBUILD_CONSTRAINTS)) {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index f268bb7..d48e8fc 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1381,18 +1381,14 @@ static void rna_MeshCon_breaking_threshold_set(PointerRNA *ptr, float value)
 static void rna_MeshCon_position_set(PointerRNA *ptr, float value[3])
 {
 	RigidBodyShardCon *rbc = (RigidBodyShardCon *)ptr->data;
-
 	copy_v3_v3(rbc->pos, value);
-
 	rbc->flag |= RBC_FLAG_NEEDS_VALIDATE;
 }
 
 static void rna_MeshCon_orientation_set(PointerRNA *ptr, float value[4])
 {
 	RigidBodyShardCon *rbc = (RigidBodyShardCon *)ptr->data;
-
 	copy_qt_qt(rbc->orn, value);
-
 	rbc->flag |= RBC_FLAG_NEEDS_VALIDATE;
 }




More information about the Bf-blender-cvs mailing list