Modifier: New Weld Modifier
Part of T70240 This is the initial implementation of Weld Modifier. New features will be added later. ToDo: - Seams: restrict welding to vertices along boundary edges. - Edge Collapse: collapse edges below the length threshold. - New icon. - Some customdata are not being correctly interpolated. Differential Revision: https://developer.blender.org/D6383
This commit is contained in:
parent
dc3a165ae0
commit
f050fa3253
|
@ -1481,6 +1481,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
|||
|
||||
col.prop(md, "material_offset", text="Material Offset")
|
||||
|
||||
def WELD(self, layout, ob, md):
|
||||
layout.prop(md, "merge_threshold", text="Distance")
|
||||
layout.prop(md, "max_interactions")
|
||||
layout.prop_search(md, "vertex_group", ob, "vertex_groups")
|
||||
|
||||
def DATA_TRANSFER(self, layout, ob, md):
|
||||
row = layout.row(align=True)
|
||||
row.prop(md, "object")
|
||||
|
@ -2372,7 +2377,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
|
|||
subcol.enabled = md.duplications > 0
|
||||
subcol.prop(md, "distance")
|
||||
subcol.prop(md, "offset", slider=True)
|
||||
|
||||
|
||||
subcol.separator()
|
||||
|
||||
subcol.prop(md, "enable_fading")
|
||||
|
@ -2408,7 +2413,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
|
|||
row = layout.row(align=True)
|
||||
row.prop(md, "layer_pass", text="Pass")
|
||||
row.prop(md, "invert_layer_pass", text="", icon='ARROW_LEFTRIGHT')
|
||||
|
||||
|
||||
classes = (
|
||||
DATA_PT_modifiers,
|
||||
DATA_PT_gpencil_modifiers,
|
||||
|
|
|
@ -2172,6 +2172,9 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
|
|||
case eModifierType_Wireframe:
|
||||
data.icon = ICON_MOD_WIREFRAME;
|
||||
break;
|
||||
case eModifierType_Weld:
|
||||
data.icon = ICON_AUTOMERGE_OFF; /* XXX, needs own icon */
|
||||
break;
|
||||
case eModifierType_LaplacianDeform:
|
||||
data.icon = ICON_MOD_MESHDEFORM; /* XXX, needs own icon */
|
||||
break;
|
||||
|
|
|
@ -86,6 +86,7 @@ typedef enum ModifierType {
|
|||
eModifierType_MeshSequenceCache = 52,
|
||||
eModifierType_SurfaceDeform = 53,
|
||||
eModifierType_WeightedNormal = 54,
|
||||
eModifierType_Weld = 55,
|
||||
NUM_MODIFIER_TYPES,
|
||||
} ModifierType;
|
||||
|
||||
|
@ -1810,6 +1811,16 @@ enum {
|
|||
MOD_WIREFRAME_CREASE = (1 << 5),
|
||||
};
|
||||
|
||||
typedef struct WeldModifierData {
|
||||
ModifierData modifier;
|
||||
|
||||
/* the limit below which to merge vertices in adjacent duplicates */
|
||||
float merge_dist;
|
||||
unsigned int max_interactions;
|
||||
/** Name of vertex group to use to mask, MAX_VGROUP_NAME. */
|
||||
char defgrp_name[64];
|
||||
} WeldModifierData;
|
||||
|
||||
typedef struct DataTransferModifierData {
|
||||
ModifierData modifier;
|
||||
|
||||
|
|
|
@ -741,6 +741,7 @@ extern StructRNA RNA_Window;
|
|||
extern StructRNA RNA_WindowManager;
|
||||
extern StructRNA RNA_WipeSequence;
|
||||
extern StructRNA RNA_WireframeModifier;
|
||||
extern StructRNA RNA_WeldModifier;
|
||||
extern StructRNA RNA_WoodTexture;
|
||||
extern StructRNA RNA_WorkSpace;
|
||||
extern StructRNA RNA_World;
|
||||
|
|
|
@ -187,6 +187,11 @@ const EnumPropertyItem rna_enum_object_modifier_type_items[] = {
|
|||
ICON_MOD_WIREFRAME,
|
||||
"Wireframe",
|
||||
"Convert faces into thickened edges"},
|
||||
{eModifierType_Weld,
|
||||
"WELD",
|
||||
ICON_AUTOMERGE_OFF,
|
||||
"Weld",
|
||||
"Finds groups of vertices closer then dist and merges them together"},
|
||||
{0, "", 0, N_("Deform"), ""},
|
||||
{eModifierType_Armature,
|
||||
"ARMATURE",
|
||||
|
@ -700,6 +705,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
|
|||
return &RNA_LaplacianDeformModifier;
|
||||
case eModifierType_Wireframe:
|
||||
return &RNA_WireframeModifier;
|
||||
case eModifierType_Weld:
|
||||
return &RNA_WeldModifier;
|
||||
case eModifierType_DataTransfer:
|
||||
return &RNA_DataTransferModifier;
|
||||
case eModifierType_NormalEdit:
|
||||
|
@ -803,6 +810,7 @@ RNA_MOD_VGROUP_NAME_SET(WeightVGMix, mask_defgrp_name);
|
|||
RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, defgrp_name);
|
||||
RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, mask_defgrp_name);
|
||||
RNA_MOD_VGROUP_NAME_SET(WeightedNormal, defgrp_name);
|
||||
RNA_MOD_VGROUP_NAME_SET(Weld, defgrp_name);
|
||||
RNA_MOD_VGROUP_NAME_SET(Wireframe, defgrp_name);
|
||||
|
||||
static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value)
|
||||
|
@ -5659,6 +5667,40 @@ static void rna_def_modifier_wireframe(BlenderRNA *brna)
|
|||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
}
|
||||
|
||||
static void rna_def_modifier_weld(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
srna = RNA_def_struct(brna, "WeldModifier", "Modifier");
|
||||
RNA_def_struct_ui_text(srna, "Weld Modifier", "Weld modifier");
|
||||
RNA_def_struct_sdna(srna, "WeldModifierData");
|
||||
RNA_def_struct_ui_icon(srna, ICON_AUTOMERGE_OFF);
|
||||
|
||||
prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "merge_dist");
|
||||
RNA_def_property_range(prop, 0, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, 0, 1, 0.001, 6);
|
||||
RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop = RNA_def_property(srna, "max_interactions", PROP_INT, PROP_UNSIGNED);
|
||||
RNA_def_property_int_sdna(prop, NULL, "max_interactions");
|
||||
RNA_def_property_ui_text(
|
||||
prop,
|
||||
"Duplicate Limit",
|
||||
"For a better performance, limits the number of elements found per vertex. "
|
||||
"(0 makes it infinite)");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Vertex Group", "Vertex group name for selecting the affected areas");
|
||||
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeldModifier_defgrp_name_set");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
}
|
||||
|
||||
static void rna_def_modifier_datatransfer(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
|
@ -6368,6 +6410,7 @@ void RNA_def_modifier(BlenderRNA *brna)
|
|||
rna_def_modifier_meshcache(brna);
|
||||
rna_def_modifier_laplaciandeform(brna);
|
||||
rna_def_modifier_wireframe(brna);
|
||||
rna_def_modifier_weld(brna);
|
||||
rna_def_modifier_datatransfer(brna);
|
||||
rna_def_modifier_normaledit(brna);
|
||||
rna_def_modifier_meshseqcache(brna);
|
||||
|
|
|
@ -101,6 +101,7 @@ set(SRC
|
|||
intern/MOD_weightvgedit.c
|
||||
intern/MOD_weightvgmix.c
|
||||
intern/MOD_weightvgproximity.c
|
||||
intern/MOD_weld.c
|
||||
intern/MOD_wireframe.c
|
||||
|
||||
MOD_modifiertypes.h
|
||||
|
|
|
@ -75,6 +75,7 @@ extern ModifierTypeInfo modifierType_UVWarp;
|
|||
extern ModifierTypeInfo modifierType_MeshCache;
|
||||
extern ModifierTypeInfo modifierType_LaplacianDeform;
|
||||
extern ModifierTypeInfo modifierType_Wireframe;
|
||||
extern ModifierTypeInfo modifierType_Weld;
|
||||
extern ModifierTypeInfo modifierType_DataTransfer;
|
||||
extern ModifierTypeInfo modifierType_NormalEdit;
|
||||
extern ModifierTypeInfo modifierType_CorrectiveSmooth;
|
||||
|
|
|
@ -301,6 +301,7 @@ void modifier_type_init(ModifierTypeInfo *types[])
|
|||
INIT_TYPE(MeshCache);
|
||||
INIT_TYPE(LaplacianDeform);
|
||||
INIT_TYPE(Wireframe);
|
||||
INIT_TYPE(Weld);
|
||||
INIT_TYPE(DataTransfer);
|
||||
INIT_TYPE(NormalEdit);
|
||||
INIT_TYPE(CorrectiveSmooth);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue