diff options
author | Fredrik Hansson <fredrikh> | 2021-07-24 00:46:19 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-07-24 00:52:25 +0300 |
commit | 2beff6197e98ec3bcf92f9473953b32fcf89c373 (patch) | |
tree | 86c6874394cbd561b31346e08e4397984839e7cd /source | |
parent | 3123f33380b35ae93afee0a30f36bc7181927b28 (diff) |
Weld Modifier: add "loose_edges" option
This improve the cloth modeling workflow by allowing you to weld only the
edges that are used for the sewing forces.
Reviewed By: mano-wii, weasel
Differential Revision: https://developer.blender.org/D10710
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 6 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_weld.c | 7 |
3 files changed, 14 insertions, 0 deletions
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 401b49f2ee8..99c346bf589 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -2023,6 +2023,7 @@ typedef struct WeldModifierData { /* WeldModifierData->flag */ enum { MOD_WELD_INVERT_VGROUP = (1 << 0), + MOD_WELD_LOOSE_EDGES = (1 << 1), }; /* #WeldModifierData.mode */ diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 5fddb0f18a5..388f587dfb4 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -6279,6 +6279,12 @@ static void rna_def_modifier_weld(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + prop = RNA_def_property(srna, "loose_edges", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WELD_LOOSE_EDGES); + RNA_def_property_ui_text( + prop, "Only Loose Edges", "Collapse edges without faces, cloth sewing edges"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); + RNA_define_lib_overridable(false); } diff --git a/source/blender/modifiers/intern/MOD_weld.c b/source/blender/modifiers/intern/MOD_weld.c index fe2d699aea8..b1fa2a7d912 100644 --- a/source/blender/modifiers/intern/MOD_weld.c +++ b/source/blender/modifiers/intern/MOD_weld.c @@ -1735,6 +1735,9 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, uint v1 = me->v1; uint v2 = me->v2; + if (wmd->flag & MOD_WELD_LOOSE_EDGES && (me->flag & ME_LOOSEEDGE) == 0) { + continue; + } while (v1 != vert_dest_map[v1]) { v1 = vert_dest_map[v1]; } @@ -2019,11 +2022,15 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) PointerRNA ob_ptr; PointerRNA *ptr = modifier_panel_get_property_pointers(panel, &ob_ptr); + int weld_mode = RNA_enum_get(ptr, "mode"); uiLayoutSetPropSep(layout, true); uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "merge_threshold", 0, IFACE_("Distance"), ICON_NONE); + if (weld_mode == MOD_WELD_MODE_CONNECTED) { + uiItemR(layout, ptr, "loose_edges", 0, NULL, ICON_NONE); + } modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); modifier_panel_end(layout, ptr); |