diff options
-rw-r--r-- | source/blender/bmesh/intern/bmesh_opdefines.c | 1 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_operators.h | 1 | ||||
-rw-r--r-- | source/blender/bmesh/tools/bmesh_bevel.c | 20 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_bevel.c | 5 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 5 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_bevel.c | 3 |
7 files changed, 34 insertions, 2 deletions
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 04cdc0020d9..ca34cd7d7e5 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1724,6 +1724,7 @@ static BMO_FlagSet bmo_enum_bevel_offset_type[] = { {BEVEL_AMT_WIDTH, "WIDTH"}, {BEVEL_AMT_DEPTH, "DEPTH"}, {BEVEL_AMT_PERCENT, "PERCENT"}, + {BEVEL_AMT_ABSOLUTE, "ABSOLUTE"}, {0, NULL}, }; diff --git a/source/blender/bmesh/intern/bmesh_operators.h b/source/blender/bmesh/intern/bmesh_operators.h index 9f0107db693..b6c77c151e2 100644 --- a/source/blender/bmesh/intern/bmesh_operators.h +++ b/source/blender/bmesh/intern/bmesh_operators.h @@ -109,6 +109,7 @@ enum { BEVEL_AMT_WIDTH, BEVEL_AMT_DEPTH, BEVEL_AMT_PERCENT, + BEVEL_AMT_ABSOLUTE, }; /* Bevel face_strength_mode values: should match face_str mode enum in DNA_modifer_types.h */ diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 00b647555cf..7929a686a16 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -5949,12 +5949,23 @@ static BevVert *bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v) z = sinf(angle_v3v3v3(v1->co, v->co, v2->co)); e->offset_r_spec = BM_edge_calc_length(e->next->e) * bp->offset * z / 100.0f; break; + case BEVEL_AMT_ABSOLUTE: + /* Like Percent, but the amount gives the absolute distance along adjacent edges. */ + v1 = BM_edge_other_vert(e->prev->e, v); + v2 = BM_edge_other_vert(e->e, v); + z = sinf(angle_v3v3v3(v1->co, v->co, v2->co)); + e->offset_l_spec = bp->offset * z; + v1 = BM_edge_other_vert(e->e, v); + v2 = BM_edge_other_vert(e->next->e, v); + z = sinf(angle_v3v3v3(v1->co, v->co, v2->co)); + e->offset_r_spec = bp->offset * z; + break; default: BLI_assert(!"bad bevel offset kind"); e->offset_l_spec = bp->offset; break; } - if (bp->offset_type != BEVEL_AMT_PERCENT) { + if (bp->offset_type != BEVEL_AMT_PERCENT && bp->offset_type != BEVEL_AMT_ABSOLUTE) { e->offset_r_spec = e->offset_l_spec; } if (bp->use_weights) { @@ -6000,6 +6011,10 @@ static BevVert *bevel_vert_construct(BMesh *bm, BevelParams *bp, BMVert *v) e->offset_l_spec = BM_edge_calc_length(e->e) * bv->offset / 100.0f; break; } + case BEVEL_AMT_ABSOLUTE: { + e->offset_l_spec = bv->offset; + break; + } } e->offset_r_spec = e->offset_l_spec; } @@ -7282,7 +7297,8 @@ void BM_mesh_bevel(BMesh *bm, } /* Perhaps do a pass to try to even out widths. */ - if (!bp.vertex_only && bp.offset_adjust && bp.offset_type != BEVEL_AMT_PERCENT) { + if (!bp.vertex_only && bp.offset_adjust && bp.offset_type != BEVEL_AMT_PERCENT && + bp.offset_type != BEVEL_AMT_ABSOLUTE) { adjust_offsets(&bp, bm); } diff --git a/source/blender/editors/mesh/editmesh_bevel.c b/source/blender/editors/mesh/editmesh_bevel.c index e94412233ff..9f80e63eb60 100644 --- a/source/blender/editors/mesh/editmesh_bevel.c +++ b/source/blender/editors/mesh/editmesh_bevel.c @@ -1012,6 +1012,11 @@ void MESH_OT_bevel(wmOperatorType *ot) "Depth", "Amount is perpendicular distance from original edge to bevel face"}, {BEVEL_AMT_PERCENT, "PERCENT", 0, "Percent", "Amount is percent of adjacent edge length"}, + {BEVEL_AMT_ABSOLUTE, + "ABSOLUTE", + 0, + "Absolute", + "Amount is absolute distance along adjacent edge"}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 1413db4baea..3b21cf1ccda 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -446,6 +446,7 @@ enum { MOD_BEVEL_AMT_WIDTH = 1, MOD_BEVEL_AMT_DEPTH = 2, MOD_BEVEL_AMT_PERCENT = 3, + MOD_BEVEL_AMT_ABSOLUTE = 4, }; /* BevelModifierData->edge_flags */ diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 4d909ee2874..9718357420a 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -3948,6 +3948,11 @@ static void rna_def_modifier_bevel(BlenderRNA *brna) 0, "Percent", "Amount is percent of adjacent edge length"}, + {MOD_BEVEL_AMT_ABSOLUTE, + "ABSOLUTE", + 0, + "Absolute", + "Amount is absolute distance along adjacent edge"}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 35e3bb97fc3..5003827852a 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -302,6 +302,9 @@ static void panel_draw(const bContext *C, Panel *panel) case BEVEL_AMT_OFFSET: offset_name = "Offset"; break; + case BEVEL_AMT_ABSOLUTE: + offset_name = "Absolute"; + break; } uiItemR(col, &ptr, "width", 0, IFACE_(offset_name), ICON_NONE); } |