diff options
author | Germano Cavalcante <mano-wii> | 2021-10-18 06:32:23 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-10-18 07:58:00 +0300 |
commit | 69d6222481b4342dc2a153e62752145aa37ea101 (patch) | |
tree | fe84a99c2cf3bc7b2ddce62a302e5498a126a9e4 /source/blender/editors/transform/transform_snap_object.c | |
parent | be22e36692f0989e52b4a4f286d7d3d3fe8186bd (diff) |
Snap and Placement Gizmo Refactor
Move most of the gizmo snap and placement code to `view_cursor_snap.c`.
Simplify and extend the snap API.
Differential Revision: https://developer.blender.org/D12868
Diffstat (limited to 'source/blender/editors/transform/transform_snap_object.c')
-rw-r--r-- | source/blender/editors/transform/transform_snap_object.c | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index 5f9250e87f7..17326001a99 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -3020,7 +3020,8 @@ static short transform_snap_context_project_view3d_mixed_impl( float r_no[3], int *r_index, Object **r_ob, - float r_obmat[4][4]) + float r_obmat[4][4], + float r_face_nor[3]) { BLI_assert((snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) != @@ -3067,22 +3068,27 @@ static short transform_snap_context_project_view3d_mixed_impl( &ob_eval, obmat, NULL); + if (has_hit) { + if (r_face_nor) { + copy_v3_v3(r_face_nor, no); + } - if (has_hit && (snap_to_flag & SCE_SNAP_MODE_FACE)) { - retval = SCE_SNAP_MODE_FACE; + if ((snap_to_flag & SCE_SNAP_MODE_FACE)) { + retval = SCE_SNAP_MODE_FACE; - copy_v3_v3(r_loc, loc); - if (r_no) { - copy_v3_v3(r_no, no); - } - if (r_ob) { - *r_ob = ob_eval; - } - if (r_obmat) { - copy_m4_m4(r_obmat, obmat); - } - if (r_index) { - *r_index = index; + copy_v3_v3(r_loc, loc); + if (r_no) { + copy_v3_v3(r_no, no); + } + if (r_ob) { + *r_ob = ob_eval; + } + if (r_obmat) { + copy_m4_m4(r_obmat, obmat); + } + if (r_index) { + *r_index = index; + } } } } @@ -3182,6 +3188,10 @@ static short transform_snap_context_project_view3d_mixed_impl( if (r_index) { *r_index = index; } + if (r_face_nor && !has_hit) { + /* Fallback. */ + copy_v3_v3(r_face_nor, no); + } *dist_px = dist_px_tmp; } @@ -3203,7 +3213,8 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, float r_no[3], int *r_index, Object **r_ob, - float r_obmat[4][4]) + float r_obmat[4][4], + float r_face_nor[3]) { return transform_snap_context_project_view3d_mixed_impl(sctx, depsgraph, @@ -3218,7 +3229,8 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, r_no, r_index, r_ob, - r_obmat); + r_obmat, + r_face_nor); } /** @@ -3259,6 +3271,7 @@ bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx, r_no, NULL, NULL, + NULL, NULL) != 0; } |