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 | |
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')
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 10 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap_object.c | 47 |
2 files changed, 34 insertions, 23 deletions
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 2e1e8eb4ca4..7f27d5fb180 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -48,6 +48,7 @@ #include "ED_node.h" #include "ED_transform_snap_object_context.h" #include "ED_uvedit.h" +#include "ED_view3d.h" #include "UI_resources.h" #include "UI_view2d.h" @@ -247,7 +248,7 @@ void drawSnapping(const struct bContext *C, TransInfo *t) loc_cur = t->tsnap.snapPoint; } - ED_gizmotypes_snap_3d_draw_util( + ED_view3d_cursor_snap_draw_util( rv3d, loc_prev, loc_cur, normal, col, activeCol, t->tsnap.snapElem); GPU_depth_test(GPU_DEPTH_LESS_EQUAL); @@ -1243,7 +1244,7 @@ short snapObjectsTransform( TransInfo *t, const float mval[2], float *dist_px, float r_loc[3], float r_no[3]) { float *target = (t->tsnap.status & TARGET_INIT) ? t->tsnap.snapTarget : t->center_global; - return ED_transform_snap_object_project_view3d_ex( + return ED_transform_snap_object_project_view3d( t->tsnap.object_context, t->depsgraph, t->region, @@ -1259,10 +1260,7 @@ short snapObjectsTransform( target, dist_px, r_loc, - r_no, - NULL, - NULL, - NULL); + r_no); } /** \} */ 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; } |