[Bf-blender-cvs] [c3504240144] blender2.8: Fix scale-cage refresh w/ view orientation

Campbell Barton noreply at git.blender.org
Tue Sep 11 23:17:18 CEST 2018


Commit: c35042401443842de8a81d23d397206150313ac4
Author: Campbell Barton
Date:   Wed Sep 12 07:19:37 2018 +1000
Branches: blender2.8
https://developer.blender.org/rBc35042401443842de8a81d23d397206150313ac4

Fix scale-cage refresh w/ view orientation

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

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 0ccf5ed072c..f3509f62faa 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -1711,6 +1711,10 @@ void TRANSFORM_GGT_gizmo(wmGizmoGroupType *gzgt)
 
 struct XFormCageWidgetGroup {
 	wmGizmo *gizmo;
+	/* Only for view orientation. */
+	struct {
+		float viewinv_m3[3][3];
+	} prev;
 };
 
 static bool WIDGETGROUP_xform_cage_poll(const bContext *C, wmGizmoGroupType *gzgt)
@@ -1822,6 +1826,9 @@ static void WIDGETGROUP_xform_cage_refresh(const bContext *C, wmGizmoGroup *gzgr
 			}
 		}
 	}
+
+	/* Needed to test view orientation changes. */
+	copy_m3_m4(xgzgroup->prev.viewinv_m3, rv3d->viewinv);
 }
 
 static void WIDGETGROUP_xform_cage_message_subscribe(
@@ -1838,7 +1845,6 @@ static void WIDGETGROUP_xform_cage_draw_prepare(const bContext *C, wmGizmoGroup
 {
 	struct XFormCageWidgetGroup *xgzgroup = gzgroup->customdata;
 	wmGizmo *gz = xgzgroup->gizmo;
-
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	Object *ob = OBACT(view_layer);
 	if (ob && ob->mode & OB_MODE_EDIT) {
@@ -1847,6 +1853,25 @@ static void WIDGETGROUP_xform_cage_draw_prepare(const bContext *C, wmGizmoGroup
 	else {
 		unit_m4(gz->matrix_space);
 	}
+
+	RegionView3D *rv3d = CTX_wm_region_view3d(C);
+	/* Avoid slowdown on view adjustments. */
+	if ((rv3d->rflag & RV3D_NAVIGATING) == 0) {
+		Scene *scene = CTX_data_scene(C);
+		switch (scene->orientation_type) {
+			case V3D_MANIP_VIEW:
+			{
+				float viewinv_m3[3][3];
+				copy_m3_m4(viewinv_m3, rv3d->viewinv);
+				if (!equals_m3m3(viewinv_m3, xgzgroup->prev.viewinv_m3)) {
+					/* Take care calling refresh from draw_prepare,
+					 * this should be OK because it's only adjusting the cage orientation. */
+					WIDGETGROUP_xform_cage_refresh(C, gzgroup);
+				}
+				break;
+			}
+		}
+	}
 }
 
 void VIEW3D_GGT_xform_cage(wmGizmoGroupType *gzgt)



More information about the Bf-blender-cvs mailing list