Fix T59151 Bevel modifier has bad input width for percent.
The units scaling was inappropriate when the bevel value was to be interpreted as a percent, so added a separate rna property for "Width Percent" and made UI show the width appropriate for current offset_type.
This commit is contained in:
Submodule release/datafiles/locale updated: 345b7d2787...8eafc43729
Submodule release/scripts/addons updated: 40340832e3...d31844cc0b
@@ -136,7 +136,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
|||||||
split = layout.split()
|
split = layout.split()
|
||||||
|
|
||||||
col = split.column()
|
col = split.column()
|
||||||
col.prop(md, "width")
|
if md.offset_type == 'PERCENT':
|
||||||
|
col.prop(md, "width_pct")
|
||||||
|
else:
|
||||||
|
col.prop(md, "width")
|
||||||
col.prop(md, "segments")
|
col.prop(md, "segments")
|
||||||
col.prop(md, "profile")
|
col.prop(md, "profile")
|
||||||
col.prop(md, "material")
|
col.prop(md, "material")
|
||||||
|
@@ -3066,7 +3066,14 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
|
|||||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||||
RNA_def_property_range(prop, 0, FLT_MAX);
|
RNA_def_property_range(prop, 0, FLT_MAX);
|
||||||
RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 4);
|
RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 4);
|
||||||
RNA_def_property_ui_text(prop, "Width", "Bevel value/amount");
|
RNA_def_property_ui_text(prop, "Width", "Bevel amount");
|
||||||
|
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "width_pct", PROP_FLOAT, PROP_FACTOR);
|
||||||
|
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||||
|
RNA_def_property_range(prop, 0, FLT_MAX);
|
||||||
|
RNA_def_property_ui_range(prop, 0.0f, 100.0f, 5.0, 2);
|
||||||
|
RNA_def_property_ui_text(prop, "Width Percent", "Bevel amount for percentage method");
|
||||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "segments", PROP_INT, PROP_NONE);
|
prop = RNA_def_property(srna, "segments", PROP_INT, PROP_NONE);
|
||||||
|
@@ -112,6 +112,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
|
|||||||
const bool vertex_only = (bmd->flags & MOD_BEVEL_VERT) != 0;
|
const bool vertex_only = (bmd->flags & MOD_BEVEL_VERT) != 0;
|
||||||
const bool do_clamp = !(bmd->flags & MOD_BEVEL_OVERLAP_OK);
|
const bool do_clamp = !(bmd->flags & MOD_BEVEL_OVERLAP_OK);
|
||||||
const int offset_type = bmd->val_flags;
|
const int offset_type = bmd->val_flags;
|
||||||
|
const float value = bmd->value;
|
||||||
const int mat = CLAMPIS(bmd->mat, -1, ctx->object->totcol - 1);
|
const int mat = CLAMPIS(bmd->mat, -1, ctx->object->totcol - 1);
|
||||||
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);
|
||||||
@@ -192,7 +193,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
|
|||||||
harden_normals = false;
|
harden_normals = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BM_mesh_bevel(bm, bmd->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, mesh->smoothresh);
|
harden_normals, face_strength_mode, mesh->smoothresh);
|
||||||
|
Reference in New Issue
Block a user