[Bf-blender-cvs] [6b540e07] wiggly-widgets: Tweaks for combined manipulator types with 2-axes constrained widgets
Julian Eisel
noreply at git.blender.org
Sun Aug 23 23:31:57 CEST 2015
Commit: 6b540e07a578b31855ae1b0f1568cc6c17c48040
Author: Julian Eisel
Date: Sun Aug 23 23:24:08 2015 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB6b540e07a578b31855ae1b0f1568cc6c17c48040
Tweaks for combined manipulator types with 2-axes constrained widgets
Now works as follows with combined manipulator types:
Translate+Rotate: 2-axes widgets hidden
Scale+Rotate: 2-axes widgets hidden
Translate+Scale: Use 2-axes widgets from translate, hide scale ones
Tranlate+Scale+Rotate: 2-axes widgets hidden
We can of course still change behavior later, but would like to get user feedback for this.
===================================================================
M source/blender/editors/transform/manipulator_widget.c
===================================================================
diff --git a/source/blender/editors/transform/manipulator_widget.c b/source/blender/editors/transform/manipulator_widget.c
index 0a31f34..4551212 100644
--- a/source/blender/editors/transform/manipulator_widget.c
+++ b/source/blender/editors/transform/manipulator_widget.c
@@ -259,7 +259,7 @@ static int manipulator_index_normalize(const int axis_idx)
return axis_idx;
}
-static bool manipulator_is_axis_visible(const RegionView3D *rv3d, const int axis_idx)
+static bool manipulator_is_axis_visible(const View3D *v3d, const RegionView3D *rv3d, const int axis_idx)
{
switch (axis_idx) {
case MAN_AXIS_TRANS_X:
@@ -268,12 +268,6 @@ static bool manipulator_is_axis_visible(const RegionView3D *rv3d, const int axis
return (rv3d->twdrawflag & MAN_TRANS_Y);
case MAN_AXIS_TRANS_Z:
return (rv3d->twdrawflag & MAN_TRANS_Z);
- case MAN_AXIS_TRANS_XY:
- return (rv3d->twdrawflag & MAN_TRANS_X && rv3d->twdrawflag & MAN_TRANS_Y);
- case MAN_AXIS_TRANS_YZ:
- return (rv3d->twdrawflag & MAN_TRANS_Y && rv3d->twdrawflag & MAN_TRANS_Z);
- case MAN_AXIS_TRANS_ZX:
- return (rv3d->twdrawflag & MAN_TRANS_Z && rv3d->twdrawflag & MAN_TRANS_X);
case MAN_AXIS_TRANS_C:
return (rv3d->twdrawflag & MAN_TRANS_C);
case MAN_AXIS_ROT_X:
@@ -290,14 +284,35 @@ static bool manipulator_is_axis_visible(const RegionView3D *rv3d, const int axis
return (rv3d->twdrawflag & MAN_SCALE_Y);
case MAN_AXIS_SCALE_Z:
return (rv3d->twdrawflag & MAN_SCALE_Z);
+ case MAN_AXIS_SCALE_C:
+ return (rv3d->twdrawflag & MAN_SCALE_C && (v3d->twtype & V3D_MANIP_TRANSLATE) == 0);
+ case MAN_AXIS_TRANS_XY:
+ return (rv3d->twdrawflag & MAN_TRANS_X &&
+ rv3d->twdrawflag & MAN_TRANS_Y &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_TRANS_YZ:
+ return (rv3d->twdrawflag & MAN_TRANS_Y &&
+ rv3d->twdrawflag & MAN_TRANS_Z &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_TRANS_ZX:
+ return (rv3d->twdrawflag & MAN_TRANS_Z &&
+ rv3d->twdrawflag & MAN_TRANS_X &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
case MAN_AXIS_SCALE_XY:
- return (rv3d->twdrawflag & MAN_SCALE_X && rv3d->twdrawflag & MAN_SCALE_Y);
+ return (rv3d->twdrawflag & MAN_SCALE_X &&
+ rv3d->twdrawflag & MAN_SCALE_Y &&
+ (v3d->twtype & V3D_MANIP_TRANSLATE) == 0 &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
case MAN_AXIS_SCALE_YZ:
- return (rv3d->twdrawflag & MAN_SCALE_Y && rv3d->twdrawflag & MAN_SCALE_Z);
+ return (rv3d->twdrawflag & MAN_SCALE_Y &&
+ rv3d->twdrawflag & MAN_SCALE_Z &&
+ (v3d->twtype & V3D_MANIP_TRANSLATE) == 0 &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
case MAN_AXIS_SCALE_ZX:
- return (rv3d->twdrawflag & MAN_SCALE_Z && rv3d->twdrawflag & MAN_SCALE_X);
- case MAN_AXIS_SCALE_C:
- return (rv3d->twdrawflag & MAN_SCALE_C);
+ return (rv3d->twdrawflag & MAN_SCALE_Z &&
+ rv3d->twdrawflag & MAN_SCALE_X &&
+ (v3d->twtype & V3D_MANIP_TRANSLATE) == 0 &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
}
return false;
}
@@ -1116,7 +1131,7 @@ void WIDGETGROUP_manipulator_draw(const struct bContext *C, struct wmWidgetGroup
float line_vec[2][3];
float col[4];
- if (manipulator_is_axis_visible(rv3d, axis_idx) == false) {
+ if (manipulator_is_axis_visible(v3d, rv3d, axis_idx) == false) {
WM_widget_flag_set(axis, WM_WIDGET_HIDDEN, true);
continue;
}
@@ -1187,11 +1202,7 @@ void WIDGETGROUP_manipulator_draw(const struct bContext *C, struct wmWidgetGroup
case MAN_AXIS_TRANS_C:
case MAN_AXIS_ROT_C:
case MAN_AXIS_SCALE_C:
- /* only draw if there isn't already a circle for translate */
- if (axis_idx == MAN_AXIS_SCALE_C && (v3d->twtype & V3D_MANIP_TRANSLATE)) {
- WM_widget_flag_set(axis, WM_WIDGET_HIDDEN, true);
- }
- else if (axis_idx != MAN_AXIS_ROT_C) {
+ if (axis_idx != MAN_AXIS_ROT_C) {
WM_widget_set_scale(axis, 0.2f);
}
WIDGET_dial_set_direction(axis, rv3d->viewinv[2]);
More information about the Bf-blender-cvs
mailing list