[Bf-blender-cvs] [c8c7414] master: Expose Bullet rotational spring settings in the UI.

Alexander Gavrilov noreply at git.blender.org
Mon Nov 7 11:03:58 CET 2016


Commit: c8c7414c3f6768b5cb54d56ff7999d0a0ca22bc6
Author: Alexander Gavrilov
Date:   Mon Nov 7 12:56:58 2016 +0300
Branches: master
https://developer.blender.org/rBc8c7414c3f6768b5cb54d56ff7999d0a0ca22bc6

Expose Bullet rotational spring settings in the UI.

Bullet spring constraint already supports rotational springs, but
they are not exposed in blender UI, likely due to a simple oversight.
Supporting them is as simple as adding a few DNA/RNA properties
with appropriate UI and passing them on to Bullet.

Reviewers: sergof

Reviewed By: sergof

Differential Revision: https://developer.blender.org/D2331

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

M	release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/makesdna/DNA_rigidbody_types.h
M	source/blender/makesrna/intern/rna_rigidbody.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
index 38c9774..9d4f51b 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
@@ -205,30 +205,60 @@ class PHYSICS_PT_rigid_body_constraint(PHYSICS_PT_rigidbody_constraint_panel, Pa
 
                 row = col.row(align=True)
                 sub = row.row(align=True)
-                sub.scale_x = 0.1
-                sub.prop(rbc, "use_spring_x", toggle=True, text="X")
+                sub.scale_x = 0.5
+                sub.prop(rbc, "use_spring_x", toggle=True, text="X Axis")
                 sub = row.row(align=True)
                 sub.active = rbc.use_spring_x
                 sub.prop(rbc, "spring_stiffness_x", text="Stiffness")
-                sub.prop(rbc, "spring_damping_x")
+                sub.prop(rbc, "spring_damping_x", text="Damping")
 
                 row = col.row(align=True)
                 sub = row.row(align=True)
-                sub.scale_x = 0.1
-                sub.prop(rbc, "use_spring_y", toggle=True, text="Y")
+                sub.scale_x = 0.5
+                sub.prop(rbc, "use_spring_y", toggle=True, text="Y Axis")
                 sub = row.row(align=True)
                 sub.active = rbc.use_spring_y
                 sub.prop(rbc, "spring_stiffness_y", text="Stiffness")
-                sub.prop(rbc, "spring_damping_y")
+                sub.prop(rbc, "spring_damping_y", text="Damping")
 
                 row = col.row(align=True)
                 sub = row.row(align=True)
-                sub.scale_x = 0.1
-                sub.prop(rbc, "use_spring_z", toggle=True, text="Z")
+                sub.scale_x = 0.5
+                sub.prop(rbc, "use_spring_z", toggle=True, text="Z Axis")
                 sub = row.row(align=True)
                 sub.active = rbc.use_spring_z
                 sub.prop(rbc, "spring_stiffness_z", text="Stiffness")
-                sub.prop(rbc, "spring_damping_z")
+                sub.prop(rbc, "spring_damping_z", text="Damping")
+
+                col = layout.column(align=True)
+
+                row = col.row(align=True)
+                sub = row.row(align=True)
+                sub.scale_x = 0.5
+                sub.prop(rbc, "use_spring_ang_x", toggle=True, text="X Angle")
+                sub = row.row(align=True)
+                sub.active = rbc.use_spring_ang_x
+                sub.prop(rbc, "spring_stiffness_ang_x", text="Stiffness")
+                sub.prop(rbc, "spring_damping_ang_x", text="Damping")
+
+                row = col.row(align=True)
+                sub = row.row(align=True)
+                sub.scale_x = 0.5
+                sub.prop(rbc, "use_spring_ang_y", toggle=True, text="Y Angle")
+                sub = row.row(align=True)
+                sub.active = rbc.use_spring_ang_y
+                sub.prop(rbc, "spring_stiffness_ang_y", text="Stiffness")
+                sub.prop(rbc, "spring_damping_ang_y", text="Damping")
+
+                row = col.row(align=True)
+                sub = row.row(align=True)
+                sub.scale_x = 0.5
+                sub.prop(rbc, "use_spring_ang_z", toggle=True, text="Z Angle")
+                sub = row.row(align=True)
+                sub.active = rbc.use_spring_ang_z
+                sub.prop(rbc, "spring_stiffness_ang_z", text="Stiffness")
+                sub.prop(rbc, "spring_damping_ang_z", text="Damping")
+
 
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index c3ae573..f8e9622 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -804,6 +804,18 @@ static void rigidbody_validate_sim_constraint(RigidBodyWorld *rbw, Object *ob, b
 					RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_LIN_Z, rbc->spring_stiffness_z);
 					RB_constraint_set_damping_6dof_spring(rbc->physics_constraint, RB_LIMIT_LIN_Z, rbc->spring_damping_z);
 
+					RB_constraint_set_spring_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_X, rbc->flag & RBC_FLAG_USE_SPRING_ANG_X);
+					RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_X, rbc->spring_stiffness_ang_x);
+					RB_constraint_set_damping_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_X, rbc->spring_damping_ang_x);
+
+					RB_constraint_set_spring_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Y, rbc->flag & RBC_FLAG_USE_SPRING_ANG_Y);
+					RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Y, rbc->spring_stiffness_ang_y);
+					RB_constraint_set_damping_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Y, rbc->spring_damping_ang_y);
+
+					RB_constraint_set_spring_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Z, rbc->flag & RBC_FLAG_USE_SPRING_ANG_Z);
+					RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Z, rbc->spring_stiffness_ang_z);
+					RB_constraint_set_damping_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Z, rbc->spring_damping_ang_z);
+
 					RB_constraint_set_equilibrium_6dof_spring(rbc->physics_constraint);
 					/* fall-through */
 				case RBC_TYPE_6DOF:
@@ -1072,9 +1084,15 @@ RigidBodyCon *BKE_rigidbody_create_constraint(Scene *scene, Object *ob, short ty
 	rbc->spring_damping_x = 0.5f;
 	rbc->spring_damping_y = 0.5f;
 	rbc->spring_damping_z = 0.5f;
+	rbc->spring_damping_ang_x = 0.5f;
+	rbc->spring_damping_ang_y = 0.5f;
+	rbc->spring_damping_ang_z = 0.5f;
 	rbc->spring_stiffness_x = 10.0f;
 	rbc->spring_stiffness_y = 10.0f;
 	rbc->spring_stiffness_z = 10.0f;
+	rbc->spring_stiffness_ang_x = 10.0f;
+	rbc->spring_stiffness_ang_y = 10.0f;
+	rbc->spring_stiffness_ang_z = 10.0f;
 
 	rbc->motor_lin_max_impulse = 1.0f;
 	rbc->motor_lin_target_velocity = 1.0f;
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 14e02c9..8e855eb 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -53,6 +53,7 @@
 #include "DNA_actuator_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_smoke_types.h"
+#include "DNA_rigidbody_types.h"
 
 #include "DNA_genfile.h"
 
@@ -1438,5 +1439,20 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 				}
 			}
 		}
+
+		if (!DNA_struct_elem_find(fd->filesdna, "RigidBodyCon", "float", "spring_stiffness_ang_x")) {
+			Object *ob;
+			for (ob = main->object.first; ob; ob = ob->id.next) {
+				RigidBodyCon *rbc = ob->rigidbody_constraint;
+				if (rbc) {
+					rbc->spring_stiffness_ang_x = 10.0;
+					rbc->spring_stiffness_ang_y = 10.0;
+					rbc->spring_stiffness_ang_z = 10.0;
+					rbc->spring_damping_ang_x = 0.5;
+					rbc->spring_damping_ang_y = 0.5;
+					rbc->spring_damping_ang_z = 0.5;
+				}
+			}
+		}
 	}
 }
diff --git a/source/blender/makesdna/DNA_rigidbody_types.h b/source/blender/makesdna/DNA_rigidbody_types.h
index 5d76ffe..381ee5d 100644
--- a/source/blender/makesdna/DNA_rigidbody_types.h
+++ b/source/blender/makesdna/DNA_rigidbody_types.h
@@ -226,10 +226,16 @@ typedef struct RigidBodyCon {
 	float spring_stiffness_x;
 	float spring_stiffness_y;
 	float spring_stiffness_z;
+	float spring_stiffness_ang_x;
+	float spring_stiffness_ang_y;
+	float spring_stiffness_ang_z;
 	/* amount of velocity lost over time */
 	float spring_damping_x;
 	float spring_damping_y;
 	float spring_damping_z;
+	float spring_damping_ang_x;
+	float spring_damping_ang_y;
+	float spring_damping_ang_z;
 
 	/* motor settings */
 	float motor_lin_target_velocity;	/* linear velocity the motor tries to hold */
@@ -295,7 +301,11 @@ typedef enum eRigidBodyCon_Flag {
 	RBC_FLAG_USE_SPRING_Z				= (1 << 13),
 	/* motors */
 	RBC_FLAG_USE_MOTOR_LIN				= (1 << 14),
-	RBC_FLAG_USE_MOTOR_ANG				= (1 << 15)
+	RBC_FLAG_USE_MOTOR_ANG				= (1 << 15),
+	/* angular springs */
+	RBC_FLAG_USE_SPRING_ANG_X			= (1 << 16),
+	RBC_FLAG_USE_SPRING_ANG_Y			= (1 << 17),
+	RBC_FLAG_USE_SPRING_ANG_Z			= (1 << 18)
 } eRigidBodyCon_Flag;
 
 /* ******************************** */
diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c
index bdf001e..85a34a9 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -507,6 +507,45 @@ static void rna_RigidBodyCon_spring_stiffness_z_set(PointerRNA *ptr, float value
 #endif
 }
 
+static void rna_RigidBodyCon_spring_stiffness_ang_x_set(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->spring_stiffness_ang_x = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint && rbc->type == RBC_TYPE_6DOF_SPRING && (rbc->flag & RBC_FLAG_USE_SPRING_ANG_X)) {
+		RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_X, value);
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_spring_stiffness_ang_y_set(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->spring_stiffness_ang_y = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint && rbc->type == RBC_TYPE_6DOF_SPRING && (rbc->flag & RBC_FLAG_USE_SPRING_ANG_Y)) {
+		RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Y, value);
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_spring_stiffness_ang_z_set(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->spring_stiffness_ang_z = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint && rbc->type == RBC_TYPE_6DOF_SPRING && (rbc->flag & RBC_FLAG_USE_SPRING_ANG_Z)) {
+		RB_constraint_set_stiffness_6dof_spring(rbc->physics_constraint, RB_LIMIT_ANG_Z, value);
+	}
+#endif
+}
+
 static void rna_RigidBodyCon_spring_damping_x_set(PointerRNA *ptr, float value)
 {
 	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
@@ -544,6 +583,43 @@ static void rna_RigidBodyCon_spring_damping_z_set(PointerRNA *ptr, float value)
 #endif
 }
 
+static void rna_RigidBodyCon

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list