diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-11-03 12:30:54 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-11-03 12:38:23 +0300 |
commit | bed91b623f0a4511c0c163805bb253377d407765 (patch) | |
tree | bad23c2928882ff3db8fd1f71f1988ad05df0c73 /source/blender/editors/transform/transform.c | |
parent | f29f4c92f2b10e9707be151750dcbbba244f862b (diff) |
Edge/Vert slide: improve multires interpolation
Need to re-interpolate the entire face, not just the connected loop.
Also add BM_face_interp_multires()
Diffstat (limited to 'source/blender/editors/transform/transform.c')
-rw-r--r-- | source/blender/editors/transform/transform.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 07a30fec834..b79c550241b 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -5483,11 +5483,12 @@ static void slide_origdata_interp_data_vert( float *loop_weights; const bool is_moved = (len_squared_v3v3(sv->v->co, sv->co_orig_3d) > FLT_EPSILON); const bool do_loop_weight = sod->layer_math_map_num && is_moved; + const bool do_loop_mdisps = is_final && is_moved && (sod->cd_loop_mdisp_offset != -1); const float *v_proj_axis = sv->v->no; /* original (l->prev, l, l->next) projections for each loop ('l' remains unchanged) */ float v_proj[3][3]; - if (do_loop_weight) { + if (do_loop_weight || do_loop_mdisps) { project_plane_v3_v3v3(v_proj[1], sv->co_orig_3d, v_proj_axis); } @@ -5569,7 +5570,7 @@ static void slide_origdata_interp_data_vert( * Interpolate from every other loop (not ideal) * However values will only be taken from loops which overlap other mdisps. * */ - if (is_final && is_moved && (sod->cd_loop_mdisp_offset != -1)) { + if (do_loop_mdisps) { float (*faces_center)[3] = BLI_array_alloca(faces_center, l_num); BMLoop *l; @@ -5587,8 +5588,8 @@ static void slide_origdata_interp_data_vert( BM_face_calc_center_mean(f_copy, f_copy_center); BM_ITER_ELEM_INDEX (l_other, &liter_other, sv->v, BM_LOOPS_OF_VERT, j_other) { - BM_loop_interp_multires_ex( - bm, l_other, f_copy, + BM_face_interp_multires_ex( + bm, l_other->f, f_copy, faces_center[j_other], f_copy_center, sod->cd_loop_mdisp_offset); } } |