[Bf-blender-cvs] [b4aafcc3686] soc-2021-simulation-display: Cleanup: Constraints and panels

soumya pochiraju noreply at git.blender.org
Wed Aug 18 19:35:02 CEST 2021


Commit: b4aafcc3686d414c8f603db4df935aa0fcd654dd
Author: soumya pochiraju
Date:   Wed Aug 18 23:04:29 2021 +0530
Branches: soc-2021-simulation-display
https://developer.blender.org/rBb4aafcc3686d414c8f603db4df935aa0fcd654dd

Cleanup: Constraints and panels

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

M	release/scripts/startup/bl_ui/properties_physics_rigidbody.py
M	source/blender/draw/engines/overlay/overlay_extra.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
index 967acea6ec6..fddc23055e0 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
@@ -319,13 +319,14 @@ class PHYSICS_PT_rigid_body_display_options(PHYSICS_PT_rigidbody_panel, Panel):
             rigid_body_warning(layout, "Object does not have a Rigid Body")
             return
 
-        if rbo.type == 'ACTIVE':
-          col = layout.column()
-          col.prop(rbo, "display_data_text")
+
+        col = layout.column()
+        if rbo.type == 'ACTIVE' and not rbo.kinematic:
           col.prop(rbo, "display_acceleration")
           col.prop(rbo, "display_velocity")
           col.prop(rbo, "display_collisions")
-          col.prop(rbo, "display_state")
+          col.prop(rbo, "display_data_text")
+        col.prop(rbo, "display_state")
 
 class PHYSICS_PT_rigid_body_display_force_types(PHYSICS_PT_rigidbody_panel, Panel):
     bl_label = "Forces"
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index bf950892216..3ae1c0e8b64 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -2142,6 +2142,7 @@ static void OVERLAY_linear_limits(RigidBodyCon *rbc,
     normalize_v3(constrained_axis);
 
     bool draw_rod = rbc->type == RBC_TYPE_SLIDER;
+    bool is_constrained;
 
     float translation_range;
     /* Axis that lies along the plane perpendicular to constrained axis. */
@@ -2156,6 +2157,7 @@ static void OVERLAY_linear_limits(RigidBodyCon *rbc,
         ob1_lower_limit_mark[0] -= (rbc->limit_lin_x_lower*0.5f);
         ax[1] = 1.0f;
         axis_angle_to_mat3(corr_rot, ax, M_PI_2);
+        is_constrained = (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_X);
         break;
        case 1:
         translation_range = (rbc->limit_lin_y_upper - rbc->limit_lin_y_lower);
@@ -2165,6 +2167,7 @@ static void OVERLAY_linear_limits(RigidBodyCon *rbc,
         ob1_lower_limit_mark[0] -= (rbc->limit_lin_y_lower*0.5f);
         ax[0] = 1.0f;
         axis_angle_to_mat3(corr_rot, ax, M_PI_2);
+        is_constrained = (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_Y);
         break;
        case 2:
         translation_range = (rbc->limit_lin_z_upper - rbc->limit_lin_z_lower);
@@ -2175,15 +2178,21 @@ static void OVERLAY_linear_limits(RigidBodyCon *rbc,
         /* Artbitrary axis so that the matrix(corr_rot) doesn't remain empty. */
         ax[0] = 1.0f;
         axis_angle_to_mat3(corr_rot, ax, 0.0f);
+        is_constrained = (rbc->flag & RBC_FLAG_USE_LIMIT_LIN_Z);
         break;
     }
 
-    float initial_component_along_axis = dot_v3v3(initial_distance_vec, constrained_axis);
+    if(!is_constrained && !draw_rod) {
+        return;
+    }
+
+    float min_rod_half_length;
+    min_rod_half_length = is_constrained ? dot_v3v3(initial_distance_vec, constrained_axis) : dot_v3v3(distance_vec, constrained_axis);
 
-    ob2_upper_limit[0] -= (initial_component_along_axis*0.5f);
-    ob2_lower_limit_mark[0] -= (initial_component_along_axis*0.5f);
-    ob1_upper_limit[0] += (initial_component_along_axis*0.5f);
-    ob1_lower_limit_mark[0] += (initial_component_along_axis*0.5f);
+    ob2_upper_limit[0] -= (min_rod_half_length*0.5f);
+    ob2_lower_limit_mark[0] -= (min_rod_half_length*0.5f);
+    ob1_upper_limit[0] += (min_rod_half_length*0.5f);
+    ob1_lower_limit_mark[0] += (min_rod_half_length*0.5f);
 
     mul_m3_v3(transform_mat1, ob2_upper_limit);
     mul_m3_v3(transform_mat1, ob1_lower_limit_mark);
@@ -2216,26 +2225,28 @@ static void OVERLAY_linear_limits(RigidBodyCon *rbc,
       OVERLAY_extra_line_dashed(cb, ob2->rigidbody_object->pos, ob2_projection, color);
     }
 
-    float ob1_rod_dist[3];
-    float ob2_rod_dist[3];
-    sub_v3_v3v3(ob1_rod_dist, ob1_projection, ob1->rigidbody_object->pos);
-    sub_v3_v3v3(ob2_rod_dist, ob2_projection, ob2->rigidbody_object->pos);
+    if(is_constrained) {
 
-    float ob1_upper_wall_pos[3];
-    float ob2_upper_wall_pos[3];
-    float ob1_lower_wall_pos[3];
-    float ob2_lower_wall_pos[3];
+      float ob1_rod_dist[3];
+      float ob2_rod_dist[3];
+      sub_v3_v3v3(ob1_rod_dist, ob1_projection, ob1->rigidbody_object->pos);
+      sub_v3_v3v3(ob2_rod_dist, ob2_projection, ob2->rigidbody_object->pos);
 
-    sub_v3_v3v3(ob1_upper_wall_pos, ob1_upper_limit, ob1_rod_dist);
-    sub_v3_v3v3(ob2_upper_wall_pos, ob2_upper_limit, ob2_rod_dist);
-    sub_v3_v3v3(ob1_lower_wall_pos, ob1_lower_limit_mark, ob1_rod_dist);
-    sub_v3_v3v3(ob2_lower_wall_pos, ob2_lower_limit_mark, ob2_rod_dist);
+      float ob1_upper_wall_pos[3];
+      float ob2_upper_wall_pos[3];
+      float ob1_lower_wall_pos[3];
+      float ob2_lower_wall_pos[3];
 
-    bool fade_walls = rbc->flag & RBC_FLAG_DEBUG_DRAW_FADE_WALLS;
+      sub_v3_v3v3(ob1_upper_wall_pos, ob1_upper_limit, ob1_rod_dist);
+      sub_v3_v3v3(ob2_upper_wall_pos, ob2_upper_limit, ob2_rod_dist);
+      sub_v3_v3v3(ob1_lower_wall_pos, ob1_lower_limit_mark, ob1_rod_dist);
+      sub_v3_v3v3(ob2_lower_wall_pos, ob2_lower_limit_mark, ob2_rod_dist);
 
-    OVERLAY_linear_limits_walls(ob1, transform_mat1, corr_rot, ob1_upper_wall_pos, ob1_lower_wall_pos, translation_range, data, fade_walls);
-    OVERLAY_linear_limits_walls(ob2, transform_mat2, corr_rot, ob2_upper_wall_pos, ob2_lower_wall_pos, translation_range, data, fade_walls);
+      bool fade_walls = rbc->flag & RBC_FLAG_DEBUG_DRAW_FADE_WALLS;
 
+      OVERLAY_linear_limits_walls(ob1, transform_mat1, corr_rot, ob1_upper_wall_pos, ob1_lower_wall_pos, translation_range, data, fade_walls);
+      OVERLAY_linear_limits_walls(ob2, transform_mat2, corr_rot, ob2_upper_wall_pos, ob2_lower_wall_pos, translation_range, data, fade_walls);
+    }
 }
 
 static void OVERLAY_angular_limits_rods( OVERLAY_ExtraCallBuffers *cb,
@@ -2273,8 +2284,6 @@ static void OVERLAY_angular_limits_rods( OVERLAY_ExtraCallBuffers *cb,
 static void OVERLAY_angular_limits_disk(OVERLAY_Data *data,
                                      RigidBodyCon *rbc,
                                      Object *ob,
-                                     Object *coupled_ob,
-                                     Object *constraint_ob,
                                      const float transform_mat[3][3],
                                      const float corr_rot[3][3],
                                      const float angle,
@@ -2348,17 +2357,8 @@ static void OVERLAY_angular_limits(OVERLAY_Data *data,
     float ob_init[3][3] = {{0.0f}};
     float ob_curr[3][3] = {{0.0f}};
 
-    float ob1_transform[4][4];
-    float ob2_transform[4][4];
+    bool draw_disks;
 
-    if(rbc->physics_constraint != NULL) {
-      printf("yes ");
-      RB_constraint_get_transforms_hinge(rbc->physics_constraint, ob1_transform, ob2_transform);
-      copy_m3_m4(t1, ob1_transform);
-      copy_m3_m4(t2, ob2_transform);
-    }
-
-    else {
       BKE_object_rot_to_mat3(constraint_ob, t1, false);
       BKE_object_rot_to_mat3(ob1, ob_init, false);
       invert_m3(ob_init);
@@ -2372,7 +2372,7 @@ static void OVERLAY_angular_limits(OVERLAY_Data *data,
       copy_m3_m4(ob_curr, ob2->obmat);
       mul_m3_m3m3(t2, ob_init, t2);
       mul_m3_m3m3(t2, ob_curr, t2);
-    }
+
 
     float ob1_pivot_dist_initial[3];
     sub_v3_v3v3(ob1_pivot_dist_initial, constraint_ob->loc, ob1->loc);
@@ -2419,18 +2419,21 @@ static void OVERLAY_angular_limits(OVERLAY_Data *data,
         angular_offset = rbc->limit_ang_x_lower;
         ax[1] = 1.0f;
         axis_angle_to_mat3(corr_rot, ax, M_PI_2);
+        draw_disks = (rbc->flag & RBC_FLAG_USE_LIMIT_ANG_X);
         break;
        case 1:
         angle = (rbc->limit_ang_y_upper - rbc->limit_ang_y_lower);
         angular_offset = rbc->limit_ang_y_lower;
         ax[0] = 1.0f;
         axis_angle_to_mat3(corr_rot, ax, M_PI_2);
+        draw_disks = (rbc->flag & RBC_FLAG_USE_LIMIT_ANG_Y);
         break;
        case 2:
         angle = (rbc->limit_ang_z_upper - rbc->limit_ang_z_lower);
         angular_offset = rbc->limit_ang_z_lower;
         ax[0] = 1.0f;
         unit_m3(corr_rot);
+        draw_disks = (rbc->flag & RBC_FLAG_USE_LIMIT_ANG_Z);
         break;
     }
 
@@ -2470,14 +2473,30 @@ static void OVERLAY_angular_limits(OVERLAY_Data *data,
     cb = &pd->extra_call_buffers[1];
 
     if(ob1->rigidbody_object->type == RBO_TYPE_ACTIVE) {
-      OVERLAY_angular_limits_disk(data, rbc, ob1, ob2, constraint_ob, t2, corr_rot, angle, angular_offset, delta_angle, constrained_axis_w, ob1_offset_vec, real_pivot, color1);
+      if(draw_disks) {
+        OVERLAY_angular_limits_disk(data, rbc, ob1, t2, corr_rot, angle, angular_offset, delta_angle, constrained_axis_w, ob1_offset_vec, real_pivot, color1);
+      }
       OVERLAY_angular_limits_rods(cb, ob1, real_pivot, ob1_offset_vec, ob2_offset_vec, color2);
     }
     if(ob2->rigidbody_object->type == RBO_TYPE_ACTIVE) {
-      OVERLAY_angular_limits_disk(data, rbc, ob2, ob1, constraint_ob, t1, corr_rot, angle, angular_offset, delta_angle, constrained_axis_w, ob2_offset_vec, real_pivot, color2);
+      if(draw_disks) {
+        OVERLAY_angular_limits_disk(data, rbc, ob2, t1, corr_rot, angle, angular_offset, delta_angle, constrained_axis_w, ob2_offset_vec, real_pivot, color2);
+      }
       OVERLAY_angular_limits_rods(cb, ob2, real_pivot, ob2_offset_vec, ob1_offset_vec, color1);
     }
+}
+
+static void OVERLAY_rb_constraint_fixed(OVERLAY_ExtraCallBuffers *cb, Object *ob1, Object*ob2) {
 
+    float color[4] = {0.0f, 0.5f, 0.8f, 1.0f};
+    float ob1_pos[3];
+    float ob2_pos[3];
+    for(int i=0; i<3; i++) {
+        ob1_pos[i] = ob1->obmat[3][i];
+        ob2_pos[i] = ob2->obmat[3][i];
+    }
+
+    OVERLAY_extra_line_dashed(cb, ob1_pos, ob2_pos, color);
 }
 
 static void OVERLAY_rb_constraint_limits(OVERLAY_ExtraCallBuffers *cb, OVERLAY_Data *data, Object *ob){
@@ -2515,6 +2534,9 @@ static void OVERLAY_rb_constraint_limits(OVERLAY_ExtraCallBuffers *cb, OVERLAY_D
     }
     else {
       switch(rbc->type) {
+        case RBC_TYPE_FIXED:
+          OVERLAY_rb_cons

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list