diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2020-06-15 15:53:10 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2020-06-15 15:53:18 +0300 |
commit | cf42721fe28f7fb4c5419ff7a51cba72e986f491 (patch) | |
tree | c3d2b6b17af6a11f8f455ff0d80fca240c1a3c09 /source/blender/editors/transform/transform_mode_edge_slide.c | |
parent | 046afacbc69069a2244f10a3a38e2f8afd8a5f39 (diff) |
Cleanup: Rearrange Vert and Edge slide functions
And make `trans_mesh_customdata_correction` a more generic utility.
Diffstat (limited to 'source/blender/editors/transform/transform_mode_edge_slide.c')
-rw-r--r-- | source/blender/editors/transform/transform_mode_edge_slide.c | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/source/blender/editors/transform/transform_mode_edge_slide.c b/source/blender/editors/transform/transform_mode_edge_slide.c index 9f9e5742ffe..42f75f041b9 100644 --- a/source/blender/editors/transform/transform_mode_edge_slide.c +++ b/source/blender/editors/transform/transform_mode_edge_slide.c @@ -519,7 +519,7 @@ static void calcEdgeSlide_even(TransInfo *t, } } -static bool createEdgeSlideVerts_double_side(TransInfo *t, TransDataContainer *tc) +static EdgeSlideData *createEdgeSlideVerts_double_side(TransInfo *t, TransDataContainer *tc) { BMEditMesh *em = BKE_editmesh_from_object(tc->obedit); BMesh *bm = em->bm; @@ -554,8 +554,9 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t, TransDataContainer *t } if (numsel == 0 || numsel > 2) { + /* Invalid edge selection. */ MEM_freeN(sld); - return false; /* invalid edge selection */ + return NULL; } } } @@ -566,7 +567,7 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t, TransDataContainer *t if (!BM_edge_is_manifold(e) && !BM_edge_is_boundary(e)) { /* can edges with at least once face user */ MEM_freeN(sld); - return false; + return NULL; } } } @@ -595,7 +596,7 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t, TransDataContainer *t if (!j) { MEM_freeN(sld); MEM_freeN(sv_table); - return false; + return NULL; } sv_tot = j; } @@ -870,18 +871,16 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t, TransDataContainer *t calcEdgeSlide_even(t, tc, sld, mval); } - tc->custom.mode.data = sld; - MEM_freeN(sv_table); - return true; + return sld; } /** * A simple version of #createEdgeSlideVerts_double_side * Which assumes the longest unselected. */ -static bool createEdgeSlideVerts_single_side(TransInfo *t, TransDataContainer *tc) +static EdgeSlideData *createEdgeSlideVerts_single_side(TransInfo *t, TransDataContainer *tc) { BMEditMesh *em = BKE_editmesh_from_object(tc->obedit); BMesh *bm = em->bm; @@ -933,7 +932,7 @@ static bool createEdgeSlideVerts_single_side(TransInfo *t, TransDataContainer *t if (!j) { MEM_freeN(sld); - return false; + return NULL; } sv_tot = j; @@ -1055,24 +1054,9 @@ static bool createEdgeSlideVerts_single_side(TransInfo *t, TransDataContainer *t calcEdgeSlide_even(t, tc, sld, mval); } - tc->custom.mode.data = sld; - MEM_freeN(sv_table); - return true; -} - -void projectEdgeSlideData(TransInfo *t, bool is_final) -{ - FOREACH_TRANS_DATA_CONTAINER (t, tc) { - EdgeSlideData *sld = tc->custom.mode.data; - - if (sld == NULL) { - continue; - } - - trans_mesh_customdata_correction_apply(tc, is_final); - } + return sld; } static void freeEdgeSlideVerts(TransInfo *UNUSED(t), @@ -1450,12 +1434,14 @@ void initEdgeSlide_ex( if (use_double_side) { FOREACH_TRANS_DATA_CONTAINER (t, tc) { - ok |= createEdgeSlideVerts_double_side(t, tc); - } - } - else { - FOREACH_TRANS_DATA_CONTAINER (t, tc) { - ok |= createEdgeSlideVerts_single_side(t, tc); + sld = use_double_side ? createEdgeSlideVerts_double_side(t, tc) : + createEdgeSlideVerts_single_side(t, tc); + if (sld) { + tc->custom.mode.data = sld; + tc->custom.mode.free_cb = freeEdgeSlideVerts; + trans_mesh_customdata_correction_init(t, tc); + ok = true; + } } } @@ -1464,16 +1450,6 @@ void initEdgeSlide_ex( return; } - FOREACH_TRANS_DATA_CONTAINER (t, tc) { - sld = tc->custom.mode.data; - if (!sld) { - continue; - } - tc->custom.mode.free_cb = freeEdgeSlideVerts; - } - - trans_mesh_customdata_correction_init(t); - /* set custom point first if you want value to be initialized by init */ calcEdgeSlideCustomPoints(t); initMouseInputMode(t, &t->mouse, INPUT_CUSTOM_RATIO_FLIP); |