[Bf-blender-cvs] [346a812d7e1] master: Fix scale cage gizmo in pose-mode

Campbell Barton noreply at git.blender.org
Mon Nov 1 07:18:40 CET 2021


Commit: 346a812d7e1d15ad90bd568b181139929d4df50b
Author: Campbell Barton
Date:   Mon Nov 1 14:15:33 2021 +1100
Branches: master
https://developer.blender.org/rB346a812d7e1d15ad90bd568b181139929d4df50b

Fix scale cage gizmo in pose-mode

The active objects matrix was ignored when calculating the cage.

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

M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/transform/transform_gizmo_3d.c

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

diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index bedd0e2fa35..b132e559baa 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -181,6 +181,13 @@ struct TransformBounds {
   /* Normalized axis */
   float axis[3][3];
   float axis_min[3], axis_max[3];
+
+  /**
+   * When #TransformCalcParams.use_local_axis is used.
+   * This is the local space matrix the caller may need to access.
+   */
+  bool use_matrix_space;
+  float matrix_space[4][4];
 };
 
 struct TransformCalcParams {
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index 466c4202dbd..e79fdc4890a 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -667,6 +667,8 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
     }
   }
 
+  tbounds->use_matrix_space = false;
+
   /* transform widget matrix */
   unit_m4(rv3d->twmat);
 
@@ -689,13 +691,16 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
   reset_tw_center(tbounds);
 
   copy_m3_m4(tbounds->axis, rv3d->twmat);
-  if (params->use_local_axis && (ob && ob->mode & OB_MODE_EDIT)) {
+  if (params->use_local_axis && (ob && ob->mode & (OB_MODE_EDIT | OB_MODE_POSE))) {
     float diff_mat[3][3];
     copy_m3_m4(diff_mat, ob->obmat);
     normalize_m3(diff_mat);
     invert_m3(diff_mat);
     mul_m3_m3m3(tbounds->axis, tbounds->axis, diff_mat);
     normalize_m3(tbounds->axis);
+
+    tbounds->use_matrix_space = true;
+    copy_m4_m4(tbounds->matrix_space, ob->obmat);
   }
 
   if (is_gp_edit) {
@@ -970,8 +975,10 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
 
       if (totsel_iter) {
         float mat_local[4][4];
-        if (use_mat_local) {
-          mul_m4_m4m4(mat_local, ob->imat, ob_iter->obmat);
+        if (params->use_local_axis) {
+          if (use_mat_local) {
+            mul_m4_m4m4(mat_local, ob->imat, ob_iter->obmat);
+          }
         }
 
         /* use channels to get stats */
@@ -2117,10 +2124,8 @@ static void WIDGETGROUP_xform_cage_refresh(const bContext *C, wmGizmoGroup *gzgr
     WM_gizmo_set_flag(gz, WM_GIZMO_HIDDEN, true);
   }
   else {
-    ViewLayer *view_layer = CTX_data_view_layer(C);
-    Object *ob = OBACT(view_layer);
-    if (ob && ob->mode & OB_MODE_EDIT) {
-      copy_m4_m4(gz->matrix_space, ob->obmat);
+    if (tbounds.use_matrix_space) {
+      copy_m4_m4(gz->matrix_space, tbounds.matrix_space);
     }
     else {
       unit_m4(gz->matrix_space);



More information about the Bf-blender-cvs mailing list