[Bf-blender-cvs] [18ba072f171] fracture_modifier: immediately take constraint limit changes into account during rigidbody simulation

Martin Felke noreply at git.blender.org
Tue Apr 17 14:55:55 CEST 2018


Commit: 18ba072f171a78af01137b2421bedd57db976b15
Author: Martin Felke
Date:   Tue Apr 17 14:55:27 2018 +0200
Branches: fracture_modifier
https://developer.blender.org/rB18ba072f171a78af01137b2421bedd57db976b15

immediately take constraint limit changes into account during rigidbody simulation

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

M	source/blender/makesrna/intern/rna_rigidbody.c

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

diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c
index a2c5c0374e1..57341a5c2a4 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -15,7 +15,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributor(s): Blender Foundation 2013, Joshua Leung, Sergej Reich
+ * Contributor(s): Blender Foundation 2013, Joshua Leung, Sergej Reich, Martin Felke
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -969,6 +969,551 @@ static void rna_RigidBodyWorld_convex_sweep_test(
 #endif
 }
 
+
+
+static void rna_RigidBodyCon_use_limit_lin_x(PointerRNA *ptr, int value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	RB_FLAG_SET(rbc->flag, value, RBC_FLAG_USE_LIMIT_LIN_X);
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+
+				if (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_X)
+				{
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_X, rbc->limit_lin_x_lower, rbc->limit_lin_x_upper);
+				}
+				else {
+					//validator in rigidbody.c will change properties.... but here ensure physics constraint is updated at once
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_X, 0.0f, -1.0f);
+				}
+				break;
+
+			case RBC_TYPE_SLIDER:
+				if (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_X)
+				{
+					RB_constraint_set_limits_slider(rbc->physics_constraint, rbc->limit_lin_x_lower, rbc->limit_lin_x_upper);
+				}
+				else {
+					//validator in rigidbody.c will change properties.... but here ensure physics constraint is updated at once
+					RB_constraint_set_limits_slider(rbc->physics_constraint, 0.0f, -1.0f);
+				}
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_limit_lin_x_lower(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_lin_x_lower = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_X, rbc->limit_lin_x_lower, rbc->limit_lin_x_upper);
+				break;
+			case RBC_TYPE_SLIDER:
+				RB_constraint_set_limits_slider(rbc->physics_constraint, rbc->limit_lin_x_lower, rbc->limit_lin_x_upper);
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_lin_x_upper(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_lin_x_upper = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_X, rbc->limit_lin_x_lower, rbc->limit_lin_x_upper);
+				break;
+			case RBC_TYPE_SLIDER:
+				RB_constraint_set_limits_slider(rbc->physics_constraint, rbc->limit_lin_x_lower, rbc->limit_lin_x_upper);
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_use_limit_lin_y(PointerRNA *ptr, int value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	RB_FLAG_SET(rbc->flag, value, RBC_FLAG_USE_LIMIT_LIN_Y);
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+
+				if (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_Y)
+				{
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Y, rbc->limit_lin_y_lower, rbc->limit_lin_y_upper);
+				}
+				else {
+					//validator in rigidbody.c will change properties.... but here ensure physics constraint is updated at once
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Y, 0.0f, -1.0f);
+				}
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_lin_y_lower(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_lin_y_lower = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Y, rbc->limit_lin_y_lower, rbc->limit_lin_y_upper);
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_lin_y_upper(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_lin_y_upper = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Y, rbc->limit_lin_y_lower, rbc->limit_lin_y_upper);
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_use_limit_lin_z(PointerRNA *ptr, int value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	RB_FLAG_SET(rbc->flag, value, RBC_FLAG_USE_LIMIT_LIN_Z);
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+
+				if (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_Z)
+				{
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Z, rbc->limit_lin_z_lower, rbc->limit_lin_z_upper);
+				}
+				else {
+					//validator in rigidbody.c will change properties.... but here ensure physics constraint is updated at once
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Z, 0.0f, -1.0f);
+				}
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_lin_z_lower(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_lin_z_lower = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Z, rbc->limit_lin_z_lower, rbc->limit_lin_z_upper);
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_lin_z_upper(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_lin_z_upper = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_LIN_Z, rbc->limit_lin_z_lower, rbc->limit_lin_z_upper);
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_use_limit_ang_x(PointerRNA *ptr, int value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	RB_FLAG_SET(rbc->flag, value, RBC_FLAG_USE_LIMIT_ANG_X);
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+
+				if (rbc->flag & RBC_FLAG_USE_LIMIT_ANG_X)
+				{
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_X, rbc->limit_ang_x_lower, rbc->limit_ang_x_upper);
+				}
+				else {
+					//validator in rigidbody.c will change properties.... but here ensure physics constraint is updated at once
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_X, 0.0f, -1.0f);
+				}
+				break;
+		}
+	}
+#endif
+}
+
+
+
+static void rna_RigidBodyCon_limit_ang_x_lower(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_ang_x_lower = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_X, rbc->limit_ang_x_lower, rbc->limit_ang_x_upper);
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_ang_x_upper(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_ang_x_upper = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_X, rbc->limit_ang_x_lower, rbc->limit_ang_x_upper);
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_use_limit_ang_y(PointerRNA *ptr, int value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	RB_FLAG_SET(rbc->flag, value, RBC_FLAG_USE_LIMIT_ANG_Y);
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+
+				if (rbc->flag & RBC_FLAG_USE_LIMIT_ANG_Y)
+				{
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_Y, rbc->limit_ang_y_lower, rbc->limit_ang_y_upper);
+				}
+				else {
+					//validator in rigidbody.c will change properties.... but here ensure physics constraint is updated at once
+					RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_Y, 0.0f, -1.0f);
+				}
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_limit_ang_y_lower(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_ang_y_lower = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_Y, rbc->limit_ang_y_lower, rbc->limit_ang_y_upper);
+				break;
+		}
+	}
+#endif
+}
+
+static void rna_RigidBodyCon_limit_ang_y_upper(PointerRNA *ptr, float value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	rbc->limit_ang_y_upper = value;
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE_6DOF_SPRING:
+				RB_constraint_set_limits_6dof(rbc->physics_constraint, RB_LIMIT_ANG_Y, rbc->limit_ang_y_lower, rbc->limit_ang_y_upper);
+				break;
+		}
+	}
+#endif
+}
+
+
+static void rna_RigidBodyCon_use_limit_ang_z(PointerRNA *ptr, int value)
+{
+	RigidBodyCon *rbc = (RigidBodyCon *)ptr->data;
+
+	RB_FLAG_SET(rbc->flag, value, RBC_FLAG_USE_LIMIT_ANG_Z);
+
+#ifdef WITH_BULLET
+	if (rbc->physics_constraint) {
+		switch (rbc->type)
+		{
+			case RBC_TYPE_6DOF:
+			case RBC_TYPE

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list