WIP: Shift Extrude and Duplicate of meshes and objects #118968

Draft
Kyler Kelly-Tan wants to merge 20 commits from kylerk/blender:ShiftExtrude into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
3 changed files with 25 additions and 19 deletions
Showing only changes of commit 1d072bdf1a - Show all commits

View File

@ -385,39 +385,39 @@ void ED_operatormacros_mesh()
RNA_boolean_set(otmacro->ptr, "use_proportional_edit", false);
RNA_boolean_set(otmacro->ptr, "mirror", false);
ot = WM_operatortype_append_macro("MESH_OT_split_move",
"Split and Move",
ot = WM_operatortype_append_macro("MESH_OT_duplicate_move",
"Duplicate and Move",
nullptr,
OPTYPE_UNDO | OPTYPE_REGISTER);
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_split");
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_duplicate");
otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
RNA_boolean_set(otmacro->ptr, "use_proportional_edit", false);
RNA_boolean_set(otmacro->ptr, "mirror", false);
ot = WM_operatortype_append_macro("MESH_OT_context_split_rotate",
"Split Region and Rotate",
ot = WM_operatortype_append_macro("MESH_OT_context_duplicate_rotate",
"Duplicate Region and Rotate",
nullptr,
OPTYPE_UNDO | OPTYPE_REGISTER);
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_split");
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_duplicate");
otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_rotate");
RNA_boolean_set(otmacro->ptr, "use_proportional_edit", false);
RNA_boolean_set(otmacro->ptr, "mirror", false);
ot = WM_operatortype_append_macro("MESH_OT_context_split_trackball",
"Split Region and Rotate(Trackball)",
ot = WM_operatortype_append_macro("MESH_OT_context_duplicate_trackball",
"Duplicate Region and Rotate(Trackball)",
nullptr,
OPTYPE_UNDO | OPTYPE_REGISTER);
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_split");
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_duplicate");
otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_trackball");
RNA_boolean_set(otmacro->ptr, "use_proportional_edit", false);
RNA_boolean_set(otmacro->ptr, "mirror", false);
ot = WM_operatortype_append_macro("MESH_OT_context_split_scale",
"Split Region and Scale",
ot = WM_operatortype_append_macro("MESH_OT_context_duplicate_scale",
"Duplicate Region and Scale",
nullptr,
OPTYPE_UNDO | OPTYPE_REGISTER);
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_split");
otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_scale");
otmacro = WM_operatortype_macro_define(ot, "MESH_OT_duplicate");
otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_resize");
RNA_boolean_set(otmacro->ptr, "use_proportional_edit", false);
RNA_boolean_set(otmacro->ptr, "mirror", false);
}

View File

@ -1808,7 +1808,7 @@ static void gizmogroup_init_properties_from_twtype(const bContext *C, wmGizmoGro
case CTX_MODE_EDIT_MESH:
ot_store.extra_translate = WM_operatortype_find("MESH_OT_extrude_context_move",
true);
ot_store.extra_translate2 = WM_operatortype_find("MESH_OT_split_move",
ot_store.extra_translate2 = WM_operatortype_find("MESH_OT_duplicate_move",
true);
break;
}
@ -1845,7 +1845,7 @@ static void gizmogroup_init_properties_from_twtype(const bContext *C, wmGizmoGro
ot_store.extra_trackball = WM_operatortype_find(
"MESH_OT_extrude_context_trackball", true);
ot_store.extra_trackball2 = WM_operatortype_find(
"MESH_OT_context_split_trackball", true);
"MESH_OT_context_duplicate_trackball", true);
break;
}
}
@ -1868,7 +1868,7 @@ static void gizmogroup_init_properties_from_twtype(const bContext *C, wmGizmoGro
case CTX_MODE_EDIT_MESH:
ot_store.extra_rotate = WM_operatortype_find("MESH_OT_extrude_context_rotate",
true);
ot_store.extra_rotate2 = WM_operatortype_find("MESH_OT_context_split_rotate",
ot_store.extra_rotate2 = WM_operatortype_find("MESH_OT_context_duplicate_rotate",
true);
break;
}
@ -1901,7 +1901,7 @@ static void gizmogroup_init_properties_from_twtype(const bContext *C, wmGizmoGro
break;
case CTX_MODE_EDIT_MESH:
ot_store.extra_resize = WM_operatortype_find("MESH_OT_extrude_context_resize", true);
ot_store.extra_resize2 = WM_operatortype_find("MESH_OT_context_split_scale", true);
ot_store.extra_resize2 = WM_operatortype_find("MESH_OT_context_duplicate_scale", true);
break;
}
}

View File

@ -1083,10 +1083,16 @@ void wm_gizmomap_modal_set(
struct wmGizmoOpElem *gzop = NULL;
if (event->modifier & KM_SHIFT) {
gzop = WM_gizmo_operator_get(gz, 16);
if (event->modifier & KM_ALT) {
gzop = WM_gizmo_operator_get(gz, 15);
}
else {
gzop = WM_gizmo_operator_get(gz, 16);
}
}
if (event->modifier & KM_ALT) {
if ((event->modifier & KM_ALT )& (event->modifier & KM_SHIFT)) {
gzop = WM_gizmo_operator_get(gz, 15);
}