Tool System: option for transform drag action
See: T57203
This commit is contained in:
parent
a30c9f710a
commit
60d7740fe6
Notes:
blender-bot
2023-02-14 11:42:40 +01:00
Referenced by issue #57737, select or move over the transform tool Referenced by issue #57351, Modifiers (skin, armature, hook) not drawing in editmode
|
@ -369,8 +369,13 @@ class _defs_transform:
|
|||
@ToolDef.from_fn
|
||||
def transform():
|
||||
def draw_settings(context, layout, tool):
|
||||
layout.label(text="Gizmos:")
|
||||
tool_settings = context.tool_settings
|
||||
layout.prop(tool_settings, "use_gizmo_mode")
|
||||
|
||||
props = tool.gizmo_group_properties("TRANSFORM_GGT_gizmo")
|
||||
layout.prop(props, "drag_action")
|
||||
|
||||
return dict(
|
||||
text="Transform",
|
||||
description=(
|
||||
|
@ -378,7 +383,9 @@ class _defs_transform:
|
|||
),
|
||||
icon="ops.transform.transform",
|
||||
widget="TRANSFORM_GGT_gizmo",
|
||||
# No keymap default action, only for gizmo!
|
||||
keymap=(
|
||||
("transform.from_gizmo", dict(), dict(type='EVT_TWEAK_A', value='ANY')),
|
||||
),
|
||||
draw_settings=draw_settings,
|
||||
)
|
||||
|
||||
|
|
|
@ -44,8 +44,6 @@
|
|||
#include "BLI_math.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "BKE_action.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_curve.h"
|
||||
|
@ -82,6 +80,9 @@
|
|||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
/* local module include */
|
||||
#include "transform.h"
|
||||
|
||||
|
@ -1762,6 +1763,15 @@ void TRANSFORM_GGT_gizmo(wmGizmoGroupType *gzgt)
|
|||
gzgt->refresh = WIDGETGROUP_gizmo_refresh;
|
||||
gzgt->message_subscribe = WIDGETGROUP_gizmo_message_subscribe;
|
||||
gzgt->draw_prepare = WIDGETGROUP_gizmo_draw_prepare;
|
||||
|
||||
static const EnumPropertyItem rna_enum_gizmo_items[] = {
|
||||
{SCE_GIZMO_SHOW_TRANSLATE, "TRANSLATE", 0, "Move", ""},
|
||||
{SCE_GIZMO_SHOW_ROTATE, "ROTATE", 0, "Rotate", ""},
|
||||
{SCE_GIZMO_SHOW_SCALE, "SCALE", 0, "Scale", ""},
|
||||
{0, "NONE", 0, "None", ""},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
RNA_def_enum(gzgt->srna, "drag_action", rna_enum_gizmo_items, SCE_GIZMO_SHOW_TRANSLATE, "Drag Action", "");
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "WM_api.h"
|
||||
#include "WM_message.h"
|
||||
#include "WM_types.h"
|
||||
#include "WM_toolsystem.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
@ -1119,6 +1120,57 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot)
|
|||
ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | 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, "TRANSFORM_GGT_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 SCE_GIZMO_SHOW_TRANSLATE:
|
||||
op_id = "TRANSFORM_OT_translate";
|
||||
break;
|
||||
case SCE_GIZMO_SHOW_ROTATE:
|
||||
op_id = "TRANSFORM_OT_rotate";
|
||||
break;
|
||||
case SCE_GIZMO_SHOW_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->idname = "TRANSFORM_OT_from_gizmo";
|
||||
ot->flag = 0;
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke = transform_from_gizmo_invoke;
|
||||
}
|
||||
|
||||
void transform_operatortypes(void)
|
||||
{
|
||||
TransformModeItem *tmode;
|
||||
|
@ -1132,6 +1184,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 transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spaceid)
|
||||
|
|
Loading…
Reference in New Issue