[Bf-blender-cvs] [ea182deeb9c] master: Remove workaround for drawing the rotation gizmo

Germano Cavalcante noreply at git.blender.org
Tue Jun 7 05:38:35 CEST 2022


Commit: ea182deeb9cdd2a9137e98eb0072f57c0fb1e09f
Author: Germano Cavalcante
Date:   Mon Jun 6 22:59:32 2022 -0300
Branches: master
https://developer.blender.org/rBea182deeb9cdd2a9137e98eb0072f57c0fb1e09f

Remove workaround for drawing the rotation gizmo

Since [0], transform gizmos are no longer hidden during transform.

The same can be observed for rotation gizmos.

However, as a workaround for these rotation gizmos, there was already a
drawing utility running.

With the gizmo and the utility this drawing is now being done twice.

So remove the utility/workaround and update the gizmo accordingly.

[0] {648350e456490f8d6258e7de9bf94d3a6a34dbb2}

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

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

M	source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
M	source/blender/editors/include/ED_gizmo_library.h
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_gizmo_3d.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap.h

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

diff --git a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
index 1d9fc35eda8..71db88419d5 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
@@ -77,6 +77,21 @@ typedef struct DialInteraction {
 #define DIAL_CLIP_BIAS 0.02
 
 /* -------------------------------------------------------------------- */
+struct Dial3dParams {
+  int draw_options;
+  float angle_ofs;
+  float angle_delta;
+  float angle_increment;
+  float arc_partial_angle;
+  float arc_inner_factor;
+  float *clip_plane;
+};
+static void dial_3d_draw_util(const float matrix_basis[4][4],
+                              const float matrix_final[4][4],
+                              const float line_width,
+                              const float color[4],
+                              const bool select,
+                              struct Dial3dParams *params);
 
 static void dial_geom_draw(const float color[4],
                            const float line_width,
@@ -411,23 +426,24 @@ static void dial_draw_intern(
       if (WM_gizmo_target_property_is_valid(gz_prop)) {
         angle_delta = WM_gizmo_target_property_float_get(gz, gz_prop);
       }
+      angle_increment = RNA_float_get(gz->ptr, "incremental_angle");
     }
   }
 
-  ED_gizmotypes_dial_3d_draw_util(gz->matrix_basis,
-                                  matrix_final,
-                                  gz->line_width,
-                                  color,
-                                  select,
-                                  &(struct Dial3dParams){
-                                      .draw_options = draw_options,
-                                      .angle_ofs = angle_ofs,
-                                      .angle_delta = angle_delta,
-                                      .angle_increment = angle_increment,
-                                      .arc_partial_angle = arc_partial_angle,
-                                      .arc_inner_factor = arc_inner_factor,
-                                      .clip_plane = clip_plane,
-                                  });
+  dial_3d_draw_util(gz->matrix_basis,
+                    matrix_final,
+                    gz->line_width,
+                    color,
+                    select,
+                    &(struct Dial3dParams){
+                        .draw_options = draw_options,
+                        .angle_ofs = angle_ofs,
+                        .angle_delta = angle_delta,
+                        .angle_increment = angle_increment,
+                        .arc_partial_angle = arc_partial_angle,
+                        .arc_inner_factor = arc_inner_factor,
+                        .clip_plane = clip_plane,
+                    });
 }
 
 static void gizmo_dial_draw_select(const bContext *C, wmGizmo *gz, int select_id)
@@ -479,6 +495,10 @@ static int gizmo_dial_modal(bContext *C,
                             eWM_GizmoFlagTweak tweak_flag)
 {
   DialInteraction *inter = gz->interaction_data;
+  if (!inter) {
+    return OPERATOR_CANCELLED;
+  }
+
   if ((event->type != MOUSEMOVE) && (inter->prev.tweak_flag == tweak_flag)) {
     return OPERATOR_RUNNING_MODAL;
   }
@@ -522,11 +542,13 @@ static void gizmo_dial_exit(bContext *C, wmGizmo *gz, const bool cancel)
   bool use_reset_value = false;
   float reset_value = 0.0f;
   if (cancel) {
-    /* Set the property for the operator and call its modal function. */
-    wmGizmoProperty *gz_prop = WM_gizmo_target_property_find(gz, "offset");
-    if (WM_gizmo_target_property_is_valid(gz_prop)) {
-      use_reset_value = true;
-      reset_value = inter->init.prop_angle;
+    if (inter) {
+      /* Set the property for the operator and call its modal function. */
+      wmGizmoProperty *gz_prop = WM_gizmo_target_property_find(gz, "offset");
+      if (WM_gizmo_target_property_is_valid(gz_prop)) {
+        use_reset_value = true;
+        reset_value = inter->init.prop_angle;
+      }
     }
   }
   else {
@@ -564,6 +586,11 @@ static void gizmo_dial_setup(wmGizmo *gz)
 
 static int gizmo_dial_invoke(bContext *UNUSED(C), wmGizmo *gz, const wmEvent *event)
 {
+  if (gz->custom_modal) {
+    /* #DialInteraction is only used for the inner modal. */
+    return OPERATOR_RUNNING_MODAL;
+  }
+
   DialInteraction *inter = MEM_callocN(sizeof(DialInteraction), __func__);
 
   inter->init.mval[0] = event->mval[0];
@@ -583,12 +610,12 @@ static int gizmo_dial_invoke(bContext *UNUSED(C), wmGizmo *gz, const wmEvent *ev
 /** \name Dial Gizmo API
  * \{ */
 
-void ED_gizmotypes_dial_3d_draw_util(const float matrix_basis[4][4],
-                                     const float matrix_final[4][4],
-                                     const float line_width,
-                                     const float color[4],
-                                     const bool select,
-                                     struct Dial3dParams *params)
+static void dial_3d_draw_util(const float matrix_basis[4][4],
+                              const float matrix_final[4][4],
+                              const float line_width,
+                              const float color[4],
+                              const bool select,
+                              struct Dial3dParams *params)
 {
   GPU_matrix_push();
   GPU_matrix_mul(matrix_final);
diff --git a/source/blender/editors/include/ED_gizmo_library.h b/source/blender/editors/include/ED_gizmo_library.h
index f8df4ba2a0c..31c1f93f5bc 100644
--- a/source/blender/editors/include/ED_gizmo_library.h
+++ b/source/blender/editors/include/ED_gizmo_library.h
@@ -225,24 +225,6 @@ enum {
 /* -------------------------------------------------------------------- */
 /* Specific gizmos utils */
 
-/* dial3d_gizmo.c */
-
-struct Dial3dParams {
-  int draw_options;
-  float angle_ofs;
-  float angle_delta;
-  float angle_increment;
-  float arc_partial_angle;
-  float arc_inner_factor;
-  float *clip_plane;
-};
-void ED_gizmotypes_dial_3d_draw_util(const float matrix_basis[4][4],
-                                     const float matrix_final[4][4],
-                                     float line_width,
-                                     const float color[4],
-                                     bool select,
-                                     struct Dial3dParams *params);
-
 /* snap3d_gizmo.c */
 
 struct SnapObjectContext *ED_gizmotypes_snap_3d_context_ensure(struct Scene *scene,
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 8e0ea82bb32..960d9a25ca7 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1425,9 +1425,6 @@ static void drawTransformView(const struct bContext *C, ARegion *region, void *a
     /* edge slide, vert slide */
     drawEdgeSlide(t);
     drawVertSlide(t);
-
-    /* Rotation */
-    drawDial3d(t);
   }
 }
 
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index e5ce1842a8e..a35942aedec 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -743,7 +743,6 @@ void transform_final_value_get(const TransInfo *t, float *value, int value_num);
 
 bool gimbal_axis_pose(struct Object *ob, const struct bPoseChannel *pchan, float gmat[3][3]);
 bool gimbal_axis_object(struct Object *ob, float gmat[3][3]);
-void drawDial3d(const TransInfo *t);
 
 /** \} */
 
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index 7b1666f0985..5b749e05052 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -45,7 +45,6 @@
 #include "WM_api.h"
 #include "WM_message.h"
 #include "WM_types.h"
-#include "wm.h"
 
 #include "ED_armature.h"
 #include "ED_gizmo_library.h"
@@ -159,6 +158,9 @@ typedef struct GizmoGroup {
     float viewinv_m3[3][3];
   } prev;
 
+  /* Only for Rotate operator. */
+  float rotation;
+
   struct wmGizmo *gizmos[MAN_AXIS_LAST];
 } GizmoGroup;
 
@@ -1273,103 +1275,31 @@ static void gizmo_xform_message_subscribe(wmGizmoGroup *gzgroup,
   WM_msg_subscribe_rna_anon_prop(mbus, EditBone, lock, &msg_sub_value_gz_tag_refresh);
 }
 
-void drawDial3d(const TransInfo *t)
+static void gizmo_3d_dial_matrixbasis_calc(const ARegion *region,
+                                           float axis[3],
+                                           float center_global[3],
+                                           float mval_init[2],
+                                           float r_mat_basis[4][4])
 {
-  if (t->mode == TFM_ROTATION && t->spacetype == SPACE_VIEW3D) {
-    if (t->options & CTX_PAINT_CURVE) {
-      /* Matrices are in the screen space. Not supported. */
-      return;
-    }
-
-    wmGizmo *gz = wm_gizmomap_modal_get(t->region->gizmo_map);
-    if (gz == NULL) {
-      /* We only draw Dial3d if the operator has been called by a gizmo. */
-      return;
-    }
-
-    float mat_basis[4][4];
-    float mat_final[4][4];
-    float color[4];
-    float increment = 0.0f;
-    float line_with = GIZMO_AXIS_LINE_WIDTH + 1.0f;
-    float scale = UI_DPI_FAC * U.gizmo_size;
-
-    int axis_idx;
-
-    const TransCon *tc = &(t->con);
-    if (tc->mode & CON_APPLY) {
-      if (tc->mode & CON_AXIS0) {
-        axis_idx = MAN_AXIS_ROT_X;
-        negate_v3_v3(mat_basis[2], t->spacemtx[0]);
-      }
-      else if (tc->mode & CON_AXIS1) {
-        axis_idx = MAN_AXIS_ROT_Y;
-        negate_v3_v3(mat_basis[2], t->spacemtx[1]);
-      }
-      else {
-        BLI_assert((tc->mode & CON_AXIS2) != 0);
-        axis_idx = MAN_AXIS_ROT_Z;
-        negate_v3_v3(mat_basis[2], t->spacemtx[2]);
-      }
-    }
-    else {
-      axis_idx = MAN_AXIS_ROT_C;
-      copy_v3_v3(mat_basis[2], t->spacemtx[t->orient_axis]);
-      scale *= 1.2f;
-      line_with -= 1.0f;
-    }
-
-    copy_v3_v3(mat_basis[3], t->center_global);
-    mat_basis[2][3] = -dot_v3v3(mat_basis[2], mat_basis[3]);
-
-    if (ED_view3d_win_to_3d_on_plane(
-            t->region, mat_bas

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list