Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py12
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py25
-rw-r--r--source/blender/editors/transform/transform_gizmo_3d.c19
-rw-r--r--source/blender/editors/transform/transform_ops.c56
4 files changed, 112 insertions, 0 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index a326bedbaa0..a344d4c7d50 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5060,6 +5060,7 @@ def km_popup_toolbar(_params):
{"items": [
op_tool("builtin.select", {"type": 'W', "value": 'PRESS'}),
op_tool("builtin.select_lasso", {"type": 'L', "value": 'PRESS'}),
+ op_tool("builtin.transform", {"type": 'T', "value": 'PRESS'}),
op_tool("builtin.measure", {"type": 'M', "value": 'PRESS'}),
]},
)
@@ -5298,6 +5299,16 @@ def km_3d_view_tool_select_lasso(params):
)
+def km_3d_view_tool_transform(params):
+ return (
+ "3D View Tool: Transform",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("transform.from_gizmo", {"type": params.tool_tweak, "value": 'ANY'}, None),
+ ]},
+ )
+
+
def km_3d_view_tool_move(params):
return (
"3D View Tool: Move",
@@ -6178,6 +6189,7 @@ def generate_keymaps(params=None):
km_3d_view_tool_select_box(params),
km_3d_view_tool_select_circle(params),
km_3d_view_tool_select_lasso(params),
+ km_3d_view_tool_transform(params),
km_3d_view_tool_move(params),
km_3d_view_tool_rotate(params),
km_3d_view_tool_scale(params),
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index f429904d3fb..db29a284a49 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -292,6 +292,30 @@ class _defs_transform:
draw_settings=draw_settings,
)
+ @ToolDef.from_fn
+ def transform():
+ def draw_settings(context, layout, tool):
+ if not layout.use_property_split:
+ layout.label(text="Gizmos:")
+ tool_settings = context.tool_settings
+
+ props = tool.gizmo_group_properties("VIEW3D_GGT_xform_gizmo")
+ layout.prop(props, "drag_action")
+
+ _template_widget.VIEW3D_GGT_xform_gizmo.draw_settings_with_index(context, layout, 1)
+
+ return dict(
+ idname="builtin.transform",
+ label="Transform",
+ description=(
+ "Supports any combination of grab, rotate & scale at once"
+ ),
+ icon="ops.transform.transform",
+ widget="VIEW3D_GGT_xform_gizmo",
+ keymap="3D View Tool: Transform",
+ draw_settings=draw_settings,
+ )
+
class _defs_view3d_select:
@@ -1685,6 +1709,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
# for reuse
_tools_transform = (
+ _defs_transform.transform,
_defs_transform.translate,
_defs_transform.rotate,
(
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index e43379dc358..16dcd053f9d 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -1661,7 +1661,12 @@ static void WIDGETGROUP_gizmo_setup(const bContext *C, wmGizmoGroup *gzgroup)
else if (tref && STREQ(tref->idname, "builtin.scale")) {
ggd->twtype |= V3D_GIZMO_SHOW_OBJECT_SCALE;
}
+ else if (tref && STREQ(tref->idname, "builtin.transform")) {
+ ggd->twtype = V3D_GIZMO_SHOW_OBJECT_TRANSLATE | V3D_GIZMO_SHOW_OBJECT_ROTATE |
+ V3D_GIZMO_SHOW_OBJECT_SCALE;
+ }
else {
+ /* This is also correct logic for 'builtin.transform', no special check needed. */
/* Setup all gizmos, they can be toggled via 'ToolSettings.gizmo_flag' */
ggd->twtype = V3D_GIZMO_SHOW_OBJECT_TRANSLATE | V3D_GIZMO_SHOW_OBJECT_ROTATE |
V3D_GIZMO_SHOW_OBJECT_SCALE;
@@ -1990,6 +1995,20 @@ void VIEW3D_GGT_xform_gizmo(wmGizmoGroupType *gzgt)
gzgt->message_subscribe = WIDGETGROUP_gizmo_message_subscribe;
gzgt->draw_prepare = WIDGETGROUP_gizmo_draw_prepare;
gzgt->invoke_prepare = WIDGETGROUP_gizmo_invoke_prepare;
+
+ static const EnumPropertyItem rna_enum_gizmo_items[] = {
+ {V3D_GIZMO_SHOW_OBJECT_TRANSLATE, "TRANSLATE", 0, "Move", ""},
+ {V3D_GIZMO_SHOW_OBJECT_ROTATE, "ROTATE", 0, "Rotate", ""},
+ {V3D_GIZMO_SHOW_OBJECT_SCALE, "SCALE", 0, "Scale", ""},
+ {0, "NONE", 0, "None", ""},
+ {0, NULL, 0, NULL, NULL},
+ };
+ RNA_def_enum(gzgt->srna,
+ "drag_action",
+ rna_enum_gizmo_items,
+ V3D_GIZMO_SHOW_OBJECT_TRANSLATE,
+ "Drag Action",
+ "");
}
/** Only poll, flag & gzmap_params differ. */
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)