Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_bevel.c
| Show First 20 Lines • Show All 273 Lines • ▼ Show 20 Lines | |||||
| static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, bool UNUSED(userRenderParams)) | static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, bool UNUSED(userRenderParams)) | ||||
| { | { | ||||
| BevelModifierData *bmd = (BevelModifierData *)md; | BevelModifierData *bmd = (BevelModifierData *)md; | ||||
| return (bmd->value == 0.0f); | return (bmd->value == 0.0f); | ||||
| } | } | ||||
| static void panel_draw(const bContext *C, Panel *panel) | static void panel_draw(const bContext *C, Panel *panel) | ||||
| { | { | ||||
| uiLayout *col; | uiLayout *col, *sub; | ||||
| uiLayout *layout = panel->layout; | uiLayout *layout = panel->layout; | ||||
| PointerRNA ptr; | PointerRNA ptr; | ||||
| PointerRNA ob_ptr; | PointerRNA ob_ptr; | ||||
| modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr); | modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr); | ||||
| bool edge_bevel = RNA_enum_get(&ptr, "affect") != MOD_BEVEL_VERT; | |||||
| uiItemR(layout, &ptr, "affect", UI_ITEM_R_EXPAND, NULL, ICON_NONE); | |||||
| uiLayoutSetPropSep(layout, true); | uiLayoutSetPropSep(layout, true); | ||||
| col = uiLayoutColumn(layout, false); | col = uiLayoutColumn(layout, false); | ||||
| const char *offset_name = ""; | uiItemR(col, &ptr, "offset_type", 0, NULL, ICON_NONE); | ||||
| if (RNA_enum_get(&ptr, "offset_type") == BEVEL_AMT_PERCENT) { | if (RNA_enum_get(&ptr, "offset_type") == BEVEL_AMT_PERCENT) { | ||||
| uiItemR(col, &ptr, "width_pct", 0, NULL, ICON_NONE); | uiItemR(col, &ptr, "width_pct", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| else { | else { | ||||
| switch (RNA_enum_get(&ptr, "offset_type")) { | uiItemR(col, &ptr, "width", 0, IFACE_("Amount"), ICON_NONE); | ||||
| case BEVEL_AMT_DEPTH: | |||||
| offset_name = "Depth"; | |||||
| break; | |||||
| case BEVEL_AMT_WIDTH: | |||||
| offset_name = "Width"; | |||||
| break; | |||||
| 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); | |||||
| } | |||||
| uiItemR(col, &ptr, "offset_type", 0, NULL, ICON_NONE); | |||||
| uiItemR(layout, &ptr, "segments", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "segments", 0, NULL, ICON_NONE); | ||||
| uiItemS(layout); | uiItemS(layout); | ||||
| uiItemR(layout, &ptr, "affect", UI_ITEM_R_EXPAND, NULL, ICON_NONE); | |||||
| uiItemS(layout); | |||||
| col = uiLayoutColumn(layout, false); | col = uiLayoutColumn(layout, false); | ||||
| uiItemR(col, &ptr, "limit_method", 0, NULL, ICON_NONE); | uiItemR(col, &ptr, "limit_method", 0, NULL, ICON_NONE); | ||||
| int limit_method = RNA_enum_get(&ptr, "limit_method"); | int limit_method = RNA_enum_get(&ptr, "limit_method"); | ||||
| if (limit_method == MOD_BEVEL_ANGLE) { | if (limit_method != MOD_BEVEL_ANGLE) { | ||||
| sub = uiLayoutColumn(col, false); | |||||
| uiLayoutSetActive(sub, edge_bevel); | |||||
| uiItemR(col, &ptr, "angle_limit", 0, NULL, ICON_NONE); | uiItemR(col, &ptr, "angle_limit", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| else if (limit_method == MOD_BEVEL_VGROUP) { | else if (limit_method == MOD_BEVEL_VGROUP) { | ||||
| modifier_vgroup_ui(col, &ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); | modifier_vgroup_ui(col, &ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); | ||||
| } | } | ||||
| modifier_panel_end(layout, &ptr); | modifier_panel_end(layout, &ptr); | ||||
| } | } | ||||
| static void profile_panel_draw(const bContext *C, Panel *panel) | |||||
| { | |||||
| uiLayout *row; | |||||
| uiLayout *layout = panel->layout; | |||||
| PointerRNA ptr; | |||||
| modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | |||||
| int profile_type = RNA_enum_get(&ptr, "profile_type"); | |||||
| int miter_inner = RNA_enum_get(&ptr, "miter_inner"); | |||||
| int miter_outer = RNA_enum_get(&ptr, "miter_outer"); | |||||
| bool edge_bevel = RNA_enum_get(&ptr, "affect") != MOD_BEVEL_VERT; | |||||
| uiItemR(layout, &ptr, "profile_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); | |||||
| uiLayoutSetPropSep(layout, true); | |||||
| if (ELEM(profile_type, MOD_BEVEL_PROFILE_SUPERELLIPSE, MOD_BEVEL_PROFILE_CUSTOM)) { | |||||
| row = uiLayoutRow(layout, false); | |||||
| uiLayoutSetActive( | |||||
| row, | |||||
| profile_type == MOD_BEVEL_PROFILE_SUPERELLIPSE || | |||||
| (profile_type == MOD_BEVEL_PROFILE_CUSTOM && edge_bevel && | |||||
| !((miter_inner == MOD_BEVEL_MITER_SHARP) && (miter_outer == MOD_BEVEL_MITER_SHARP)))); | |||||
| uiItemR(row, | |||||
| &ptr, | |||||
| "profile", | |||||
| UI_ITEM_R_SLIDER, | |||||
| (profile_type == MOD_BEVEL_PROFILE_SUPERELLIPSE) ? IFACE_("Shape") : | |||||
| IFACE_("Miter Shape"), | |||||
| ICON_NONE); | |||||
| if (profile_type == MOD_BEVEL_PROFILE_CUSTOM) { | |||||
| uiLayout *sub = uiLayoutColumn(layout, false); | |||||
| uiLayoutSetPropDecorate(sub, false); | |||||
| uiTemplateCurveProfile(sub, &ptr, "custom_profile"); | |||||
| } | |||||
| } | |||||
| } | |||||
| static void geometry_panel_draw(const bContext *C, Panel *panel) | static void geometry_panel_draw(const bContext *C, Panel *panel) | ||||
| { | { | ||||
| uiLayout *row; | |||||
| uiLayout *layout = panel->layout; | uiLayout *layout = panel->layout; | ||||
| PointerRNA ptr; | PointerRNA ptr; | ||||
| modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | ||||
| bool edge_bevel = RNA_enum_get(&ptr, "affect") != MOD_BEVEL_VERT; | |||||
| uiLayoutSetPropSep(layout, true); | uiLayoutSetPropSep(layout, true); | ||||
| uiItemR(layout, &ptr, "miter_inner", 0, IFACE_("Miter Inner"), ICON_NONE); | row = uiLayoutRow(layout, false); | ||||
| uiItemR(layout, &ptr, "miter_outer", 0, IFACE_("Outer"), ICON_NONE); | uiLayoutSetActive(row, edge_bevel); | ||||
| uiItemR(row, &ptr, "miter_outer", 0, IFACE_("Miter Outer"), ICON_NONE); | |||||
| row = uiLayoutRow(layout, false); | |||||
| uiLayoutSetActive(row, edge_bevel); | |||||
| uiItemR(row, &ptr, "miter_inner", 0, IFACE_("Inner"), ICON_NONE); | |||||
| if (RNA_enum_get(&ptr, "miter_inner") == BEVEL_MITER_ARC) { | if (RNA_enum_get(&ptr, "miter_inner") == BEVEL_MITER_ARC) { | ||||
| uiItemR(layout, &ptr, "spread", 0, NULL, ICON_NONE); | row = uiLayoutRow(layout, false); | ||||
| uiLayoutSetActive(row, edge_bevel); | |||||
| uiItemR(row, &ptr, "spread", 0, NULL, ICON_NONE); | |||||
| } | } | ||||
| uiItemS(layout); | uiItemS(layout); | ||||
| uiItemR(layout, &ptr, "vmesh_method", 0, IFACE_("Intersections"), ICON_NONE); | row = uiLayoutRow(layout, false); | ||||
| uiLayoutSetActive(row, edge_bevel); | |||||
| uiItemR(row, &ptr, "vmesh_method", 0, IFACE_("Intersections"), ICON_NONE); | |||||
| uiItemR(layout, &ptr, "use_clamp_overlap", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "use_clamp_overlap", 0, NULL, ICON_NONE); | ||||
| uiItemR(layout, &ptr, "loop_slide", 0, NULL, ICON_NONE); | row = uiLayoutRow(layout, false); | ||||
| uiLayoutSetActive(row, edge_bevel); | |||||
| uiItemR(row, &ptr, "loop_slide", 0, NULL, ICON_NONE); | |||||
| } | } | ||||
| static void shading_panel_draw(const bContext *C, Panel *panel) | static void shading_panel_draw(const bContext *C, Panel *panel) | ||||
| { | { | ||||
| uiLayout *col; | uiLayout *col; | ||||
| uiLayout *layout = panel->layout; | uiLayout *layout = panel->layout; | ||||
| PointerRNA ptr; | PointerRNA ptr; | ||||
| modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | ||||
| bool edge_bevel = RNA_enum_get(&ptr, "affect") != MOD_BEVEL_VERT; | |||||
| uiLayoutSetPropSep(layout, true); | uiLayoutSetPropSep(layout, true); | ||||
| uiItemR(layout, &ptr, "harden_normals", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "harden_normals", 0, NULL, ICON_NONE); | ||||
| col = uiLayoutColumnWithHeading(layout, true, IFACE_("Mark")); | col = uiLayoutColumnWithHeading(layout, true, IFACE_("Mark")); | ||||
| uiLayoutSetActive(col, edge_bevel); | |||||
| uiItemR(col, &ptr, "mark_seam", 0, IFACE_("Seam"), ICON_NONE); | uiItemR(col, &ptr, "mark_seam", 0, IFACE_("Seam"), ICON_NONE); | ||||
| uiItemR(col, &ptr, "mark_sharp", 0, IFACE_("Sharp"), ICON_NONE); | uiItemR(col, &ptr, "mark_sharp", 0, IFACE_("Sharp"), ICON_NONE); | ||||
| uiItemR(layout, &ptr, "material", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "material", 0, NULL, ICON_NONE); | ||||
| uiItemR(layout, &ptr, "face_strength_mode", 0, NULL, ICON_NONE); | uiItemR(layout, &ptr, "face_strength_mode", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| static void profile_panel_draw(const bContext *C, Panel *panel) | |||||
| { | |||||
| uiLayout *layout = panel->layout; | |||||
| PointerRNA ptr; | |||||
| modifier_panel_get_property_pointers(C, panel, NULL, &ptr); | |||||
| int profile_type = RNA_enum_get(&ptr, "profile_type"); | |||||
| uiItemR(layout, &ptr, "profile_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); | |||||
| uiLayoutSetPropSep(layout, true); | |||||
| if (ELEM(profile_type, MOD_BEVEL_PROFILE_SUPERELLIPSE, MOD_BEVEL_PROFILE_CUSTOM)) { | |||||
| uiItemR(layout, | |||||
| &ptr, | |||||
| "profile", | |||||
| UI_ITEM_R_SLIDER, | |||||
| (profile_type == MOD_BEVEL_PROFILE_SUPERELLIPSE) ? IFACE_("Shape") : | |||||
| IFACE_("Miter Shape"), | |||||
| ICON_NONE); | |||||
| if (profile_type == MOD_BEVEL_PROFILE_CUSTOM) { | |||||
| uiLayout *sub = uiLayoutColumn(layout, false); | |||||
| uiLayoutSetPropDecorate(sub, false); | |||||
| uiTemplateCurveProfile(sub, &ptr, "custom_profile"); | |||||
| } | |||||
| } | |||||
| } | |||||
| static void panelRegister(ARegionType *region_type) | static void panelRegister(ARegionType *region_type) | ||||
| { | { | ||||
| PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Bevel, panel_draw); | PanelType *panel_type = modifier_panel_register(region_type, eModifierType_Bevel, panel_draw); | ||||
| modifier_subpanel_register( | modifier_subpanel_register( | ||||
| region_type, "profile", "Profile", NULL, profile_panel_draw, panel_type); | region_type, "profile", "Profile", NULL, profile_panel_draw, panel_type); | ||||
| modifier_subpanel_register( | modifier_subpanel_register( | ||||
| region_type, "geometry", "Geometry", NULL, geometry_panel_draw, panel_type); | region_type, "geometry", "Geometry", NULL, geometry_panel_draw, panel_type); | ||||
| modifier_subpanel_register( | modifier_subpanel_register( | ||||
| ▲ Show 20 Lines • Show All 53 Lines • Show Last 20 Lines | |||||