[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48387] branches/soc-2012-bratwurst/source /blender: Added additional manipulators for scaling/ translating in two dimensions at once, and added mouseover highlighting for the manipulator handles.

Jorge Rodriguez bs.vino at gmail.com
Thu Jun 28 22:48:31 CEST 2012


Revision: 48387
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48387
Author:   vino
Date:     2012-06-28 20:48:18 +0000 (Thu, 28 Jun 2012)
Log Message:
-----------
Added additional manipulators for scaling/translating in two dimensions at once, and added mouseover highlighting for the manipulator handles.

Modified Paths:
--------------
    branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h
    branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c
    branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h
    branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c
    branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c
    branches/soc-2012-bratwurst/source/blender/makesdna/DNA_view3d_types.h

Modified: branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h	2012-06-28 20:07:09 UTC (rev 48386)
+++ branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h	2012-06-28 20:48:18 UTC (rev 48387)
@@ -152,6 +152,7 @@
 
 int BIF_do_manipulator(struct bContext *C, struct wmEvent *event, struct wmOperator *op);
 void BIF_draw_manipulator(const struct bContext *C);
+int BIF_test_manipulator_mouseover(const struct bContext *C, struct wmEvent *event);
 
 /* Snapping */
 

Modified: branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c	2012-06-28 20:07:09 UTC (rev 48386)
+++ branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c	2012-06-28 20:48:18 UTC (rev 48387)
@@ -524,6 +524,41 @@
 		ED_region_tag_redraw(ar);
 }
 
+static int viewmouseover_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	if (BIF_test_manipulator_mouseover(C, event)) {
+		ARegion *ar= CTX_wm_region(C);
+		ED_region_tag_redraw(ar);
+	}
+
+	return OPERATOR_PASS_THROUGH;
+}
+
+static int viewmouseover_poll(bContext *C)
+{
+	View3D *v3d = CTX_wm_view3d(C);
+
+	if (v3d->twtype & (V3D_MANIP_TRANSLATE|V3D_MANIP_ROTATE|V3D_MANIP_SCALE))
+		return 1;
+
+	return 0;
+}
+
+void VIEW3D_OT_mouseover(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Mouseover (internal)";
+	ot->description = "Check for mouseover events";
+	ot->idname= "VIEW3D_OT_mouseover";
+
+	/* api callbacks */
+	ot->invoke= viewmouseover_invoke;
+	ot->poll= viewmouseover_poll;
+
+	/* flags */
+	ot->flag= OPTYPE_INTERNAL;
+}
+
 /* ************************** viewrotate **********************************/
 
 #define COS45 0.7071068

Modified: branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h	2012-06-28 20:07:09 UTC (rev 48386)
+++ branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h	2012-06-28 20:48:18 UTC (rev 48387)
@@ -72,6 +72,7 @@
 void view3d_operatortypes(void);
 
 /* view3d_edit.c */
+void VIEW3D_OT_mouseover(struct wmOperatorType *ot);
 void VIEW3D_OT_zoom(struct wmOperatorType *ot);
 void VIEW3D_OT_dolly(struct wmOperatorType *ot);
 void VIEW3D_OT_zoom_camera_1_to_1(struct wmOperatorType *ot);

Modified: branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c	2012-06-28 20:07:09 UTC (rev 48386)
+++ branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c	2012-06-28 20:48:18 UTC (rev 48387)
@@ -57,6 +57,7 @@
 
 void view3d_operatortypes(void)
 {
+	WM_operatortype_append(VIEW3D_OT_mouseover);
 	WM_operatortype_append(VIEW3D_OT_rotate);
 	WM_operatortype_append(VIEW3D_OT_move);
 	WM_operatortype_append(VIEW3D_OT_zoom);
@@ -145,6 +146,8 @@
 
 	WM_keymap_verify_item(keymap, "VIEW3D_OT_smoothview", TIMER1, KM_ANY, KM_ANY, 0);
 	
+	WM_keymap_add_item(keymap, "VIEW3D_OT_mouseover", MOUSEMOVE, 0, 0, 0);
+
 	WM_keymap_add_item(keymap, "VIEW3D_OT_rotate", MOUSEPAN, 0, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "VIEW3D_OT_rotate", MOUSEROTATE, 0, 0, 0);
 	WM_keymap_add_item(keymap, "VIEW3D_OT_move", MOUSEPAN, 0, 0, 0);

Modified: branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c	2012-06-28 20:07:09 UTC (rev 48386)
+++ branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c	2012-06-28 20:48:18 UTC (rev 48387)
@@ -84,23 +84,31 @@
 
 /* return codes for select, and drawing flags */
 
-#define MAN_TRANS_X     1
-#define MAN_TRANS_Y     2
-#define MAN_TRANS_Z     4
-#define MAN_TRANS_C     7
+#define MAN_TRANS_X		(1<<0)
+#define MAN_TRANS_Y		(1<<1)
+#define MAN_TRANS_Z		(1<<2)
+#define MAN_TRANS_C		(MAN_TRANS_X|MAN_TRANS_Y|MAN_TRANS_Z)
 
-#define MAN_ROT_X       8
-#define MAN_ROT_Y       16
-#define MAN_ROT_Z       32
-#define MAN_ROT_V       64
-#define MAN_ROT_T       128
-#define MAN_ROT_C       248
+#define MAN_ROT_X		(1<<3)
+#define MAN_ROT_Y		(1<<4)
+#define MAN_ROT_Z		(1<<5)
+#define MAN_ROT_V		(1<<6)
+#define MAN_ROT_T		(1<<7)
+#define MAN_ROT_C		(MAN_ROT_X|MAN_ROT_Y|MAN_ROT_Z|MAN_ROT_V|MAN_ROT_T)
 
-#define MAN_SCALE_X     256
-#define MAN_SCALE_Y     512
-#define MAN_SCALE_Z     1024
-#define MAN_SCALE_C     1792
+#define MAN_SCALE_X		(1<<8)
+#define MAN_SCALE_Y		(1<<9)
+#define MAN_SCALE_Z		(1<<10)
+#define MAN_SCALE_C		(MAN_SCALE_X|MAN_SCALE_Y|MAN_SCALE_Z)
 
+#define MAN_TRANS_XY	(1<<11)
+#define MAN_TRANS_YZ	(1<<12)
+#define MAN_TRANS_XZ	(1<<13)
+
+#define MAN_SCALE_XY	(1<<14)
+#define MAN_SCALE_YZ	(1<<15)
+#define MAN_SCALE_XZ	(1<<16)
+
 /* color codes */
 
 #define MAN_RGB     0
@@ -749,7 +757,7 @@
  * moving: in transform theme color
  * else the red/green/blue
  */
-static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned char alpha)
+static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned char alpha, int manipulator)
 {
 	unsigned char col[4] = {0};
 	col[3] = alpha;
@@ -776,15 +784,34 @@
 				}
 				break;
 			case 'X':
-				col[0] = 220;
+				if (manipulator & v3d->twhighlight) {
+					col[0]= 255;
+					col[1]= 200;
+					col[2]= 200;
+				}
+				else
+					col[0]= 220;
 				break;
 			case 'Y':
-				col[1] = 220;
+				if (manipulator & v3d->twhighlight) {
+					col[0]= 200;
+					col[1]= 255;
+					col[2]= 200;
+				}
+				else
+					col[1]= 220;
 				break;
 			case 'Z':
-				col[0] = 30;
-				col[1] = 30;
-				col[2] = 220;
+				if (manipulator & v3d->twhighlight) {
+					col[0]= 200;
+					col[1]= 200;
+					col[2]= 255;
+				}
+				else {
+					col[0]= 30;
+					col[1]= 30;
+					col[2]= 220;
+				}
 				break;
 			default:
 				BLI_assert(!"invalid axis arg");
@@ -800,7 +827,7 @@
 
 	/* axes */
 	if (flagx) {
-		manipulator_setcolor(v3d, 'X', colcode, axisBlendAngle(rv3d->twangle[0]));
+		manipulator_setcolor(v3d, 'X', colcode, axisBlendAngle(rv3d->twangle[0]), flagx);
 		if (flagx & MAN_SCALE_X) glLoadName(MAN_SCALE_X);
 		else if (flagx & MAN_TRANS_X) glLoadName(MAN_TRANS_X);
 		glBegin(GL_LINES);
@@ -811,7 +838,7 @@
 	if (flagy) {
 		if (flagy & MAN_SCALE_Y) glLoadName(MAN_SCALE_Y);
 		else if (flagy & MAN_TRANS_Y) glLoadName(MAN_TRANS_Y);
-		manipulator_setcolor(v3d, 'Y', colcode, axisBlendAngle(rv3d->twangle[1]));
+		manipulator_setcolor(v3d, 'Y', colcode, axisBlendAngle(rv3d->twangle[1]), flagy);
 		glBegin(GL_LINES);
 		glVertex3f(0.0f, 0.2f, 0.0f);
 		glVertex3f(0.0f, 1.0f, 0.0f);
@@ -820,7 +847,7 @@
 	if (flagz) {
 		if (flagz & MAN_SCALE_Z) glLoadName(MAN_SCALE_Z);
 		else if (flagz & MAN_TRANS_Z) glLoadName(MAN_TRANS_Z);
-		manipulator_setcolor(v3d, 'Z', colcode, axisBlendAngle(rv3d->twangle[2]));
+		manipulator_setcolor(v3d, 'Z', colcode, axisBlendAngle(rv3d->twangle[2]), flagz);
 		glBegin(GL_LINES);
 		glVertex3f(0.0f, 0.0f, 0.2f);
 		glVertex3f(0.0f, 0.0f, 1.0f);
@@ -949,7 +976,7 @@
 				/* axis */
 				if ((drawflags & MAN_ROT_X) || (moving && (drawflags & MAN_ROT_Z))) {
 					preOrthoFront(ortho, rv3d->twmat, 2);
-					manipulator_setcolor(v3d, 'X', colcode, 255);
+					manipulator_setcolor(v3d, 'X', colcode, 255, MAN_ROT_Z);
 					glBegin(GL_LINES);
 					glVertex3f(0.2f, 0.0f, 0.0f);
 					glVertex3f(1.0f, 0.0f, 0.0f);
@@ -958,7 +985,7 @@
 				}
 				if ((drawflags & MAN_ROT_Y) || (moving && (drawflags & MAN_ROT_X))) {
 					preOrthoFront(ortho, rv3d->twmat, 0);
-					manipulator_setcolor(v3d, 'Y', colcode, 255);
+					manipulator_setcolor(v3d, 'Y', colcode, 255, MAN_ROT_X);
 					glBegin(GL_LINES);
 					glVertex3f(0.0f, 0.2f, 0.0f);
 					glVertex3f(0.0f, 1.0f, 0.0f);
@@ -967,7 +994,7 @@
 				}
 				if ((drawflags & MAN_ROT_Z) || (moving && (drawflags & MAN_ROT_Y))) {
 					preOrthoFront(ortho, rv3d->twmat, 1);
-					manipulator_setcolor(v3d, 'Z', colcode, 255);
+					manipulator_setcolor(v3d, 'Z', colcode, 255, MAN_ROT_Y);
 					glBegin(GL_LINES);
 					glVertex3f(0.0f, 0.0f, 0.2f);
 					glVertex3f(0.0f, 0.0f, 1.0f);
@@ -984,7 +1011,7 @@
 		if (drawflags & MAN_ROT_Z) {
 			preOrthoFront(ortho, matt, 2);
 			if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Z);
-			manipulator_setcolor(v3d, 'Z', colcode, 255);
+			manipulator_setcolor(v3d, 'Z', colcode, 255, MAN_ROT_Z);
 			drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
 			postOrtho(ortho);
 		}
@@ -993,7 +1020,7 @@
 			preOrthoFront(ortho, matt, 0);
 			if (G.f & G_PICKSEL) glLoadName(MAN_ROT_X);
 			glRotatef(90.0, 0.0, 1.0, 0.0);
-			manipulator_setcolor(v3d, 'X', colcode, 255);
+			manipulator_setcolor(v3d, 'X', colcode, 255, MAN_ROT_X);
 			drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
 			glRotatef(-90.0, 0.0, 1.0, 0.0);
 			postOrtho(ortho);
@@ -1003,7 +1030,7 @@
 			preOrthoFront(ortho, matt, 1);
 			if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Y);
 			glRotatef(-90.0, 1.0, 0.0, 0.0);
-			manipulator_setcolor(v3d, 'Y', colcode, 255);
+			manipulator_setcolor(v3d, 'Y', colcode, 255, MAN_ROT_Y);
 			drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
 			glRotatef(90.0, 1.0, 0.0, 0.0);
 			postOrtho(ortho);
@@ -1019,7 +1046,7 @@
 		if (drawflags & MAN_ROT_Z) {
 			preOrthoFront(ortho, rv3d->twmat, 2);
 			if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Z);
-			manipulator_setcolor(v3d, 'Z', colcode, 255);
+			manipulator_setcolor(v3d, 'Z', colcode, 255, MAN_ROT_Z);
 			partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
 			postOrtho(ortho);
 		}
@@ -1028,7 +1055,7 @@
 			preOrthoFront(ortho, rv3d->twmat, 0);
 			if (G.f & G_PICKSEL) glLoadName(MAN_ROT_X);
 			glRotatef(90.0, 0.0, 1.0, 0.0);
-			manipulator_setcolor(v3d, 'X', colcode, 255);
+			manipulator_setcolor(v3d, 'X', colcode, 255, MAN_ROT_X);
 			partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
 			glRotatef(-90.0, 0.0, 1.0, 0.0);
 			postOrtho(ortho);
@@ -1038,7 +1065,7 @@
 			preOrthoFront(ortho, rv3d->twmat, 1);
 			if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Y);
 			glRotatef(-90.0, 1.0, 0.0, 0.0);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list