[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