Commit: 2df86ca9672759c8a99fa72e5e6d3d3e0c2da5c7
Author: Campbell Barton
Date:   Mon Dec 3 16:52:21 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB2df86ca9672759c8a99fa72e5e6d3d3e0c2da5c7

Fix T56642: 3D view gizmo orientation wont update

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

M       source/blender/editors/transform/transform_gizmo_3d.c

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

diff --git a/source/blender/editors/transform/transform_gizmo_3d.c 
b/source/blender/editors/transform/transform_gizmo_3d.c
index 1f001243a7c..74ab3867c5c 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -175,6 +175,11 @@ typedef struct GizmoGroup {
        int twtype_prev;
        int use_twtype_refresh;
 
+       /* Only for view orientation. */
+       struct {
+               float viewinv_m3[3][3];
+       } prev;
+
        struct wmGizmo *gizmos[MAN_AXIS_LAST];
 } GizmoGroup;
 
@@ -1753,6 +1758,8 @@ static void WIDGETGROUP_gizmo_draw_prepare(const bContext 
*C, wmGizmoGroup *gzgr
        ARegion *ar = CTX_wm_region(C);
        // View3D *v3d = sa->spacedata.first;
        RegionView3D *rv3d = ar->regiondata;
+       float viewinv_m3[3][3];
+       copy_m3_m4(viewinv_m3, rv3d->viewinv);
        float idot[3];
 
        /* when looking through a selected camera, the gizmo can be at the
@@ -1768,9 +1775,7 @@ static void WIDGETGROUP_gizmo_draw_prepare(const bContext 
*C, wmGizmoGroup *gzgr
        gizmo_get_idot(rv3d, idot);
 
        /* *** set properties for axes *** */
-
-       MAN_ITER_AXES_BEGIN(axis, axis_idx)
-       {
+       MAN_ITER_AXES_BEGIN(axis, axis_idx) {
                const short axis_type = gizmo_get_axis_type(axis_idx);
                /* XXX maybe unset _HIDDEN flag on redraw? */
 
@@ -1795,8 +1800,23 @@ static void WIDGETGROUP_gizmo_draw_prepare(const 
bContext *C, wmGizmoGroup *gzgr
                                WM_gizmo_set_matrix_rotation_from_z_axis(axis, 
rv3d->viewinv[2]);
                                break;
                }
+       } MAN_ITER_AXES_END;
+
+       /* Refresh handled above when using view orientation. */
+       if (!equals_m3m3(viewinv_m3, ggd->prev.viewinv_m3)) {
+               {
+                       Scene *scene = CTX_data_scene(C);
+                       switch (scene->orientation_type) {
+                               case V3D_MANIP_VIEW:
+                               {
+                                       WIDGETGROUP_gizmo_refresh(C, gzgroup);
+                                       break;
+                               }
+                       }
+               }
+               copy_m3_m4(ggd->prev.viewinv_m3, rv3d->viewinv);
        }
-       MAN_ITER_AXES_END;
+
 }
 
 static bool WIDGETGROUP_gizmo_poll(const struct bContext *C, struct 
wmGizmoGroupType *gzgt)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to