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:
authorCampbell Barton <ideasman42@gmail.com>2020-05-28 07:34:17 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-05-28 08:08:58 +0300
commit122cb1aea82362d1b2ff3dda4fc7d309933308be (patch)
tree516bffb58226cd128f2ed029e51739f9938ef94f /release
parent16943c01464c7119480cae7cf5d089e1c597d8ab (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')
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py36
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py142
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,