[Bf-blender-cvs] [334b25a] wiggly-widgets: * Manipulator Y 3D arrow moved and rotated correctly. * Light manipulator doing undo now * Scons should be fixed.
Antony Riakiotakis
noreply at git.blender.org
Wed Oct 8 19:34:34 CEST 2014
Commit: 334b25a226739ee652c5b8ae9f1440b37a7164c0
Author: Antony Riakiotakis
Date: Wed Oct 8 19:34:16 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB334b25a226739ee652c5b8ae9f1440b37a7164c0
* Manipulator Y 3D arrow moved and rotated correctly.
* Light manipulator doing undo now
* Scons should be fixed.
===================================================================
M source/blender/editors/include/UI_interface.h
M source/blender/editors/interface/SConscript
M source/blender/editors/interface/interface_generic_widgets.c
M source/blender/editors/transform/transform_manipulator.c
===================================================================
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 3ece454..e2af928 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -1011,5 +1011,7 @@ enum {
struct wmWidget *WIDGET_arrow_new(int style, int (*handler)(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget));
void WIDGET_arrow_set_color(struct wmWidget *widget, float color[4]);
+void WIDGET_arrow_set_origin(struct wmWidget *widget, float origin[3]);
+void WIDGET_arrow_set_direction(struct wmWidget *widget, float direction[3]);
#endif /* __UI_INTERFACE_H__ */
diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript
index 303ab7f..beb2f09 100644
--- a/source/blender/editors/interface/SConscript
+++ b/source/blender/editors/interface/SConscript
@@ -28,6 +28,7 @@
Import ('env')
sources = env.Glob('*.c')
+sources += env.Glob('3d_widgets/*.c')
incs = [
'#/intern/guardedalloc',
@@ -44,6 +45,7 @@ incs = [
# python button eval
'../../python',
'../../windowmanager',
+ '3d_widgets'
]
defs = env['BF_GL_DEFINITIONS']
diff --git a/source/blender/editors/interface/interface_generic_widgets.c b/source/blender/editors/interface/interface_generic_widgets.c
index 86bca1a..f05bcdd 100644
--- a/source/blender/editors/interface/interface_generic_widgets.c
+++ b/source/blender/editors/interface/interface_generic_widgets.c
@@ -171,7 +171,7 @@ void UI_OT_lamp_position(struct wmOperatorType *ot)
ot->poll = lamp_position_poll;
/* flags */
- ot->flag = OPTYPE_BLOCKING;
+ ot->flag = OPTYPE_BLOCKING | OPTYPE_UNDO;
/* properties */
}
@@ -338,14 +338,21 @@ typedef struct ArrowWidget {
float color[4];
} ArrowWidget;
-static void widget_draw_intern(ArrowWidget *widget, bool select, bool highlight)
+static void widget_draw_intern(ArrowWidget *arrow, bool select, bool highlight)
{
+ float rot[3][3];
+ float mat[4][4];
+ float up[3] = {0.0f, 0.0f, 1.0f};
GLuint buf[3];
if (!select)
glGenBuffers(3, buf);
else
glGenBuffers(2, buf);
+ rotation_between_vecs_to_mat3(rot, up, arrow->direction);
+ copy_m4_m3(mat, rot);
+ copy_v3_v3(mat[3], arrow->origin);
+
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, buf[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 3 * _WIDGET_nverts_arrow, _WIDGET_verts_arrow, GL_STATIC_DRAW);
@@ -378,11 +385,16 @@ static void widget_draw_intern(ArrowWidget *widget, bool select, bool highlight)
if (highlight)
glColor3f(1.0, 1.0, 0.0);
else
- glColor3fv(widget->color);
+ glColor3fv(arrow->color);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
+ glPushMatrix();
+ glMultMatrixf(&mat[0][0]);
+
glDrawElements(GL_TRIANGLES, _WIDGET_nfaces_arrow * 3, GL_UNSIGNED_SHORT, NULL);
+
+ glPopMatrix();
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
@@ -416,6 +428,7 @@ static void widget_arrow_draw(struct wmWidget *widget, const struct bContext *UN
wmWidget *WIDGET_arrow_new(int style, int (*handler)(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget))
{
+ float dir_default[3] = {0.0f, 0.0f, 1.0f};
ArrowWidget *arrow;
arrow = MEM_callocN(sizeof(ArrowWidget), "arrowwidget");
@@ -427,6 +440,7 @@ wmWidget *WIDGET_arrow_new(int style, int (*handler)(struct bContext *C, const s
arrow->widget.customdata = NULL;
arrow->style = style;
+ copy_v3_v3(arrow->direction, dir_default);
return (wmWidget *)arrow;
}
@@ -437,3 +451,18 @@ void WIDGET_arrow_set_color(struct wmWidget *widget, float color[4])
copy_v4_v4(arrow->color, color);
}
+
+void WIDGET_arrow_set_origin(struct wmWidget *widget, float origin[3])
+{
+ ArrowWidget *arrow = (ArrowWidget *)widget;
+
+ copy_v3_v3(arrow->origin, origin);
+}
+
+void WIDGET_arrow_set_direction(struct wmWidget *widget, float direction[3])
+{
+ ArrowWidget *arrow = (ArrowWidget *)widget;
+
+ copy_v3_v3(arrow->direction, direction);
+ normalize_v3(arrow->direction);
+}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index a2aefb6..c7391d0 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -70,6 +70,7 @@
#include "ED_screen.h"
#include "UI_resources.h"
+#include "UI_interface.h"
/* local module include */
#include "transform.h"
@@ -1685,6 +1686,11 @@ void WIDGET_manipulator_draw(wmWidget *UNUSED(widget), const bContext *C)
}
}
+static void manipulator_unregister(wmWidgetGroup *wgroup, ManipulatorGroup *manipulator)
+{
+ WM_widget_unregister(wgroup, manipulator->translate_y);
+}
+
void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
{
ScrArea *sa = CTX_wm_area(C);
@@ -1696,6 +1702,8 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
int totsel;
+ manipulator_unregister(wgroup, manipulator);
+
v3d->twflag &= ~V3D_DRAW_MANIPULATOR;
totsel = calc_manipulator_stats(C);
@@ -1737,11 +1745,14 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
test_manipulator_axis(C);
drawflags = rv3d->twdrawflag; /* set in calc_manipulator_stats */
-
- if (drawflags & MAN_TRANS_Y)
- WM_widget_register(wgroup, manipulator->translate_y);
- else
- WM_widget_unregister(wgroup, manipulator->translate_y);
+
+ if (v3d->twtype & V3D_MANIP_TRANSLATE) {
+ if (drawflags & MAN_TRANS_Y) {
+ WM_widget_register(wgroup, manipulator->translate_y);
+ WIDGET_arrow_set_origin(manipulator->translate_y, rv3d->twmat[3]);
+ WIDGET_arrow_set_direction(manipulator->translate_y, rv3d->twmat[1]);
+ }
+ }
}
More information about the Bf-blender-cvs
mailing list