[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