[Bf-blender-cvs] [122cb1aea82] master: Object: new add object tool, currently for primitive types

Campbell Barton noreply at git.blender.org
Thu May 28 07:16:35 CEST 2020


Commit: 122cb1aea82362d1b2ff3dda4fc7d309933308be
Author: Campbell Barton
Date:   Thu May 28 14:34:17 2020 +1000
Branches: master
https://developer.blender.org/rB122cb1aea82362d1b2ff3dda4fc7d309933308be

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.

===================================================================

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M	source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c
M	source/blender/editors/include/ED_gizmo_library.h
M	source/blender/editors/space_view3d/CMakeLists.txt
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_ops.c
A	source/blender/editors/space_view3d/view3d_placement.c

===================================================================

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
@@ -497,19 +611,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):
@@ -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,
diff --git a/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list