[Bf-blender-cvs] [bb9c9d0eaaa] master: GP: New Cutter, Constraints and Segment selection
Antonioya
noreply at git.blender.org
Fri Jan 11 19:22:55 CET 2019
Commit: bb9c9d0eaaab836b8f20ab7b2228795f607b823a
Author: Antonioya
Date: Fri Jan 11 19:15:23 2019 +0100
Branches: master
https://developer.blender.org/rBbb9c9d0eaaab836b8f20ab7b2228795f607b823a
GP: New Cutter, Constraints and Segment selection
This commit groups a set of new tools that were tested in grease pencil object branch before moving to master. We decide to do all the development in a separated branch because it could break master during days or weeks before the new tools were ready to deploy.
The commit includes:
- New Cutter tool to trim strokes and help cleaning up drawings.
- New set of constraints and guides to draw different types of shapes. All the credits for this development goes to Charlie Jolly (@charlie), thanks for your help!
- Segment selection mode to select strokes between intersections.
- New operator to change strokes cap mode.
- New option to display only keyframed frames. This option is very important when fill strokes with color.
- Multiple small fixes and tweaks.
Thanks to @pepeland and @mendio for their ideas, tests, reviews and support.
Note: Still pending the final icons for Cutter in Toolbar and Segment Selection in Topbar. @billreynish could help us here?
===================================================================
M release/scripts/presets/keyconfig/keymap_data/blender_default.py
M release/scripts/startup/bl_ui/properties_data_gpencil.py
M release/scripts/startup/bl_ui/properties_grease_pencil_common.py
M release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M release/scripts/startup/bl_ui/space_topbar.py
M release/scripts/startup/bl_ui/space_view3d.py
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/blenkernel/intern/library_query.c
M source/blender/blenkernel/intern/scene.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M source/blender/draw/engines/gpencil/gpencil_engine.h
M source/blender/draw/engines/gpencil/shaders/gpencil_stroke_geom.glsl
M source/blender/editors/gpencil/annotate_paint.c
M source/blender/editors/gpencil/gpencil_edit.c
M source/blender/editors/gpencil/gpencil_intern.h
M source/blender/editors/gpencil/gpencil_merge.c
M source/blender/editors/gpencil/gpencil_ops.c
M source/blender/editors/gpencil/gpencil_paint.c
M source/blender/editors/gpencil/gpencil_primitive.c
M source/blender/editors/gpencil/gpencil_select.c
M source/blender/editors/gpencil/gpencil_utils.c
M source/blender/editors/include/ED_gpencil.h
M source/blender/makesdna/DNA_gpencil_types.h
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/RNA_access.h
M source/blender/makesrna/intern/rna_gpencil.c
M source/blender/makesrna/intern/rna_scene.c
M source/blender/makesrna/intern/rna_sculpt_paint.c
===================================================================
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 3a7c0620b68..21c31e3a6f3 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -2983,6 +2983,8 @@ def km_grease_pencil_stroke_edit_mode(params):
{"properties": [("mode", 0)]}),
("gpencil.selectmode_toggle", {"type": 'TWO', "value": 'PRESS'},
{"properties": [("mode", 1)]}),
+ ("gpencil.selectmode_toggle", {"type": 'THREE', "value": 'PRESS'},
+ {"properties": [("mode", 2)]}),
])
if params.apple:
@@ -3045,7 +3047,25 @@ def km_grease_pencil_stroke_paint_draw_brush(params):
# Erase
("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
-
+ # Constrain Guides Speedlines
+ # Freehand
+ ("gpencil.draw", {"type": 'O', "value": 'PRESS'}, None),
+ ("gpencil.draw", {"type": 'J', "value": 'PRESS'}, None),
+ ("gpencil.draw", {"type": 'J', "value": 'PRESS', "alt": True}, None),
+ ("gpencil.draw", {"type": 'J', "value": 'PRESS', "shift": True}, None),
+ ("gpencil.draw", {"type": 'K', "value": 'PRESS'}, None),
+ ("gpencil.draw", {"type": 'K', "value": 'PRESS', "alt": True}, None),
+ ("gpencil.draw", {"type": 'K', "value": 'PRESS', "shift": True}, None),
+ ("gpencil.draw", {"type": 'L', "value": 'PRESS'}, None),
+ ("gpencil.draw", {"type": 'L', "value": 'PRESS', "alt": True}, None),
+ ("gpencil.draw", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
+ ("gpencil.draw", {"type": 'V', "value": 'PRESS'}, None),
+ # Mirror or flip
+ ("gpencil.draw", {"type": 'M', "value": 'PRESS'}, None),
+ # Mode
+ ("gpencil.draw", {"type": 'C', "value": 'PRESS'}, None),
+ # Set reference point
+ ("gpencil.draw", {"type": 'C', "value": 'PRESS', "alt": True}, None),
# Tablet Mappings for Drawing ------------------ */
# For now, only support direct drawing using the eraser, as most users using a tablet
# may still want to use that as their primary pointing device!
@@ -5718,6 +5738,7 @@ def km_3d_view_tool_paint_gpencil_arc(params):
]},
)
+
def km_3d_view_tool_paint_gpencil_curve(params):
return (
"3D View Tool: Paint Gpencil, Curve",
@@ -5730,6 +5751,19 @@ def km_3d_view_tool_paint_gpencil_curve(params):
]},
)
+
+def km_3d_view_tool_paint_gpencil_cutter(params):
+ return (
+ "3D View Tool: Paint Gpencil, Cutter",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("gpencil.stroke_cutter", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+ # Lasso select
+ ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None),
+ ]},
+ )
+
+
def km_3d_view_tool_edit_gpencil_select(params):
return (
"3D View Tool: Edit Gpencil, Select",
@@ -6040,6 +6074,7 @@ def generate_keymaps(params=None):
km_3d_view_tool_paint_gpencil_circle(params),
km_3d_view_tool_paint_gpencil_arc(params),
km_3d_view_tool_paint_gpencil_curve(params),
+ km_3d_view_tool_paint_gpencil_cutter(params),
km_3d_view_tool_edit_gpencil_select(params),
km_3d_view_tool_edit_gpencil_select_box(params),
km_3d_view_tool_edit_gpencil_select_circle(params),
diff --git a/release/scripts/startup/bl_ui/properties_data_gpencil.py b/release/scripts/startup/bl_ui/properties_data_gpencil.py
index 59e54a4c62d..d6633c99456 100644
--- a/release/scripts/startup/bl_ui/properties_data_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_data_gpencil.py
@@ -145,6 +145,9 @@ class DATA_PT_gpencil_datapanel(Panel):
srow.prop(gpl, "clamp_layer", text="",
icon='MOD_MASK' if gpl.clamp_layer else 'LAYER_ACTIVE')
+ srow = col.row(align=True)
+ srow.prop(gpl, "use_solo_mode", text="Show Only On Keyframed")
+
col = row.column()
sub = col.column(align=True)
diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 8a93014670a..49f857492f3 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -191,6 +191,7 @@ class GreasePencilStrokeEditPanel:
col.operator("gpencil.duplicate_move", text="Duplicate")
if is_3d_view:
col.operator("gpencil.stroke_cyclical_set", text="Toggle Cyclic").type = 'TOGGLE'
+ col.operator_menu_enum("gpencil.stroke_caps_set", text="Toggle Caps...", property="type")
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 18dff12185f..8f4a2ca1c84 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1077,6 +1077,16 @@ class _defs_gpencil_paint:
),
)
+ @ToolDef.from_fn
+ def cutter():
+ return dict(
+ text="Cutter",
+ icon="ops.gpencil.stroke_cutter",
+ cursor='KNIFE',
+ widget=None,
+ keymap=(),
+ )
+
@ToolDef.from_fn
def line():
return dict(
@@ -1141,7 +1151,7 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def select():
def draw_settings(context, layout, tool):
- pass
+ layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
text="Select",
icon="ops.generic.select",
@@ -1155,6 +1165,7 @@ class _defs_gpencil_edit:
def draw_settings(context, layout, tool):
props = tool.operator_properties("gpencil.select_box")
layout.prop(props, "mode", expand=True)
+ layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
text="Select Box",
icon="ops.generic.select_box",
@@ -1168,6 +1179,7 @@ class _defs_gpencil_edit:
def draw_settings(context, layout, tool):
props = tool.operator_properties("gpencil.select_lasso")
layout.prop(props, "mode", expand=True)
+ layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
text="Select Lasso",
icon="ops.generic.select_lasso",
@@ -1178,11 +1190,14 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def circle_select():
+ def draw_settings(context, layout, tool):
+ layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
text="Select Circle",
icon="ops.generic.select_circle",
widget=None,
keymap=(),
+ draw_settings=draw_settings,
)
@ToolDef.from_fn
@@ -1629,6 +1644,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
_defs_view3d_generic.cursor,
None,
_defs_gpencil_paint.generate_from_brushes,
+ _defs_gpencil_paint.cutter,
None,
_defs_gpencil_paint.line,
_defs_gpencil_paint.arc,
diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index 06a6e3dc5ac..d27f8e303c9 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -303,9 +303,13 @@ class _draw_left_context_mode:
return
is_paint = True
- if (tool.name in {"Line", "Box", "Circle", "Arc", "Curve"}):
+ if tool.name in {"Line", "Box", "Circle", "Arc", "Curve"}:
is_paint = False
- elif (not tool.has_datablock):
+ elif tool.name == "Cutter":
+ row = layout.row(align=True)
+ row.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
+ return
+ elif not tool.has_datablock:
return
paint = context.tool_settings.gpencil_paint
@@ -509,6 +513,9 @@ class TOPBAR_PT_gpencil_layers(Panel):
srow.prop(gpl, "clamp_layer", text="",
icon='MOD_MASK' if gpl.clamp_layer else 'LAYER_ACTIVE')
+ srow = col.row(align=True)
+ srow.prop(gpl, "use_solo_mode", text="Show Only On Keyframed")
+
col = row.column()
sub = col.column(align=True)
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 5342ae44d11..5c2cf8d529f 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -245,6 +245,18 @@ class VIEW3D_HT_header(Header):
text=lk_name,
icon=lk_icon,
)
+
+ if object_mode in {'PAINT_GPENCIL'}:
+ if context.workspace.tools.from_space_view3d_mode(object_mode).name == "Draw":
+ settings = tool_settings.gpencil_sculpt.guide
+ row = layout.row(align=True)
+ row.prop(settings, "use_guide", text="", icon='GRID')
+ sub = row.row(align=True)
+ sub.active = settings.use_guide
+ sub.popover(
+ panel="VIEW3D_PT_gpencil_guide",
+ text="Guides"
+ )
layout.separator_spacer()
@@ -3955,6 +3967,7 @@ class VIEW3D_MT_edit_gpencil(Menu):
layout.menu("VIEW3D_MT_edit_gpencil_delete")
layout.operator("gpencil.stroke_cyclical_set", text="Toggle Cyclic").type = 'TOGGLE'
+ layout.operator_menu_enum("gpencil.stroke_caps_set", text="Toggle Caps...", property="type")
layout.separator()
@@ -
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list