diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2015-10-22 20:25:02 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2015-10-22 20:25:02 +0300 |
commit | 0fd7310b5133aa57a4307c4cb19e44531d723ec1 (patch) | |
tree | e7f53b574f38102916bbb09cb403b472bc4373a9 /source/blender/editors/transform/transform_manipulator.c | |
parent | 83a2d3dcf5a73f907c741038d5c55cb9f7aff1f9 (diff) | |
parent | 6ec01dcbf29104a6f323b54f8afb2adfd2163ada (diff) |
Merge branch 'wiggly-widgets' into UI-experimentsUI-experiments
Conflicts:
source/blender/blenkernel/intern/customdata.c
source/blender/blenloader/intern/versioning_270.c
source/blender/editors/interface/resources.c
source/blender/editors/transform/transform_manipulator.c
Diffstat (limited to 'source/blender/editors/transform/transform_manipulator.c')
-rw-r--r-- | source/blender/editors/transform/transform_manipulator.c | 79 |
1 files changed, 37 insertions, 42 deletions
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 522cf15eb10..436e44b4f9c 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -462,7 +462,7 @@ static void axis_angle_to_gimbal_axis(float gmat[3][3], const float axis[3], con mul_qt_v3(quat, gmat[0]); /* Y-axis */ - axis_angle_to_quat(quat, axis, M_PI / 2.0); + axis_angle_to_quat(quat, axis, M_PI_2); copy_v3_v3(gmat[1], gmat[0]); mul_qt_v3(quat, gmat[1]); @@ -847,8 +847,6 @@ static int calc_manipulator_stats(const bContext *C) } } else { - float loc[3]; - /* we need the one selected object, if its not active */ ob = OBACT; if (ob && !(ob->flag & SELECT)) @@ -859,9 +857,7 @@ static int calc_manipulator_stats(const bContext *C) if (ob == NULL) ob = base->object; - /* updated object matrix after transform */ - add_v3_v3v3(loc, base->object->loc, base->object->dloc); - calc_tw_center(scene, loc); + calc_tw_center(scene, base->object->loc); protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag); totsel++; } @@ -889,8 +885,7 @@ static int calc_manipulator_stats(const bContext *C) /* fall-through */ case V3D_MANIP_NORMAL: if (obedit || ob->mode & OB_MODE_POSE) { - float mat[3][3]; - ED_getTransformOrientationMatrix(C, mat, (v3d->around == V3D_ACTIVE)); + ED_getTransformOrientationMatrix(C, mat, v3d->around); copy_m4_m3(rv3d->twmat, mat); break; } @@ -902,8 +897,7 @@ static int calc_manipulator_stats(const bContext *C) * use the active pones axis for display [#33575], this works as expected on a single bone * and users who select many bones will understand whats going on and what local means * when they start transforming */ - float mat[3][3]; - ED_getTransformOrientationMatrix(C, mat, (v3d->around == V3D_ACTIVE)); + ED_getTransformOrientationMatrix(C, mat, v3d->around); copy_m4_m3(rv3d->twmat, mat); break; } @@ -916,13 +910,10 @@ static int calc_manipulator_stats(const bContext *C) copy_m4_m3(rv3d->twmat, mat); break; default: /* V3D_MANIP_CUSTOM */ - { - float mat[3][3]; if (applyTransformOrientation(C, mat, NULL, v3d->twmode - V3D_MANIP_CUSTOM)) { copy_m4_m3(rv3d->twmat, mat); } break; - } } } @@ -961,11 +952,7 @@ static void manipulator_prepare_mat(Scene *scene, View3D *v3d, RegionView3D *rv3 { Object *ob = OBACT; if ((v3d->around == V3D_ACTIVE) && !scene->obedit && !(ob->mode & OB_MODE_POSE)) { - float loc[3]; - - /* updated object matrix after transform */ - add_v3_v3v3(loc, ob->loc, ob->dloc); - copy_v3_v3(rv3d->twmat[3], loc); + copy_v3_v3(rv3d->twmat[3], ob->obmat[3]); } else { mid_v3_v3v3(rv3d->twmat[3], scene->twmin, scene->twmax); @@ -985,32 +972,33 @@ static void manipulator_prepare_mat(Scene *scene, View3D *v3d, RegionView3D *rv3 } /** - * Sets up \a r_vec for custom arrow widget line drawing. Needed to - * adjust line drawing for combined manipulator axis types. + * Sets up \a r_start and \a r_len to define arrow line range. + * Needed to adjust line drawing for combined manipulator axis types. */ -static void manipulator_line_vec(const View3D *v3d, float r_vec[2][3], const short axis_type) +static void manipulator_line_range(const View3D *v3d, const short axis_type, float *r_start, float *r_len) { const float ofs = 0.2f; - float start[3] = {0.0f, 0.0f, 0.2f}; - float end[3] = {0.0f, 0.0f, 1.0f}; + + *r_start = 0.2f; + *r_len = 1.0f; switch (axis_type) { case MAN_AXES_TRANSLATE: if (v3d->twtype & V3D_MANIP_SCALE) { - start[2] = end[2] - ofs + 0.025f; + *r_start = *r_len - ofs + 0.075f; } if (v3d->twtype & V3D_MANIP_ROTATE) { - end[2] += ofs; + *r_len += ofs; } break; case MAN_AXES_SCALE: if (v3d->twtype & (V3D_MANIP_TRANSLATE | V3D_MANIP_ROTATE)) { - end[2] -= ofs + 0.025f; + *r_len -= ofs + 0.025f; } break; } - copy_v3_v3(r_vec[0], start); - copy_v3_v3(r_vec[1], end); + + *r_len -= *r_start; } @@ -1087,7 +1075,7 @@ void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGro const bool trans_visble = (any_visible && (v3d->twtype & V3D_MANIP_TRANSLATE)); const bool rot_visble = (any_visible && (v3d->twtype & V3D_MANIP_ROTATE)); const bool scale_visible = (any_visible && (v3d->twtype & V3D_MANIP_SCALE)); - const ManipulatorGroup *man = manipulatorgroup_init(wgroup, trans_visble, rot_visble, scale_visible); + ManipulatorGroup *man = manipulatorgroup_init(wgroup, trans_visble, rot_visble, scale_visible); if (!man) return; @@ -1101,7 +1089,7 @@ void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGro if (fabsf(mat4_to_scale(rv3d->twmat)) < 1e-7f) { MAN_ITER_AXES_BEGIN { - WM_widget_flag_set(axis, WM_WIDGET_HIDDEN, true); + WM_widget_set_flag(axis, WM_WIDGET_HIDDEN, true); } MAN_ITER_AXES_END; @@ -1118,11 +1106,10 @@ void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGro int constraint_axis[3] = {1, 0, 0}; PointerRNA *ptr; - float line_vec[2][3]; float col[4], col_hi[4]; if (manipulator_is_axis_visible(v3d, rv3d, axis_idx) == false) { - WM_widget_flag_set(axis, WM_WIDGET_HIDDEN, true); + WM_widget_set_flag(axis, WM_WIDGET_HIDDEN, true); continue; } @@ -1141,17 +1128,23 @@ void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGro case MAN_AXIS_SCALE_X: case MAN_AXIS_SCALE_Y: case MAN_AXIS_SCALE_Z: - manipulator_line_vec(v3d, line_vec, axis_type); + { + float start_co[3] = {0.0f, 0.0f, 0.0f}; + float len; + + manipulator_line_range(v3d, axis_type, &start_co[2], &len); WIDGET_arrow_set_direction(axis, rv3d->twmat[aidx_norm]); - WIDGET_arrow_set_line_vec(axis, (const float (*)[3])line_vec, ARRAY_SIZE(line_vec)); + WIDGET_arrow_set_line_len(axis, len); + WM_widget_set_offset(axis, start_co); WM_widget_set_line_width(axis, MAN_AXIS_LINE_WIDTH); break; + } case MAN_AXIS_ROT_X: case MAN_AXIS_ROT_Y: case MAN_AXIS_ROT_Z: + WIDGET_dial_set_up_vector(axis, rv3d->twmat[aidx_norm]); WM_widget_set_line_width(axis, MAN_AXIS_LINE_WIDTH); - WIDGET_dial_set_direction(axis, rv3d->twmat[aidx_norm]); break; case MAN_AXIS_TRANS_XY: case MAN_AXIS_TRANS_YZ: @@ -1167,38 +1160,40 @@ void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGro ofs[1] = ofs_ax; ofs[2] = 0.0f; - WM_widget_set_scale(axis, 0.07f); - WM_widget_set_origin(axis, rv3d->twmat[3]); - WIDGET_plane_set_offset(axis, ofs); WIDGET_plane_set_direction(axis, rv3d->twmat[aidx_norm - 1 < 0 ? 2 : aidx_norm - 1]); WIDGET_plane_set_up_vector(axis, rv3d->twmat[aidx_norm + 1 > 2 ? 0 : aidx_norm + 1]); + WM_widget_set_scale(axis, 0.07f); + WM_widget_set_origin(axis, rv3d->twmat[3]); + WM_widget_set_offset(axis, ofs); break; } case MAN_AXIS_TRANS_C: case MAN_AXIS_ROT_C: case MAN_AXIS_SCALE_C: + WIDGET_dial_set_up_vector(axis, rv3d->viewinv[2]); if (axis_idx != MAN_AXIS_ROT_C) { WM_widget_set_scale(axis, 0.2f); } - WIDGET_dial_set_direction(axis, rv3d->viewinv[2]); break; } switch (axis_type) { case MAN_AXES_TRANSLATE: - ptr = WM_widget_operator(axis, "TRANSFORM_OT_translate"); + ptr = WM_widget_set_operator(axis, "TRANSFORM_OT_translate"); break; case MAN_AXES_ROTATE: - ptr = WM_widget_operator(axis, "TRANSFORM_OT_rotate"); + ptr = WM_widget_set_operator(axis, "TRANSFORM_OT_rotate"); break; case MAN_AXES_SCALE: - ptr = WM_widget_operator(axis, "TRANSFORM_OT_resize"); + ptr = WM_widget_set_operator(axis, "TRANSFORM_OT_resize"); break; } RNA_boolean_set_array(ptr, "constraint_axis", constraint_axis); RNA_boolean_set(ptr, "release_confirm", 1); } MAN_ITER_AXES_END; + + MEM_freeN(man); } void WIDGETGROUP_object_manipulator_create(const struct bContext *C, struct wmWidgetGroup *wgroup) |