From 1abf7dd83509b61d16589c5b12b3a2b941bab79f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 21 Jun 2016 16:17:05 +1000 Subject: [PATCH] Fix T48697: Brush curve-stroke snaps strangely Support Snapping screen-space 2d curves, (was applying world-space coords in screen-space). Also show snap settings in header. --- release/scripts/startup/bl_ui/space_view3d.py | 15 ++++++++++++++- source/blender/editors/transform/transform_snap.c | 8 ++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index b88b831ec4b..62d71b2c06a 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -81,7 +81,20 @@ class VIEW3D_HT_header(Header): row.prop(toolsettings, "proportional_edit_falloff", icon_only=True) # Snap - if not obj or mode not in {'SCULPT', 'VERTEX_PAINT', 'WEIGHT_PAINT', 'TEXTURE_PAINT'}: + show_snap = False + if obj is None: + show_snap = True + else: + if mode not in {'SCULPT', 'VERTEX_PAINT', 'WEIGHT_PAINT', 'TEXTURE_PAINT'}: + show_snap = True + else: + paint_settings = UnifiedPaintPanel.paint_settings(context) + if paint_settings: + brush = paint_settings.brush + if brush and brush.stroke_method == 'CURVE': + show_snap = True + + if show_snap: snap_element = toolsettings.snap_element row = layout.row(align=True) row.prop(toolsettings, "use_snap", text="") diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index d9b12bb0b18..0bb64315845 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -842,6 +842,14 @@ static void ApplySnapTranslation(TransInfo *t, float vec[3]) vec[1] = point[1] - t->tsnap.snapTarget[1]; } else { + if (t->spacetype == SPACE_VIEW3D) { + if (t->options & CTX_PAINT_CURVE) { + if (ED_view3d_project_float_global(t->ar, point, point, V3D_PROJ_TEST_NOP) != V3D_PROJ_RET_OK) { + zero_v3(point); /* no good answer here... */ + } + } + } + sub_v3_v3v3(vec, point, t->tsnap.snapTarget); } }