Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_bevel.c
| Show First 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | static void initData(ModifierData *md) | ||||
| bmd->defgrp_name[0] = '\0'; | bmd->defgrp_name[0] = '\0'; | ||||
| } | } | ||||
| static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag) | static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag) | ||||
| { | { | ||||
| modifier_copyData_generic(md_src, md_dst, flag); | modifier_copyData_generic(md_src, md_dst, flag); | ||||
| } | } | ||||
| static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) | static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) | ||||
| { | { | ||||
| BevelModifierData *bmd = (BevelModifierData *)md; | BevelModifierData *bmd = (BevelModifierData *)md; | ||||
| CustomDataMask dataMask = 0; | |||||
| /* ask for vertexgroups if we need them */ | /* ask for vertexgroups if we need them */ | ||||
| if (bmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; | if (bmd->defgrp_name[0] != '\0') { | ||||
| r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; | |||||
| return dataMask; | } | ||||
| } | } | ||||
| /* | /* | ||||
| * This calls the new bevel code (added since 2.64) | * This calls the new bevel code (added since 2.64) | ||||
| */ | */ | ||||
| static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | ||||
| { | { | ||||
| Mesh *result; | Mesh *result; | ||||
| Show All 23 Lines | static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | ||||
| bm = BKE_mesh_to_bmesh_ex( | bm = BKE_mesh_to_bmesh_ex( | ||||
| mesh, | mesh, | ||||
| &(struct BMeshCreateParams){0}, | &(struct BMeshCreateParams){0}, | ||||
| &(struct BMeshFromMeshParams){ | &(struct BMeshFromMeshParams){ | ||||
| .calc_face_normal = true, | .calc_face_normal = true, | ||||
| .add_key_index = false, | .add_key_index = false, | ||||
| .use_shapekey = false, | .use_shapekey = false, | ||||
| .active_shapekey = 0, | .active_shapekey = 0, | ||||
| .cd_mask_extra = CD_MASK_ORIGINDEX, | /* XXX We probably can use CD_MASK_BAREMESH_ORIGDINDEX here instead (also for other modifiers cases)? */ | ||||
| .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, | |||||
| }); | }); | ||||
| if ((bmd->lim_flags & MOD_BEVEL_VGROUP) && bmd->defgrp_name[0]) | if ((bmd->lim_flags & MOD_BEVEL_VGROUP) && bmd->defgrp_name[0]) | ||||
| MOD_get_vgroup(ctx->object, mesh, bmd->defgrp_name, &dvert, &vgroup); | MOD_get_vgroup(ctx->object, mesh, bmd->defgrp_name, &dvert, &vgroup); | ||||
| if (vertex_only) { | if (vertex_only) { | ||||
| BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { | BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { | ||||
| if (!BM_vert_is_manifold(v)) | if (!BM_vert_is_manifold(v)) | ||||
| ▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | ||||
| } | } | ||||
| BM_mesh_bevel(bm, value, offset_type, bmd->res, bmd->profile, | BM_mesh_bevel(bm, value, offset_type, bmd->res, bmd->profile, | ||||
| vertex_only, bmd->lim_flags & MOD_BEVEL_WEIGHT, do_clamp, | vertex_only, bmd->lim_flags & MOD_BEVEL_WEIGHT, do_clamp, | ||||
| dvert, vgroup, mat, loop_slide, mark_seam, mark_sharp, | dvert, vgroup, mat, loop_slide, mark_seam, mark_sharp, | ||||
| harden_normals, face_strength_mode, | harden_normals, face_strength_mode, | ||||
| miter_outer, miter_inner, spread, mesh->smoothresh); | miter_outer, miter_inner, spread, mesh->smoothresh); | ||||
| result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); | result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); | ||||
| BLI_assert(bm->vtoolflagpool == NULL && | BLI_assert(bm->vtoolflagpool == NULL && | ||||
| bm->etoolflagpool == NULL && | bm->etoolflagpool == NULL && | ||||
| bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */ | bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */ | ||||
| BM_mesh_free(bm); | BM_mesh_free(bm); | ||||
| result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; | result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; | ||||
| ▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines | |||||