diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-05-23 18:35:48 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-05-23 18:38:07 +0300 |
commit | ec664636e7c411463639d97b2167c16c826bc1a3 (patch) | |
tree | b481d17b71334a75b3d65bbad297be66dbcc8ae6 /source/blender/editors/transform/transform_ops.c | |
parent | faf48c0f6473df6798cdc1c672a7e40110cc8064 (diff) |
3D View: add back transform tool
Further changes are planned in T64928,
this is just the initial basic version.
Diffstat (limited to 'source/blender/editors/transform/transform_ops.c')
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index cdd0896ab66..f028f2dc506 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -1210,6 +1210,60 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot) P_ALIGN_SNAP | P_GPENCIL_EDIT | P_CENTER); } +static int transform_from_gizmo_invoke(bContext *C, + wmOperator *UNUSED(op), + const wmEvent *UNUSED(event)) +{ + bToolRef *tref = WM_toolsystem_ref_from_context(C); + if (tref) { + ARegion *ar = CTX_wm_region(C); + wmGizmoMap *gzmap = ar->gizmo_map; + wmGizmoGroup *gzgroup = gzmap ? WM_gizmomap_group_find(gzmap, "VIEW3D_GGT_xform_gizmo") : NULL; + if (gzgroup != NULL) { + PointerRNA gzg_ptr; + WM_toolsystem_ref_properties_ensure_from_gizmo_group(tref, gzgroup->type, &gzg_ptr); + const int drag_action = RNA_enum_get(&gzg_ptr, "drag_action"); + const char *op_id = NULL; + switch (drag_action) { + case V3D_GIZMO_SHOW_OBJECT_TRANSLATE: + op_id = "TRANSFORM_OT_translate"; + break; + case V3D_GIZMO_SHOW_OBJECT_ROTATE: + op_id = "TRANSFORM_OT_rotate"; + break; + case V3D_GIZMO_SHOW_OBJECT_SCALE: + op_id = "TRANSFORM_OT_resize"; + break; + default: + break; + } + if (op_id) { + wmOperatorType *ot = WM_operatortype_find(op_id, true); + PointerRNA op_ptr; + WM_operator_properties_create_ptr(&op_ptr, ot); + RNA_boolean_set(&op_ptr, "release_confirm", true); + WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &op_ptr); + WM_operator_properties_free(&op_ptr); + return OPERATOR_FINISHED; + } + } + } + return OPERATOR_PASS_THROUGH; +} + +/* Use with 'TRANSFORM_GGT_gizmo'. */ +static void TRANSFORM_OT_from_gizmo(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Transform From Gizmo"; + ot->description = "Transform selected items by mode type"; + ot->idname = "TRANSFORM_OT_from_gizmo"; + ot->flag = 0; + + /* api callbacks */ + ot->invoke = transform_from_gizmo_invoke; +} + void transform_operatortypes(void) { TransformModeItem *tmode; @@ -1223,6 +1277,8 @@ void transform_operatortypes(void) WM_operatortype_append(TRANSFORM_OT_select_orientation); WM_operatortype_append(TRANSFORM_OT_create_orientation); WM_operatortype_append(TRANSFORM_OT_delete_orientation); + + WM_operatortype_append(TRANSFORM_OT_from_gizmo); } void ED_keymap_transform(wmKeyConfig *keyconf) |