diff options
Diffstat (limited to 'source/blender/modifiers/intern/MOD_screw.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_screw.c | 70 |
1 files changed, 30 insertions, 40 deletions
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c index 4ba274dbd8a..14cf79bb06e 100644 --- a/source/blender/modifiers/intern/MOD_screw.c +++ b/source/blender/modifiers/intern/MOD_screw.c @@ -116,7 +116,7 @@ static void screwvert_iter_step(ScrewVertIter *iter) } static Mesh *mesh_remove_doubles_on_axis(Mesh *result, - MVert *mvert_new, + float (*positions_new)[3], const uint totvert, const uint step_tot, const float axis_vec[3], @@ -132,18 +132,18 @@ static Mesh *mesh_remove_doubles_on_axis(Mesh *result, float axis_co[3]; if (use_offset) { float offset_co[3]; - sub_v3_v3v3(offset_co, mvert_new[i].co, axis_offset); + sub_v3_v3v3(offset_co, positions_new[i], axis_offset); project_v3_v3v3_normalized(axis_co, offset_co, axis_vec); add_v3_v3(axis_co, axis_offset); } else { - project_v3_v3v3_normalized(axis_co, mvert_new[i].co, axis_vec); + project_v3_v3v3_normalized(axis_co, positions_new[i], axis_vec); } - const float dist_sq = len_squared_v3v3(axis_co, mvert_new[i].co); + const float dist_sq = len_squared_v3v3(axis_co, positions_new[i]); if (dist_sq <= merge_threshold_sq) { BLI_BITMAP_ENABLE(vert_tag, i); tot_doubles += 1; - copy_v3_v3(mvert_new[i].co, axis_co); + copy_v3_v3(positions_new[i], axis_co); } } @@ -242,8 +242,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * MPoly *mp_new; MLoop *ml_new; MEdge *med_new, *med_new_firstloop; - MVert *mv_new, *mv_new_base; - const MVert *mv_orig; Object *ob_axis = ltmd->ob_axis; ScrewVertConnect *vc, *vc_tmp, *vert_connect = NULL; @@ -383,12 +381,12 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * result = BKE_mesh_new_nomain_from_template( mesh, (int)maxVerts, (int)maxEdges, 0, (int)maxPolys * 4, (int)maxPolys); - const MVert *mvert_orig = BKE_mesh_verts(mesh); + const float(*positions_orig)[3] = BKE_mesh_positions(mesh); const MEdge *medge_orig = BKE_mesh_edges(mesh); const MPoly *mpoly_orig = BKE_mesh_polys(mesh); const MLoop *mloop_orig = BKE_mesh_loops(mesh); - MVert *mvert_new = BKE_mesh_verts_for_write(result); + float(*positions_new)[3] = BKE_mesh_positions_for_write(result); MEdge *medge_new = BKE_mesh_edges_for_write(result); MPoly *mpoly_new = BKE_mesh_polys_for_write(result); MLoop *mloop_new = BKE_mesh_loops_for_write(result); @@ -413,8 +411,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } if (ltmd->flag & MOD_SCREW_UV_STRETCH_V) { - for (i = 0, mv_orig = mvert_orig; i < totvert; i++, mv_orig++) { - const float v = dist_signed_squared_to_plane_v3(mv_orig->co, uv_axis_plane); + for (i = 0; i < totvert; i++) { + const float v = dist_signed_squared_to_plane_v3(positions_orig[i], uv_axis_plane); uv_v_minmax[0] = min_ff(v, uv_v_minmax[0]); uv_v_minmax[1] = max_ff(v, uv_v_minmax[1]); } @@ -428,9 +426,6 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* Set the locations of the first set of verts */ - mv_new = mvert_new; - mv_orig = mvert_orig; - BLI_bitmap *vert_tag = BLI_BITMAP_NEW(totvert, __func__); /* Copy the first set of edges */ @@ -441,7 +436,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * med_new->v2 = med_orig->v2; med_new->flag = med_orig->flag & ~ME_LOOSEEDGE; - /* Tag #MVert as not loose. */ + /* Tag vertex as not loose. */ BLI_BITMAP_ENABLE(vert_tag, med_orig->v1); BLI_BITMAP_ENABLE(vert_tag, med_orig->v2); } @@ -506,14 +501,13 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * // printf("\n\n\n\n\nStarting Modifier\n"); /* set edge users */ med_new = medge_new; - mv_new = mvert_new; if (ob_axis != NULL) { /* `mtx_tx` is initialized early on. */ - for (i = 0; i < totvert; i++, mv_new++, mv_orig++, vc++) { - vc->co[0] = mv_new->co[0] = mv_orig->co[0]; - vc->co[1] = mv_new->co[1] = mv_orig->co[1]; - vc->co[2] = mv_new->co[2] = mv_orig->co[2]; + for (i = 0; i < totvert; i++, vc++) { + vc->co[0] = positions_new[i][0] = positions_orig[i][0]; + vc->co[1] = positions_new[i][1] = positions_orig[i][1]; + vc->co[2] = positions_new[i][2] = positions_orig[i][2]; vc->flag = 0; vc->e[0] = vc->e[1] = NULL; @@ -528,10 +522,10 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } } else { - for (i = 0; i < totvert; i++, mv_new++, mv_orig++, vc++) { - vc->co[0] = mv_new->co[0] = mv_orig->co[0]; - vc->co[1] = mv_new->co[1] = mv_orig->co[1]; - vc->co[2] = mv_new->co[2] = mv_orig->co[2]; + for (i = 0; i < totvert; i++, vc++) { + vc->co[0] = positions_new[i][0] = positions_orig[i][0]; + vc->co[1] = positions_new[i][1] = positions_orig[i][1]; + vc->co[2] = positions_new[i][2] = positions_orig[i][2]; vc->flag = 0; vc->e[0] = vc->e[1] = NULL; @@ -758,11 +752,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } } else { - mv_orig = mvert_orig; - mv_new = mvert_new; - - for (i = 0; i < totvert; i++, mv_new++, mv_orig++) { - copy_v3_v3(mv_new->co, mv_orig->co); + for (i = 0; i < totvert; i++) { + copy_v3_v3(positions_new[i], positions_orig[i]); } } /* done with edge connectivity based normal flipping */ @@ -790,25 +781,24 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* copy a slice */ CustomData_copy_data(&mesh->vdata, &result->vdata, 0, (int)varray_stride, (int)totvert); - mv_new_base = mvert_new; - mv_new = &mvert_new[varray_stride]; /* advance to the next slice */ + for (j = 0; j < totvert; j++) { + const int vert_index_new = (int)varray_stride + (int)j; - for (j = 0; j < totvert; j++, mv_new_base++, mv_new++) { /* set location */ - copy_v3_v3(mv_new->co, mv_new_base->co); + copy_v3_v3(positions_new[vert_index_new], positions_new[j]); /* only need to set these if using non cleared memory */ // mv_new->mat_nr = mv_new->flag = 0; if (ob_axis != NULL) { - sub_v3_v3(mv_new->co, mtx_tx[3]); + sub_v3_v3(positions_new[vert_index_new], mtx_tx[3]); - mul_m4_v3(mat, mv_new->co); + mul_m4_v3(mat, positions_new[vert_index_new]); - add_v3_v3(mv_new->co, mtx_tx[3]); + add_v3_v3(positions_new[vert_index_new], mtx_tx[3]); } else { - mul_m4_v3(mat, mv_new->co); + mul_m4_v3(mat, positions_new[vert_index_new]); } /* add the new edge */ @@ -879,8 +869,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * } if (has_mloop_orig == false && mloopuv_layers_tot) { - uv_v_offset_a = dist_signed_to_plane_v3(mvert_new[medge_new[i].v1].co, uv_axis_plane); - uv_v_offset_b = dist_signed_to_plane_v3(mvert_new[medge_new[i].v2].co, uv_axis_plane); + uv_v_offset_a = dist_signed_to_plane_v3(positions_new[medge_new[i].v1], uv_axis_plane); + uv_v_offset_b = dist_signed_to_plane_v3(positions_new[medge_new[i].v2], uv_axis_plane); if (ltmd->flag & MOD_SCREW_UV_STRETCH_V) { uv_v_offset_a = (uv_v_offset_a - uv_v_minmax[0]) * uv_v_range_inv; @@ -1037,7 +1027,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * if (do_remove_doubles) { result = mesh_remove_doubles_on_axis(result, - mvert_new, + positions_new, totvert, step_tot, axis_vec, |