Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/transform/transform_mode_edge_slide.c
| Show First 20 Lines • Show All 1,475 Lines • ▼ Show 20 Lines | static void applyEdgeSlide(TransInfo *t, const int UNUSED(mval[2])) | ||||
| /* do stuff here */ | /* do stuff here */ | ||||
| doEdgeSlide(t, final); | doEdgeSlide(t, final); | ||||
| recalcData(t); | recalcData(t); | ||||
| ED_area_status_text(t->area, str); | ED_area_status_text(t->area, str); | ||||
| } | } | ||||
| static void edge_slide_transform_matrix_fn(struct TransInfo *t, float mat_xform[4][4]) | |||||
| { | |||||
| float delta[3], orig_co[3], final_co[3]; | |||||
| EdgeSlideParams *slp = t->custom.mode.data; | |||||
| TransDataContainer *tc = edge_slide_container_first_ok(t); | |||||
| EdgeSlideData *sld_active = tc->custom.mode.data; | |||||
| TransDataEdgeSlideVert *sv_active = &sld_active->sv[sld_active->curr_sv_index]; | |||||
| copy_v3_v3(orig_co, sv_active->v_co_orig); | |||||
| const float fac = t->values_final[0]; | |||||
| float curr_length_fac = 0.0f; | |||||
| if (slp->use_even) { | |||||
| curr_length_fac = sv_active->edge_len * (((slp->flipped ? fac : -fac) + 1.0f) / 2.0f); | |||||
| } | |||||
| edge_slide_apply_elem(sv_active, | |||||
| fac, | |||||
| curr_length_fac, | |||||
| slp->curr_side_unclamp, | |||||
| !(t->flag & T_ALT_TRANSFORM), | |||||
| slp->use_even, | |||||
| slp->flipped, | |||||
| final_co); | |||||
| if (tc->use_local_mat) { | |||||
| mul_m4_v3(tc->mat, orig_co); | |||||
| mul_m4_v3(tc->mat, final_co); | |||||
| } | |||||
| sub_v3_v3v3(delta, final_co, orig_co); | |||||
| add_v3_v3(mat_xform[3], delta); | |||||
| } | |||||
| void initEdgeSlide_ex( | void initEdgeSlide_ex( | ||||
| TransInfo *t, bool use_double_side, bool use_even, bool flipped, bool use_clamp) | TransInfo *t, bool use_double_side, bool use_even, bool flipped, bool use_clamp) | ||||
| { | { | ||||
| EdgeSlideData *sld; | EdgeSlideData *sld; | ||||
| bool ok = false; | bool ok = false; | ||||
| t->mode = TFM_EDGE_SLIDE; | t->mode = TFM_EDGE_SLIDE; | ||||
| t->transform = applyEdgeSlide; | t->transform = applyEdgeSlide; | ||||
| t->handleEvent = handleEventEdgeSlide; | t->handleEvent = handleEventEdgeSlide; | ||||
| t->transform_matrix = NULL; | t->transform_matrix = edge_slide_transform_matrix_fn; | ||||
| t->tsnap.snap_mode_apply_fn = edge_slide_snap_apply; | t->tsnap.snap_mode_apply_fn = edge_slide_snap_apply; | ||||
| t->tsnap.snap_mode_distance_fn = transform_snap_distance_len_squared_fn; | t->tsnap.snap_mode_distance_fn = transform_snap_distance_len_squared_fn; | ||||
| { | { | ||||
| EdgeSlideParams *slp = MEM_callocN(sizeof(*slp), __func__); | EdgeSlideParams *slp = MEM_callocN(sizeof(*slp), __func__); | ||||
| slp->use_even = use_even; | slp->use_even = use_even; | ||||
| slp->flipped = flipped; | slp->flipped = flipped; | ||||
| /* happens to be best for single-sided */ | /* happens to be best for single-sided */ | ||||
| ▲ Show 20 Lines • Show All 79 Lines • Show Last 20 Lines | |||||