[Bf-blender-cvs] [2df86ca9672] blender2.8: Fix T56642: 3D view gizmo orientation wont update

Campbell Barton noreply at git.blender.org
Mon Dec 3 06:53:17 CET 2018


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)



More information about the Bf-blender-cvs mailing list