diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-05-28 07:34:17 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-05-28 08:08:58 +0300 |
commit | 122cb1aea82362d1b2ff3dda4fc7d309933308be (patch) | |
tree | 516bffb58226cd128f2ed029e51739f9938ef94f /release/scripts | |
parent | 16943c01464c7119480cae7cf5d089e1c597d8ab (diff) |
Object: new add object tool, currently for primitive types
- Interactively adding primitives with two clicks.
- Scene orientation used for new objects.
- Depth [view-plane, axis-plane, surface]
- Origin [base, center]
- Primitive types [cube, cylinder, cone, uv-sphere, ico-sphere ]
- Settings for object types in the top-bar.
Shortcuts:
- Snapping (Ctrl).
- Constrain 1:1 aspect (Shift).
- Toggle center (Alt).
Part of T57210 design task.
Diffstat (limited to 'release/scripts')
-rw-r--r-- | release/scripts/presets/keyconfig/keymap_data/blender_default.py | 36 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_toolsystem_toolbar.py | 142 |
2 files changed, 160 insertions, 18 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 614a76c3994..8d38bd2ba48 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -4945,6 +4945,32 @@ def km_transform_modal_map(_params): return keymap +def km_view3d_interactive_add_tool_modal_map(_params): + items = [] + keymap = ( + "View3D Placement Modal Map", + {"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True}, + {"items": items}, + ) + + items.extend([ + ("FIXED_ASPECT_ON", {"type": 'LEFT_ALT', "value": 'PRESS', "any": True}, None), + ("FIXED_ASPECT_OFF", {"type": 'LEFT_ALT', "value": 'RELEASE', "any": True}, None), + ("FIXED_ASPECT_ON", {"type": 'RIGHT_ALT', "value": 'PRESS', "any": True}, None), + ("FIXED_ASPECT_OFF", {"type": 'RIGHT_ALT', "value": 'RELEASE', "any": True}, None), + ("PIVOT_CENTER_ON", {"type": 'LEFT_SHIFT', "value": 'PRESS', "any": True}, None), + ("PIVOT_CENTER_OFF", {"type": 'LEFT_SHIFT', "value": 'RELEASE', "any": True}, None), + ("PIVOT_CENTER_ON", {"type": 'RIGHT_SHIFT', "value": 'PRESS', "any": True}, None), + ("PIVOT_CENTER_OFF", {"type": 'RIGHT_SHIFT', "value": 'RELEASE', "any": True}, None), + ("SNAP_ON", {"type": 'LEFT_CTRL', "value": 'PRESS', "any": True}, None), + ("SNAP_OFF", {"type": 'LEFT_CTRL', "value": 'RELEASE', "any": True}, None), + ("SNAP_ON", {"type": 'RIGHT_CTRL', "value": 'PRESS', "any": True}, None), + ("SNAP_OFF", {"type": 'RIGHT_CTRL', "value": 'RELEASE', "any": True}, None), + ]) + + return keymap + + def km_view3d_gesture_circle(_params): items = [] keymap = ( @@ -5855,13 +5881,14 @@ def km_3d_view_tool_edit_armature_extrude_to_cursor(params): ) -def km_3d_view_tool_edit_mesh_add_cube(params): +def km_3d_view_tool_interactive_add(params): return ( - "3D View Tool: Edit Mesh, Add Cube", + "3D View Tool: Object, Add Primitive", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ ("view3d.cursor3d", {"type": params.tool_mouse, "value": 'CLICK'}, None), - ("mesh.primitive_cube_add_gizmo", {"type": params.tool_tweak, "value": 'ANY'}, None), + ("view3d.interactive_add", {"type": params.tool_tweak, "value": 'ANY', "any": True}, + {"properties": [("wait_for_input", False)]}), ]}, ) @@ -6674,6 +6701,7 @@ def generate_keymaps(params=None): km_eyedropper_modal_map(params), km_eyedropper_colorramp_pointsampling_map(params), km_transform_modal_map(params), + km_view3d_interactive_add_tool_modal_map(params), km_view3d_gesture_circle(params), km_gesture_border(params), km_gesture_zoom_border(params), @@ -6733,6 +6761,7 @@ def generate_keymaps(params=None): km_3d_view_tool_scale(params), km_3d_view_tool_shear(params), km_3d_view_tool_measure(params), + km_3d_view_tool_interactive_add(params), km_3d_view_tool_pose_breakdowner(params), km_3d_view_tool_pose_push(params), km_3d_view_tool_pose_relax(params), @@ -6741,7 +6770,6 @@ def generate_keymaps(params=None): km_3d_view_tool_edit_armature_bone_envelope(params), km_3d_view_tool_edit_armature_extrude(params), km_3d_view_tool_edit_armature_extrude_to_cursor(params), - km_3d_view_tool_edit_mesh_add_cube(params), km_3d_view_tool_edit_mesh_extrude_region(params), km_3d_view_tool_edit_mesh_extrude_dissolve_and_intersect(params), km_3d_view_tool_edit_mesh_extrude_along_normals(params), diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index c1730f33798..1aa5dde168b 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -436,10 +436,124 @@ class _defs_view3d_select: ) +class _defs_view3d_add: + + # Layout tweaks here would be good to avoid, + # this shows limits in layout engine, as buttons are using a lot of space. + @staticmethod + def draw_settings_interactive_add(layout, tool): + props = tool.operator_properties("view3d.interactive_add") + row = layout.row() + row.scale_x = 0.8 + row.label(text="Depth:") + row = layout.row() + row.scale_x = 0.9 + row.prop(props, "plane_depth", text="") + row = layout.row() + row.prop(props, "plane_axis", text="") + row = layout.row() + row.scale_x = 0.7 + row.prop(props, "plane_origin") + + @ToolDef.from_fn + def cube_add(): + def draw_settings(_context, layout, tool): + _defs_view3d_add.draw_settings_interactive_add(layout, tool) + return dict( + idname="builtin.primitive_cube_add", + label="Add Cube", + icon="ops.mesh.primitive_cube_add_gizmo", + description=( + "Add cube to mesh interactively" + ), + widget="VIEW3D_GGT_placement", + keymap="3D View Tool: Object, Add Primitive", + draw_settings=draw_settings, + ) + + @ToolDef.from_fn + def cone_add(): + def draw_settings(_context, layout, tool): + _defs_view3d_add.draw_settings_interactive_add(layout, tool) + + props = tool.operator_properties("mesh.primitive_cone_add") + layout.prop(props, "vertices") + layout.prop(props, "end_fill_type") + return dict( + idname="builtin.primitive_cone_add", + label="Add Cone", + icon="ops.mesh.primitive_cube_add_gizmo", + description=( + "Add cone to mesh interactively" + ), + widget="VIEW3D_GGT_placement", + keymap="3D View Tool: Object, Add Primitive", + draw_settings=draw_settings, + ) + + @ToolDef.from_fn + def cylinder_add(): + def draw_settings(_context, layout, tool): + _defs_view3d_add.draw_settings_interactive_add(layout, tool) + + props = tool.operator_properties("mesh.primitive_cylinder_add") + layout.prop(props, "vertices") + layout.prop(props, "end_fill_type") + return dict( + idname="builtin.primitive_cylinder_add", + label="Add Cylinder", + icon="ops.mesh.primitive_cylinder_add_gizmo", + description=( + "Add cylinder to mesh interactively" + ), + widget="VIEW3D_GGT_placement", + keymap="3D View Tool: Object, Add Primitive", + draw_settings=draw_settings, + ) + + @ToolDef.from_fn + def uv_sphere_add(): + def draw_settings(_context, layout, tool): + _defs_view3d_add.draw_settings_interactive_add(layout, tool) + + props = tool.operator_properties("mesh.primitive_uv_sphere_add") + layout.prop(props, "segments") + layout.prop(props, "ring_count") + return dict( + idname="builtin.primitive_uv_sphere_add", + label="Add UV Sphere", + icon="ops.mesh.primitive_sphere_add_gizmo", + description=( + "Add cylinder to mesh interactively" + ), + widget="VIEW3D_GGT_placement", + keymap="3D View Tool: Object, Add Primitive", + draw_settings=draw_settings, + ) + + @ToolDef.from_fn + def ico_sphere_add(): + def draw_settings(_context, layout, tool): + _defs_view3d_add.draw_settings_interactive_add(layout, tool) + + props = tool.operator_properties("mesh.primitive_ico_sphere_add") + layout.prop(props, "subdivisions") + return dict( + idname="builtin.primitive_ico_sphere_add", + label="Add Ico Sphere", + icon="ops.mesh.primitive_sphere_add_gizmo", + description=( + "Add cylinder to mesh interactively" + ), + widget="VIEW3D_GGT_placement", + keymap="3D View Tool: Object, Add Primitive", + draw_settings=draw_settings, + ) + + # ----------------------------------------------------------------------------- # Object Modes (named based on context.mode) - class _defs_edit_armature: @ToolDef.from_fn @@ -498,19 +612,6 @@ class _defs_edit_armature: class _defs_edit_mesh: @ToolDef.from_fn - def cube_add(): - return dict( - idname="builtin.add_cube", - label="Add Cube", - icon="ops.mesh.primitive_cube_add_gizmo", - description=( - "Add cube to mesh interactively" - ), - widget=None, - keymap=(), - ) - - @ToolDef.from_fn def rip_region(): def draw_settings(_context, layout, tool): props = tool.operator_properties("mesh.rip_move") @@ -2147,6 +2248,14 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), ) + _tools_view3d_add = ( + _defs_view3d_add.cube_add, + _defs_view3d_add.cone_add, + _defs_view3d_add.cylinder_add, + _defs_view3d_add.uv_sphere_add, + _defs_view3d_add.ico_sphere_add, + ) + _tools_default = ( *_tools_select, _defs_view3d_generic.cursor, @@ -2165,6 +2274,9 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ], 'OBJECT': [ *_tools_default, + + None, + _tools_view3d_add, ], 'POSE': [ *_tools_default, @@ -2193,6 +2305,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): 'EDIT_MESH': [ *_tools_default, None, + _tools_view3d_add, + None, ( _defs_edit_mesh.extrude, _defs_edit_mesh.extrude_dissolve_and_intersect, |