[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