Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_bevel.c
| Show All 25 Lines | |||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLI_math.h" | #include "BLI_math.h" | ||||
| #include "DNA_mesh_types.h" | #include "DNA_mesh_types.h" | ||||
| #include "DNA_meshdata_types.h" | #include "DNA_meshdata_types.h" | ||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "DNA_profilewidget_types.h" | |||||
| #include "BKE_deform.h" | #include "BKE_deform.h" | ||||
| #include "BKE_mesh.h" | #include "BKE_mesh.h" | ||||
| #include "BKE_modifier.h" | #include "BKE_modifier.h" | ||||
| #include "MOD_util.h" | #include "MOD_util.h" | ||||
| #include "bmesh.h" | #include "bmesh.h" | ||||
| #include "bmesh_tools.h" | #include "bmesh_tools.h" | ||||
| #include "BKE_profile_widget.h" | |||||
| #include "DEG_depsgraph_query.h" | #include "DEG_depsgraph_query.h" | ||||
| static void initData(ModifierData *md) | static void initData(ModifierData *md) | ||||
| { | { | ||||
| BevelModifierData *bmd = (BevelModifierData *)md; | BevelModifierData *bmd = (BevelModifierData *)md; | ||||
| bmd->value = 0.1f; | bmd->value = 1.0f; | ||||
| bmd->res = 1; | bmd->res = 1; | ||||
| bmd->flags = 0; | bmd->flags = 0; | ||||
| bmd->val_flags = MOD_BEVEL_AMT_OFFSET; | bmd->val_flags = MOD_BEVEL_AMT_OFFSET; | ||||
| bmd->lim_flags = 0; | bmd->lim_flags = 0; | ||||
| bmd->e_flags = 0; | bmd->e_flags = 0; | ||||
| bmd->edge_flags = 0; | bmd->edge_flags = 0; | ||||
| bmd->face_str_mode = MOD_BEVEL_FACE_STRENGTH_NONE; | bmd->face_str_mode = MOD_BEVEL_FACE_STRENGTH_NONE; | ||||
| bmd->miter_inner = MOD_BEVEL_MITER_SHARP; | bmd->miter_inner = MOD_BEVEL_MITER_SHARP; | ||||
| bmd->miter_outer = MOD_BEVEL_MITER_SHARP; | bmd->miter_outer = MOD_BEVEL_MITER_SHARP; | ||||
| bmd->spread = 0.1f; | bmd->spread = 0.1f; | ||||
| bmd->mat = -1; | bmd->mat = -1; | ||||
| bmd->profile = 0.5f; | bmd->profile = 0.5f; | ||||
| bmd->bevel_angle = DEG2RADF(30.0f); | bmd->bevel_angle = DEG2RADF(30.0f); | ||||
| bmd->defgrp_name[0] = '\0'; | bmd->defgrp_name[0] = '\0'; | ||||
| bmd->prwdgt = BKE_profilewidget_add(PROF_PRESET_LINE); | |||||
| } | } | ||||
| 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) | ||||
| { | { | ||||
| const BevelModifierData *bmd_src = (const BevelModifierData *)md_src; | |||||
| BevelModifierData *bmd_dst = (BevelModifierData *)md_dst; | |||||
| modifier_copyData_generic(md_src, md_dst, flag); | modifier_copyData_generic(md_src, md_dst, flag); | ||||
| bmd_dst->prwdgt = BKE_profilewidget_copy(bmd_src->prwdgt); | |||||
| } | } | ||||
| static void requiredDataMask(Object *UNUSED(ob), | static void requiredDataMask(Object *UNUSED(ob), | ||||
| ModifierData *md, | ModifierData *md, | ||||
| CustomData_MeshMasks *r_cddata_masks) | CustomData_MeshMasks *r_cddata_masks) | ||||
| { | { | ||||
| BevelModifierData *bmd = (BevelModifierData *)md; | BevelModifierData *bmd = (BevelModifierData *)md; | ||||
| Show All 26 Lines | static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | ||||
| const bool loop_slide = (bmd->flags & MOD_BEVEL_EVEN_WIDTHS) == 0; | const bool loop_slide = (bmd->flags & MOD_BEVEL_EVEN_WIDTHS) == 0; | ||||
| const bool mark_seam = (bmd->edge_flags & MOD_BEVEL_MARK_SEAM); | const bool mark_seam = (bmd->edge_flags & MOD_BEVEL_MARK_SEAM); | ||||
| const bool mark_sharp = (bmd->edge_flags & MOD_BEVEL_MARK_SHARP); | const bool mark_sharp = (bmd->edge_flags & MOD_BEVEL_MARK_SHARP); | ||||
| bool harden_normals = (bmd->flags & MOD_BEVEL_HARDEN_NORMALS); | bool harden_normals = (bmd->flags & MOD_BEVEL_HARDEN_NORMALS); | ||||
| const int face_strength_mode = bmd->face_str_mode; | const int face_strength_mode = bmd->face_str_mode; | ||||
| const int miter_outer = bmd->miter_outer; | const int miter_outer = bmd->miter_outer; | ||||
| const int miter_inner = bmd->miter_inner; | const int miter_inner = bmd->miter_inner; | ||||
| const float spread = bmd->spread; | const float spread = bmd->spread; | ||||
| const bool use_custom_profile = (bmd->flags & MOD_BEVEL_CUSTOM_PROFILE); | |||||
| const int vmesh_method = bmd->vmesh_method; | |||||
| bm = BKE_mesh_to_bmesh_ex(mesh, | bm = BKE_mesh_to_bmesh_ex(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, | ||||
| ▲ Show 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | BM_mesh_bevel(bm, | ||||
| loop_slide, | loop_slide, | ||||
| mark_seam, | mark_seam, | ||||
| mark_sharp, | mark_sharp, | ||||
| harden_normals, | harden_normals, | ||||
| face_strength_mode, | face_strength_mode, | ||||
| miter_outer, | miter_outer, | ||||
| miter_inner, | miter_inner, | ||||
| spread, | spread, | ||||
| mesh->smoothresh); | mesh->smoothresh, | ||||
| use_custom_profile, | |||||
| bmd->prwdgt, | |||||
| vmesh_method); | |||||
| result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); | result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); | ||||
| /* Make sure we never alloc'd these. */ | /* Make sure we never alloc'd these. */ | ||||
| BLI_assert(bm->vtoolflagpool == NULL && bm->etoolflagpool == NULL && bm->ftoolflagpool == NULL); | BLI_assert(bm->vtoolflagpool == NULL && bm->etoolflagpool == NULL && bm->ftoolflagpool == NULL); | ||||
| BM_mesh_free(bm); | BM_mesh_free(bm); | ||||
| result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; | result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; | ||||
| return result; | return result; | ||||
| } | } | ||||
| static bool dependsOnNormals(ModifierData *UNUSED(md)) | static bool dependsOnNormals(ModifierData *UNUSED(md)) | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| static void freeData(ModifierData *md) | |||||
| { | |||||
| BevelModifierData *bmd = (BevelModifierData *)md; | |||||
| BKE_profilewidget_free(bmd->prwdgt); | |||||
| } | |||||
| static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, bool UNUSED(userRenderParams)) | |||||
| { | |||||
| BevelModifierData *bmd = (BevelModifierData *)md; | |||||
| return (bmd->value == 0.0f); | |||||
| } | |||||
| ModifierTypeInfo modifierType_Bevel = { | ModifierTypeInfo modifierType_Bevel = { | ||||
| /* name */ "Bevel", | /* name */ "Bevel", | ||||
| /* structName */ "BevelModifierData", | /* structName */ "BevelModifierData", | ||||
| /* structSize */ sizeof(BevelModifierData), | /* structSize */ sizeof(BevelModifierData), | ||||
| /* type */ eModifierTypeType_Constructive, | /* type */ eModifierTypeType_Constructive, | ||||
| /* flags */ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_SupportsEditmode | | /* flags */ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_SupportsEditmode | | ||||
| eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_AcceptsCVs, | eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_AcceptsCVs, | ||||
| /* copyData */ copyData, | /* copyData */ copyData, | ||||
| /* deformVerts */ NULL, | /* deformVerts */ NULL, | ||||
| /* deformMatrices */ NULL, | /* deformMatrices */ NULL, | ||||
| /* deformVertsEM */ NULL, | /* deformVertsEM */ NULL, | ||||
| /* deformMatricesEM */ NULL, | /* deformMatricesEM */ NULL, | ||||
| /* applyModifier */ applyModifier, | /* applyModifier */ applyModifier, | ||||
| /* initData */ initData, | /* initData */ initData, | ||||
| /* requiredDataMask */ requiredDataMask, | /* requiredDataMask */ requiredDataMask, | ||||
| /* freeData */ NULL, | /* freeData */ freeData, | ||||
| /* isDisabled */ NULL, | /* isDisabled */ isDisabled, | ||||
| /* updateDepsgraph */ NULL, | /* updateDepsgraph */ NULL, | ||||
| /* dependsOnTime */ NULL, | /* dependsOnTime */ NULL, | ||||
| /* dependsOnNormals */ dependsOnNormals, | /* dependsOnNormals */ dependsOnNormals, | ||||
| /* foreachObjectLink */ NULL, | /* foreachObjectLink */ NULL, | ||||
| /* foreachIDLink */ NULL, | /* foreachIDLink */ NULL, | ||||
| /* foreachTexLink */ NULL, | /* foreachTexLink */ NULL, | ||||
| /* freeRuntimeData */ NULL, | /* freeRuntimeData */ NULL, | ||||
| }; | }; | ||||