forked from bartvdbraak/blender
rename vertex group mix "vgroup, vgroup2" to "vgroup_a, vgroup_b"
also clamp more values between 0.0 and 1.0
This commit is contained in:
parent
e8346fa84c
commit
2c740a9b5e
@ -822,19 +822,19 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
if ob.type == 'MESH':
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group 1:")
|
||||
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
||||
col.label(text="Default Weight 1:")
|
||||
col.prop(md, "default_weight", text="")
|
||||
col.label(text="Vertex Group A:")
|
||||
col.prop_search(md, "vertex_group_a", ob, "vertex_groups", text="")
|
||||
col.label(text="Default Weight A:")
|
||||
col.prop(md, "default_weight_a", text="")
|
||||
|
||||
col.label(text="Mix Mode:")
|
||||
col.prop(md, "mix_mode", text="")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group 2:")
|
||||
col.prop_search(md, "vertex_group2", ob, "vertex_groups", text="")
|
||||
col.label(text="Default Weight 2:")
|
||||
col.prop(md, "default_weight2", text="")
|
||||
col.label(text="Vertex Group B:")
|
||||
col.prop_search(md, "vertex_group_b", ob, "vertex_groups", text="")
|
||||
col.label(text="Default Weight B:")
|
||||
col.prop(md, "default_weight_b", text="")
|
||||
|
||||
col.label(text="Mix Set:")
|
||||
col.prop(md, "mix_set", text="")
|
||||
|
@ -841,10 +841,10 @@ typedef struct WeightVGMixModifierData {
|
||||
/* XXX Note: I tried to keep everything logically ordered – provided the
|
||||
* alignment constraints... */
|
||||
|
||||
char defgrp_name[32]; /* Name of vertex group to modify/weight. */
|
||||
char defgrp_name2[32]; /* Name of other vertex group to mix in. */
|
||||
float default_weight; /* Default weight value for first vgroup. */
|
||||
float default_weight2; /* Default weight value to mix in. */
|
||||
char defgrp_name_a[32]; /* Name of vertex group to modify/weight. */
|
||||
char defgrp_name_b[32]; /* Name of other vertex group to mix in. */
|
||||
float default_weight_a; /* Default weight value for first vgroup. */
|
||||
float default_weight_b; /* Default weight value to mix in. */
|
||||
char mix_mode; /* How second vgroups weights affect first ones */
|
||||
char mix_set; /* What vertices to affect. */
|
||||
|
||||
@ -876,10 +876,10 @@ typedef struct WeightVGMixModifierData {
|
||||
|
||||
/* What vertices to affect. */
|
||||
#define MOD_WVG_SET_ALL 1 /* Affect all vertices. */
|
||||
#define MOD_WVG_SET_ORG 2 /* Affect only vertices in first vgroup. */
|
||||
#define MOD_WVG_SET_NEW 3 /* Affect only vertices in second vgroup. */
|
||||
#define MOD_WVG_SET_UNION 4 /* Affect only vertices in one vgroup or the other. */
|
||||
#define MOD_WVG_SET_INTER 5 /* Affect only vertices in both vgroups. */
|
||||
#define MOD_WVG_SET_A 2 /* Affect only vertices in first vgroup. */
|
||||
#define MOD_WVG_SET_B 3 /* Affect only vertices in second vgroup. */
|
||||
#define MOD_WVG_SET_OR 4 /* Affect only vertices in one vgroup or the other. */
|
||||
#define MOD_WVG_SET_AND 5 /* Affect only vertices in both vgroups. */
|
||||
|
||||
typedef struct WeightVGProximityModifierData {
|
||||
ModifierData modifier;
|
||||
|
@ -394,7 +394,7 @@ static void rna_WeightVGModifier_vgroup_set(PointerRNA *ptr, const char *value)
|
||||
}
|
||||
else if (md->type == eModifierType_WeightVGMix) {
|
||||
WeightVGMixModifierData *wmd= (WeightVGMixModifierData*)md;
|
||||
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name, sizeof(wmd->defgrp_name));
|
||||
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name_a, sizeof(wmd->defgrp_name_a));
|
||||
}
|
||||
else if (md->type == eModifierType_WeightVGProximity) {
|
||||
WeightVGProximityModifierData *wmd= (WeightVGProximityModifierData*)md;
|
||||
@ -422,7 +422,7 @@ static void rna_WeightVGModifier_mask_vgroup_set(PointerRNA *ptr, const char *va
|
||||
static void rna_WeightVGMixModifier_vgroup2_set(PointerRNA *ptr, const char *value)
|
||||
{
|
||||
WeightVGMixModifierData *wmd= (WeightVGMixModifierData*)ptr->data;
|
||||
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name2, sizeof(wmd->defgrp_name2));
|
||||
rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name_b, sizeof(wmd->defgrp_name_b));
|
||||
}
|
||||
|
||||
static void rna_MappingInfo_uvlayer_set(PointerRNA *ptr, const char *value)
|
||||
@ -2510,7 +2510,7 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
|
||||
|
||||
prop= RNA_def_property(srna, "mask_constant", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
|
||||
RNA_def_property_ui_range(prop, -1.0, 1.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Influence", "Global influence of current modifications on vgroup.");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
@ -2600,8 +2600,8 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
|
||||
/* RNA_def_property_update(prop, 0, "rna_Modifier_update");*/
|
||||
|
||||
prop= RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
|
||||
RNA_def_property_range(prop, 0.0, 1.0f);
|
||||
RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Default Weight", "Default weight a vertex will have if "
|
||||
"it is not in the vgroup.");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
@ -2641,16 +2641,16 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
|
||||
|
||||
prop= RNA_def_property(srna, "add_threshold", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "add_threshold");
|
||||
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Add Threshold", "Lower bound for a vertex's weight "
|
||||
"to be added to the vgroup.");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop= RNA_def_property(srna, "remove_threshold", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "rem_threshold");
|
||||
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Rem Threshold", "Upper bound for a vertex's weight "
|
||||
"to be removed from the vgroup.");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
@ -2685,10 +2685,10 @@ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
|
||||
|
||||
static EnumPropertyItem weightvg_mix_set_items[] = {
|
||||
{MOD_WVG_SET_ALL, "ALL", 0, "All vertices", ""},
|
||||
{MOD_WVG_SET_ORG, "ORG", 0, "Vertices from vgroup 1", ""},
|
||||
{MOD_WVG_SET_NEW, "NEW", 0, "Vertices from vgroup 2", ""},
|
||||
{MOD_WVG_SET_UNION, "UNION", 0, "Vertices from one group", ""},
|
||||
{MOD_WVG_SET_INTER, "INTER", 0, "Vertices from both groups", ""},
|
||||
{MOD_WVG_SET_A, "A", 0, "Vertices from group A", ""},
|
||||
{MOD_WVG_SET_B, "B", 0, "Vertices from group B", ""},
|
||||
{MOD_WVG_SET_OR, "OR", 0, "Vertices from one group", ""},
|
||||
{MOD_WVG_SET_AND, "AND", 0, "Vertices from both groups", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
StructRNA *srna;
|
||||
@ -2700,29 +2700,29 @@ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
|
||||
RNA_def_struct_sdna(srna, "WeightVGMixModifierData");
|
||||
RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
|
||||
|
||||
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", "First vertex group name.");
|
||||
prop= RNA_def_property(srna, "vertex_group_a", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_string_sdna(prop, NULL, "defgrp_name_a");
|
||||
RNA_def_property_ui_text(prop, "Vertex Group A", "First vertex group name.");
|
||||
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGModifier_vgroup_set");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop= RNA_def_property(srna, "vertex_group2", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_string_sdna(prop, NULL, "defgrp_name2");
|
||||
RNA_def_property_ui_text(prop, "Vertex Group 2", "Second vertex group name.");
|
||||
prop= RNA_def_property(srna, "vertex_group_b", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_string_sdna(prop, NULL, "defgrp_name_b");
|
||||
RNA_def_property_ui_text(prop, "Vertex Group B", "Second vertex group name.");
|
||||
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WeightVGMixModifier_vgroup2_set");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop= RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Default Weight", "Default weight a vertex will have if "
|
||||
prop= RNA_def_property(srna, "default_weight_a", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, 0.0, 1.0f);
|
||||
RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Default Weight A", "Default weight a vertex will have if "
|
||||
"it is not in the first vgroup.");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop= RNA_def_property(srna, "default_weight2", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
|
||||
RNA_def_property_ui_range(prop, -100000.0, 100000.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Default Weight 2", "Default weight a vertex will have if "
|
||||
prop= RNA_def_property(srna, "default_weight_b", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, 0.0, 1.0f);
|
||||
RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 0);
|
||||
RNA_def_property_ui_text(prop, "Default Weight B", "Default weight a vertex will have if "
|
||||
"it is not in the second vgroup.");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
|
@ -118,10 +118,10 @@ static void initData(ModifierData *md)
|
||||
{
|
||||
WeightVGMixModifierData *wmd = (WeightVGMixModifierData*) md;
|
||||
|
||||
wmd->default_weight = 0.0;
|
||||
wmd->default_weight2 = 0.0;
|
||||
wmd->default_weight_a = 0.0f;
|
||||
wmd->default_weight_b = 0.0f;
|
||||
wmd->mix_mode = MOD_WVG_MIX_SET;
|
||||
wmd->mix_set = MOD_WVG_SET_INTER;
|
||||
wmd->mix_set = MOD_WVG_SET_AND;
|
||||
|
||||
wmd->mask_constant = 1.0f;
|
||||
wmd->mask_tex_use_channel = MOD_WVG_MASK_TEX_USE_INT; /* Use intensity by default. */
|
||||
@ -133,10 +133,10 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
WeightVGMixModifierData *wmd = (WeightVGMixModifierData*) md;
|
||||
WeightVGMixModifierData *twmd = (WeightVGMixModifierData*) target;
|
||||
|
||||
BLI_strncpy(twmd->defgrp_name, wmd->defgrp_name, sizeof(twmd->defgrp_name));
|
||||
BLI_strncpy(twmd->defgrp_name2, wmd->defgrp_name2, sizeof(twmd->defgrp_name2));
|
||||
twmd->default_weight = wmd->default_weight;
|
||||
twmd->default_weight2 = wmd->default_weight2;
|
||||
BLI_strncpy(twmd->defgrp_name_a, wmd->defgrp_name_a, sizeof(twmd->defgrp_name_a));
|
||||
BLI_strncpy(twmd->defgrp_name_b, wmd->defgrp_name_b, sizeof(twmd->defgrp_name_b));
|
||||
twmd->default_weight_a = wmd->default_weight_a;
|
||||
twmd->default_weight_b = wmd->default_weight_b;
|
||||
twmd->mix_mode = wmd->mix_mode;
|
||||
twmd->mix_set = wmd->mix_set;
|
||||
|
||||
@ -217,7 +217,7 @@ static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
||||
{
|
||||
WeightVGMixModifierData *wmd = (WeightVGMixModifierData*) md;
|
||||
/* If no vertex group, bypass. */
|
||||
return (wmd->defgrp_name == NULL);
|
||||
return (wmd->defgrp_name_a == NULL);
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
|
||||
@ -248,12 +248,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
return dm;
|
||||
|
||||
/* Get vgroup idx from its name. */
|
||||
defgrp_idx = defgroup_name_index(ob, wmd->defgrp_name);
|
||||
defgrp_idx = defgroup_name_index(ob, wmd->defgrp_name_a);
|
||||
if (defgrp_idx < 0)
|
||||
return dm;
|
||||
/* Get seconf vgroup idx from its name, if given. */
|
||||
if (wmd->defgrp_name2[0] != (char)0) {
|
||||
defgrp_idx2 = defgroup_name_index(ob, wmd->defgrp_name2);
|
||||
if (wmd->defgrp_name_b[0] != (char)0) {
|
||||
defgrp_idx2 = defgroup_name_index(ob, wmd->defgrp_name_b);
|
||||
if (defgrp_idx2 < 0)
|
||||
return dm;
|
||||
}
|
||||
@ -305,7 +305,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
/* Find out which vertices to work on. */
|
||||
tidx = MEM_mallocN(sizeof(int) * numVerts, "WeightVGMix Modifier, tidx");
|
||||
switch (wmd->mix_set) {
|
||||
case MOD_WVG_SET_ORG:
|
||||
case MOD_WVG_SET_A:
|
||||
/* All vertices in first vgroup. */
|
||||
for (i = 0; i < numVerts; i++) {
|
||||
for (j = 0; j < dvert[i].totweight; j++) {
|
||||
@ -316,7 +316,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MOD_WVG_SET_NEW:
|
||||
case MOD_WVG_SET_B:
|
||||
/* All vertices in second vgroup. */
|
||||
for (i = 0; i < numVerts; i++) {
|
||||
for (j = 0; j < dvert[i].totweight; j++) {
|
||||
@ -327,7 +327,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MOD_WVG_SET_UNION:
|
||||
case MOD_WVG_SET_OR:
|
||||
/* All vertices in one vgroup or the other. */
|
||||
for (i = 0; i < numVerts; i++) {
|
||||
for (j = 0; j < dvert[i].totweight; j++) {
|
||||
@ -338,27 +338,29 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MOD_WVG_SET_INTER:
|
||||
case MOD_WVG_SET_AND:
|
||||
/* All vertices in both vgroups. */
|
||||
for (i = 0; i < numVerts; i++) {
|
||||
char idx1 = 0;
|
||||
char idx2 = 0;
|
||||
int idx1 = FALSE;
|
||||
int idx2 = FALSE;
|
||||
for (j = 0; j < dvert[i].totweight; j++) {
|
||||
if(dvert[i].dw[j].def_nr == defgrp_idx) {
|
||||
if (idx2) {
|
||||
if (idx2 == TRUE) {
|
||||
tidx[numIdx++] = i;
|
||||
break;
|
||||
}
|
||||
else
|
||||
idx1 = 1;
|
||||
else {
|
||||
idx1 = TRUE;
|
||||
}
|
||||
}
|
||||
else if(dvert[i].dw[j].def_nr == defgrp_idx2) {
|
||||
if (idx1) {
|
||||
if (idx1 == TRUE) {
|
||||
tidx[numIdx++] = i;
|
||||
break;
|
||||
}
|
||||
else
|
||||
idx2 = 1;
|
||||
else {
|
||||
idx2 = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -382,27 +384,27 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
/* Mix weights. */
|
||||
for (i = 0; i < numIdx; i++) {
|
||||
float weight2 = 0.0;
|
||||
char w1 = 0;
|
||||
char w2 = 0;
|
||||
int w1 = FALSE;
|
||||
int w2 = FALSE;
|
||||
int idx = indices ? indices[i] : i;
|
||||
for (j = 0; j < dvert[idx].totweight; j++) {
|
||||
if(dvert[idx].dw[j].def_nr == defgrp_idx) {
|
||||
org_w[i] = dvert[idx].dw[j].weight;
|
||||
w1 = 1;
|
||||
if (w2)
|
||||
w1 = TRUE;
|
||||
if (w2 == TRUE)
|
||||
break;
|
||||
}
|
||||
else if(dvert[idx].dw[j].def_nr == defgrp_idx2) {
|
||||
weight2 = dvert[idx].dw[j].weight;
|
||||
w2 = 1;
|
||||
if (w1)
|
||||
w2 = TRUE;
|
||||
if (w1 == TRUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (w1 == 0)
|
||||
org_w[i] = wmd->default_weight;
|
||||
if (w2 == 0)
|
||||
weight2 = wmd->default_weight2;
|
||||
if (w1 == FALSE)
|
||||
org_w[i] = wmd->default_weight_a;
|
||||
if (w2 == FALSE)
|
||||
weight2 = wmd->default_weight_b;
|
||||
new_w[i] = mix_weight(org_w[i], weight2, wmd->mix_mode);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user