[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40004] trunk/blender: Apply patch [#28415 ] 3d mouse orbit mode individual axes enhancement

Nathan Letwory nathan at letworyinteractive.com
Wed Sep 7 12:33:46 CEST 2011


Revision: 40004
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40004
Author:   jesterking
Date:     2011-09-07 10:33:46 +0000 (Wed, 07 Sep 2011)
Log Message:
-----------
Apply patch [#28415] 3d mouse orbit mode individual axes enhancement
Submitted by Rainer Wahler

This patch enables individual axis inversion in trackball mode.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_userpref.py	2011-09-07 10:26:22 UTC (rev 40003)
+++ trunk/blender/release/scripts/startup/bl_ui/space_userpref.py	2011-09-07 10:33:46 UTC (rev 40004)
@@ -773,9 +773,20 @@
 
             layout.separator()
             layout.label(text="orbit options")
-            layout.prop(input_prefs, "ndof_orbit_invert_axes")
+            if input_prefs.view_rotate_method == 'TRACKBALL':
+                layout.prop(input_prefs, "ndof_roll_invert_axis")
+                layout.prop(input_prefs, "ndof_tilt_invert_axis")
+                layout.prop(input_prefs, "ndof_rotate_invert_axis")
+            else:
+                layout.prop(input_prefs, "ndof_orbit_invert_axes")
 
             layout.separator()
+            layout.label(text="pan options")
+            layout.prop(input_prefs, "ndof_panx_invert_axis")
+            layout.prop(input_prefs, "ndof_pany_invert_axis")
+            layout.prop(input_prefs, "ndof_panz_invert_axis")
+
+            layout.separator()
             layout.label(text="fly options")
             layout.prop(input_prefs, "ndof_fly_helicopter", icon='NDOF_FLY')
             layout.prop(input_prefs, "ndof_lock_horizon", icon='NDOF_DOM')

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2011-09-07 10:26:22 UTC (rev 40003)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2011-09-07 10:33:46 UTC (rev 40004)
@@ -1017,18 +1017,26 @@
 		
 			if (has_rotation) {
 		
-				const int invert = U.ndof_flag & NDOF_ORBIT_INVERT_AXES;
-		
 				rv3d->view = RV3D_VIEW_USER;
 		
 				if (U.flag & USER_TRACKBALL) {
+					const int invert_roll = U.ndof_flag & NDOF_ROLL_INVERT_AXIS;
+					const int invert_tilt = U.ndof_flag & NDOF_TILT_INVERT_AXIS;
+					const int invert_rot = U.ndof_flag & NDOF_ROTATE_INVERT_AXIS;
+
 					float rot[4];
 					float axis[3];
 					float angle = rot_sensitivity * ndof_to_axis_angle(ndof, axis);
-		
-					if (invert)
-						angle = -angle;
-		
+
+					if (invert_roll)
+						axis[2] = -axis[2];
+
+					if (invert_tilt)
+						axis[0] = -axis[0];
+
+					if (invert_rot)
+						axis[1] = -axis[1];
+
 					// transform rotation axis from view to world coordinates
 					mul_qt_v3(view_inv, axis);
 		
@@ -1042,6 +1050,8 @@
 					mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, rot);
 				} else {
 					/* turntable view code by John Aughey, adapted for 3D mouse by [mce] */
+					const int invert = U.ndof_flag & NDOF_ORBIT_INVERT_AXES;
+
 					float angle, rot[4];
 					float xvec[3] = {1,0,0};
 		
@@ -1143,11 +1153,27 @@
 			const float vertical_sensitivity = 0.4f;
 			const float lateral_sensitivity = 0.6f;
 
-			float pan_vec[3] = {lateral_sensitivity * ndof->tvec[0],
-								vertical_sensitivity * ndof->tvec[1],
-								forward_sensitivity * ndof->tvec[2]
-							   };
+			const int invert_panx = U.ndof_flag & NDOF_PANX_INVERT_AXIS;
+			const int invert_pany = U.ndof_flag & NDOF_PANY_INVERT_AXIS;
+			const int invert_panz = U.ndof_flag & NDOF_PANZ_INVERT_AXIS;
 
+			float pan_vec[3];
+
+			if (invert_panx)
+				pan_vec[0] = -lateral_sensitivity * ndof->tvec[0];
+			else
+				pan_vec[0] = lateral_sensitivity * ndof->tvec[0];
+
+			if (invert_panz)
+				pan_vec[1] = -vertical_sensitivity * ndof->tvec[1];
+			else
+				pan_vec[1] = vertical_sensitivity * ndof->tvec[1];
+
+			if (invert_pany)
+				pan_vec[2] = -forward_sensitivity * ndof->tvec[2];
+			else
+				pan_vec[2] = forward_sensitivity * ndof->tvec[2];
+
 			mul_v3_fl(pan_vec, speed * dt);
 #endif
 			/* transform motion from view to world coordinates */

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2011-09-07 10:26:22 UTC (rev 40003)
+++ trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2011-09-07 10:33:46 UTC (rev 40004)
@@ -607,6 +607,12 @@
 /* zoom is up/down if this flag is set (otherwise forward/backward) */
 #define NDOF_ZOOM_UPDOWN (1 << 7)
 #define NDOF_ZOOM_INVERT (1 << 8)
+#define NDOF_ROTATE_INVERT_AXIS (1 << 9)
+#define NDOF_TILT_INVERT_AXIS (1 << 10)
+#define NDOF_ROLL_INVERT_AXIS (1 << 11)
+#define NDOF_PANX_INVERT_AXIS (1 << 12)
+#define NDOF_PANY_INVERT_AXIS (1 << 13)
+#define NDOF_PANZ_INVERT_AXIS (1 << 14)
 
 
 #ifdef __cplusplus

Modified: trunk/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2011-09-07 10:26:22 UTC (rev 40003)
+++ trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2011-09-07 10:33:46 UTC (rev 40004)
@@ -2791,6 +2791,36 @@
 	RNA_def_property_ui_text(prop, "Invert Axes", "Toggle between moving the viewpoint or moving the scene being viewed");
 	/* in 3Dx docs, this is called 'object mode' vs. 'target camera mode' */
 
+	/* 3D view: roll */
+	prop= RNA_def_property(srna, "ndof_roll_invert_axis", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_ROLL_INVERT_AXIS);
+	RNA_def_property_ui_text(prop, "Invert roll Axis", "Invert roll axis");
+
+	/* 3D view: tilt */
+	prop= RNA_def_property(srna, "ndof_tilt_invert_axis", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_TILT_INVERT_AXIS);
+	RNA_def_property_ui_text(prop, "Invert tilt Axis", "Invert tilt axis");
+
+	/* 3D view: rotate */
+	prop= RNA_def_property(srna, "ndof_rotate_invert_axis", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_ROTATE_INVERT_AXIS);
+	RNA_def_property_ui_text(prop, "Invert rotation Axis", "Invert rotation axis");
+
+	/* 3D view: pan x */
+	prop= RNA_def_property(srna, "ndof_panx_invert_axis", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_PANX_INVERT_AXIS);
+	RNA_def_property_ui_text(prop, "Invert x Axis", "Invert x axis");
+
+	/* 3D view: pan y */
+	prop= RNA_def_property(srna, "ndof_pany_invert_axis", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_PANY_INVERT_AXIS);
+	RNA_def_property_ui_text(prop, "Invert y Axis", "Invert y axis");
+
+	/* 3D view: pan z */
+	prop= RNA_def_property(srna, "ndof_panz_invert_axis", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_PANZ_INVERT_AXIS);
+	RNA_def_property_ui_text(prop, "Invert z Axis", "Invert z axis");
+
 	/* 3D view: fly */
 	prop= RNA_def_property(srna, "ndof_lock_horizon", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "ndof_flag", NDOF_LOCK_HORIZON);




More information about the Bf-blender-cvs mailing list