diff options
Diffstat (limited to 'source/blender/modifiers/intern/MOD_solidify_extrude.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_solidify_extrude.c | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/source/blender/modifiers/intern/MOD_solidify_extrude.c b/source/blender/modifiers/intern/MOD_solidify_extrude.c index 08e9569bd95..5908a13e93c 100644 --- a/source/blender/modifiers/intern/MOD_solidify_extrude.c +++ b/source/blender/modifiers/intern/MOD_solidify_extrude.c @@ -215,7 +215,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex MOD_get_vgroup(ctx->object, mesh, smd->defgrp_name, &dvert, &defgrp_index); - const MVert *orig_mvert = BKE_mesh_verts(mesh); + const float(*orig_positions)[3] = BKE_mesh_positions(mesh); const MEdge *orig_medge = BKE_mesh_edges(mesh); const MPoly *orig_mpoly = BKE_mesh_polys(mesh); const MLoop *orig_mloop = BKE_mesh_loops(mesh); @@ -335,7 +335,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex (int)((loops_num * stride) + newLoops), (int)((polys_num * stride) + newPolys)); - MVert *mvert = BKE_mesh_verts_for_write(result); + float(*positions)[3] = BKE_mesh_positions_for_write(result); MEdge *medge = BKE_mesh_edges_for_write(result); MPoly *mpoly = BKE_mesh_polys_for_write(result); MLoop *mloop = BKE_mesh_loops_for_write(result); @@ -398,7 +398,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex if (((ofs_new >= ofs_orig) == do_flip) == test) { \ i_end = verts_num; \ do_shell_align = true; \ - mv = mvert; \ + vert_index = 0; \ } \ else { \ if (do_shell) { \ @@ -409,7 +409,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex i_end = newVerts; \ do_shell_align = false; \ } \ - mv = &mvert[verts_num]; \ + vert_index = verts_num; \ } \ (void)0 @@ -495,7 +495,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex vert_lens = MEM_malloc_arrayN(verts_num, sizeof(float), "vert_lens"); copy_vn_fl(vert_lens, (int)verts_num, FLT_MAX); for (uint i = 0; i < edges_num; i++) { - const float ed_len_sq = len_squared_v3v3(mvert[medge[i].v1].co, mvert[medge[i].v2].co); + const float ed_len_sq = len_squared_v3v3(positions[medge[i].v1], positions[medge[i].v2]); vert_lens[medge[i].v1] = min_ff(vert_lens[medge[i].v1], ed_len_sq); vert_lens[medge[i].v2] = min_ff(vert_lens[medge[i].v2], ed_len_sq); } @@ -547,7 +547,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex !ELEM(edge_user_pairs[i][1], INVALID_UNUSED, INVALID_PAIR)) { const float *n0 = poly_nors[edge_user_pairs[i][0]]; const float *n1 = poly_nors[edge_user_pairs[i][1]]; - sub_v3_v3v3(e, orig_mvert[ed->v1].co, orig_mvert[ed->v2].co); + sub_v3_v3v3(e, orig_positions[ed->v1], orig_positions[ed->v2]); normalize_v3(e); const float angle = angle_signed_on_axis_v3v3_v3(n0, n1, e); if (do_angle_clamp) { @@ -571,10 +571,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex ofs_new_vgroup = ofs_new; - MVert *mv; + uint vert_index; INIT_VERT_ARRAY_OFFSETS(false); - for (i_orig = 0; i_orig < i_end; i_orig++, mv++) { + for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) { const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig]; if (dvert) { const MDeformVert *dv = &dvert[i]; @@ -608,10 +608,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex } } if (vert_nors) { - madd_v3_v3fl(mv->co, vert_nors[i], ofs_new_vgroup); + madd_v3_v3fl(positions[vert_index], vert_nors[i], ofs_new_vgroup); } else { - madd_v3_v3fl(mv->co, mesh_vert_normals[i], ofs_new_vgroup); + madd_v3_v3fl(positions[vert_index], mesh_vert_normals[i], ofs_new_vgroup); } } } @@ -623,10 +623,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex ofs_new_vgroup = ofs_orig; /* as above but swapped */ - MVert *mv; + uint vert_index; INIT_VERT_ARRAY_OFFSETS(true); - for (i_orig = 0; i_orig < i_end; i_orig++, mv++) { + for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) { const uint i = do_shell_align ? i_orig : new_vert_arr[i_orig]; if (dvert) { const MDeformVert *dv = &dvert[i]; @@ -660,10 +660,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex } } if (vert_nors) { - madd_v3_v3fl(mv->co, vert_nors[i], ofs_new_vgroup); + madd_v3_v3fl(positions[vert_index], vert_nors[i], ofs_new_vgroup); } else { - madd_v3_v3fl(mv->co, mesh_vert_normals[i], ofs_new_vgroup); + madd_v3_v3fl(positions[vert_index], mesh_vert_normals[i], ofs_new_vgroup); } } } @@ -713,8 +713,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex if (vert_nors == NULL) { vert_nors = MEM_malloc_arrayN(verts_num, sizeof(float[3]), "mod_solid_vno"); - const MVert *mv; - for (i = 0, mv = mvert; i < verts_num; i++, mv++) { + for (i = 0; i < verts_num; i++) { copy_v3_v3(vert_nors[i], mesh_vert_normals[i]); } } @@ -730,12 +729,12 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex const MLoop *ml = &mloop[mp->loopstart]; - sub_v3_v3v3(nor_prev, mvert[ml[i_curr - 1].v].co, mvert[ml[i_curr].v].co); + sub_v3_v3v3(nor_prev, positions[ml[i_curr - 1].v], positions[ml[i_curr].v]); normalize_v3(nor_prev); while (i_next < mp->totloop) { float angle; - sub_v3_v3v3(nor_next, mvert[ml[i_curr].v].co, mvert[ml[i_next].v].co); + sub_v3_v3v3(nor_next, positions[ml[i_curr].v], positions[ml[i_next].v]); normalize_v3(nor_next); angle = angle_normalized_v3v3(nor_prev, nor_next); @@ -847,7 +846,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex vert_angs[ed->v2] = max_ff(vert_angs[ed->v2], angle); } if (do_bevel_convex) { - sub_v3_v3v3(e, orig_mvert[ed->v1].co, orig_mvert[ed->v2].co); + sub_v3_v3v3(e, orig_positions[ed->v1], orig_positions[ed->v2]); normalize_v3(e); edge_angs[i] = angle_signed_on_axis_v3v3_v3(n0, n1, e); if (!do_rim) { @@ -867,7 +866,7 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex const float offset_sq = offset * offset; copy_vn_fl(vert_lens_sq, (int)verts_num, FLT_MAX); for (i = 0; i < edges_num; i++) { - const float ed_len = len_squared_v3v3(mvert[medge[i].v1].co, mvert[medge[i].v2].co); + const float ed_len = len_squared_v3v3(positions[medge[i].v1], positions[medge[i].v2]); vert_lens_sq[medge[i].v1] = min_ff(vert_lens_sq[medge[i].v1], ed_len); vert_lens_sq[medge[i].v2] = min_ff(vert_lens_sq[medge[i].v2], ed_len); } @@ -926,14 +925,15 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex uint i_orig, i_end; bool do_shell_align; - MVert *mv; + uint vert_index; INIT_VERT_ARRAY_OFFSETS(false); - for (i_orig = 0; i_orig < i_end; i_orig++, mv++) { + for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) { const uint i_other = do_shell_align ? i_orig : new_vert_arr[i_orig]; if (vert_accum[i_other]) { /* zero if unselected */ - madd_v3_v3fl( - mv->co, vert_nors[i_other], ofs_new * (vert_angles[i_other] / vert_accum[i_other])); + madd_v3_v3fl(positions[vert_index], + vert_nors[i_other], + ofs_new * (vert_angles[i_other] / vert_accum[i_other])); } } } @@ -943,14 +943,15 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex bool do_shell_align; /* same as above but swapped, intentional use of 'ofs_new' */ - MVert *mv; + uint vert_index; INIT_VERT_ARRAY_OFFSETS(true); - for (i_orig = 0; i_orig < i_end; i_orig++, mv++) { + for (i_orig = 0; i_orig < i_end; i_orig++, vert_index++) { const uint i_other = do_shell_align ? i_orig : new_vert_arr[i_orig]; if (vert_accum[i_other]) { /* zero if unselected */ - madd_v3_v3fl( - mv->co, vert_nors[i_other], ofs_orig * (vert_angles[i_other] / vert_accum[i_other])); + madd_v3_v3fl(positions[vert_index], + vert_nors[i_other], + ofs_orig * (vert_angles[i_other] / vert_accum[i_other])); } } } @@ -1157,10 +1158,10 @@ Mesh *MOD_solidify_extrude_modifyMesh(ModifierData *md, const ModifierEvalContex #ifdef SOLIDIFY_SIDE_NORMALS if (do_side_normals) { normal_quad_v3(nor, - mvert[ml[j - 4].v].co, - mvert[ml[j - 3].v].co, - mvert[ml[j - 2].v].co, - mvert[ml[j - 1].v].co); + positions[ml[j - 4].v], + positions[ml[j - 3].v], + positions[ml[j - 2].v], + positions[ml[j - 1].v]); add_v3_v3(edge_vert_nos[ed->v1], nor); add_v3_v3(edge_vert_nos[ed->v2], nor); |