interface + naming improvements to vertex wright modifier

- WeightVG -> Vertex Weight
- mapping_mode -> falloff_type
- nicer layout for VertexWeightModifiers add/remove options
This commit is contained in:
Campbell Barton 2011-09-07 07:46:26 +00:00
parent 6d18b1800a
commit 520778163d
9 changed files with 72 additions and 53 deletions

@ -100,6 +100,22 @@ While this is not best practice - for testing you can extend the search path, th
Don't Use Blender!
==================
While developing your own scripts blenders interface can get in the way, manually reloading, running the scripts, opening file import etc is just overhead.
For scripts that are not interactive it can end up being easier not to use blender at all and run blender from a terminal, without opening a window and execute the script on the command line.
.. code-block::
blender --backgruond --python myscript.py
You might want to run this with a blend file too.
.. code-block::
blender myscene.blend --backgruond --python myscript.py
Use External Tools
==================

@ -768,7 +768,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
elif md.mask_tex_mapping == 'UV' and ob.type == 'MESH':
layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_textures")
def WEIGHT_VGEDIT(self, layout, ob, md):
def VERTEX_WEIGHT_EDIT(self, layout, ob, md):
if ob.type == 'MESH':
split = layout.split()
col = split.column()
@ -779,25 +779,28 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.label(text="Default Weight:")
col.prop(md, "default_weight", text="")
layout.prop(md, "mapping_mode")
if md.mapping_mode == 'CURVE':
layout.prop(md, "falloff_type")
if md.falloff_type == 'CURVE':
col = layout.column()
col.template_curve_mapping(md, "map_curve")
row = layout.row()
row.prop(md, "use_add")
row.prop(md, "use_remove")
row = layout.row()
if md.use_add:
row.prop(md, "add_threshold")
if md.use_remove:
row.prop(md, "remove_threshold")
split = layout.split(percentage=0.4)
split.prop(md, "use_add")
row = split.row()
row.active = md.use_add
row.prop(md, "add_threshold")
split = layout.split(percentage=0.4)
split.prop(md, "use_remove")
row = split.row()
row.active = md.use_remove
row.prop(md, "remove_threshold")
# Common mask options…
layout.separator()
self.weight_vg_mask(layout, ob, md)
def WEIGHT_VGMIX(self, layout, ob, md):
def VERTEX_WEIGHT_MIX(self, layout, ob, md):
if ob.type == 'MESH':
split = layout.split()
col = split.column()
@ -822,7 +825,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
layout.separator()
self.weight_vg_mask(layout, ob, md)
def WEIGHT_VGPROXIMITY(self, layout, ob, md):
def VERTEX_WEIGHT_PROXIMITY(self, layout, ob, md):
if ob.type == 'MESH':
split = layout.split()
col = split.column()
@ -843,7 +846,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
row.prop(md, "min_dist")
row.prop(md, "max_dist")
layout.prop(md, "mapping_mode")
layout.prop(md, "falloff_type")
# Common mask options…
layout.separator()

@ -589,7 +589,7 @@ DEF_ICON(MOD_MULTIRES)
DEF_ICON(MOD_SMOKE)
DEF_ICON(MOD_SOLIDIFY)
DEF_ICON(MOD_SCREW)
DEF_ICON(MOD_WEIGHTVG)
DEF_ICON(MOD_VERTEX_WEIGHT)
#ifndef DEF_ICON_BLANK_SKIP
DEF_ICON(BLANK161)
DEF_ICON(BLANK162)

@ -796,7 +796,7 @@ typedef struct WeightVGEditModifierData {
char defgrp_name[32]; /* Name of vertex group to edit. */
short edit_flags; /* Using MOD_WVG_EDIT_* flags. */
short mapping_mode; /* Using MOD_WVG_MAPPING_* defines. */
short falloff_type; /* Using MOD_WVG_MAPPING_* defines. */
float default_weight; /* Weight for vertices not in vgroup. */
/* Mapping stuff. */
@ -913,7 +913,7 @@ typedef struct WeightVGProximityModifierData {
float min_dist, max_dist; /* Distances mapping to 0.0/1.0 weights. */
/* Put here to avoid breaking existing struct... */
short mapping_mode; /* Using MOD_WVG_MAPPING_* defines. */
short falloff_type; /* Using MOD_WVG_MAPPING_* defines. */
/* Padding... */
short pad_s1;

@ -69,9 +69,9 @@ EnumPropertyItem modifier_type_items[] ={
{eModifierType_Solidify, "SOLIDIFY", ICON_MOD_SOLIDIFY, "Solidify", ""},
{eModifierType_Subsurf, "SUBSURF", ICON_MOD_SUBSURF, "Subdivision Surface", ""},
{eModifierType_UVProject, "UV_PROJECT", ICON_MOD_UVPROJECT, "UV Project", ""},
{eModifierType_WeightVGEdit, "WEIGHT_VGEDIT", ICON_MOD_WEIGHTVG, "WeightVG Edit", ""},
{eModifierType_WeightVGMix, "WEIGHT_VGMIX", ICON_MOD_WEIGHTVG, "WeightVG Mix", ""},
{eModifierType_WeightVGProximity, "WEIGHT_VGPROXIMITY", ICON_MOD_WEIGHTVG, "WeightVG Proximity", ""},
{eModifierType_WeightVGEdit, "VERTEX_WEIGHT_EDIT", ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Edit", ""},
{eModifierType_WeightVGMix, "VERTEX_WEIGHT_MIX", ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Mix", ""},
{eModifierType_WeightVGProximity, "VERTEX_WEIGHT_PROXIMITY", ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Proximity", ""},
{0, "", 0, "Deform", ""},
{eModifierType_Armature, "ARMATURE", ICON_MOD_ARMATURE, "Armature", ""},
{eModifierType_Cast, "CAST", ICON_MOD_CAST, "Cast", ""},
@ -188,11 +188,11 @@ static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr)
case eModifierType_Warp:
return &RNA_WarpModifier;
case eModifierType_WeightVGEdit:
return &RNA_WeightVGEditModifier;
return &RNA_VertexWeightEditModifier;
case eModifierType_WeightVGMix:
return &RNA_WeightVGMixModifier;
return &RNA_VertexWeightMixModifier;
case eModifierType_WeightVGProximity:
return &RNA_WeightVGProximityModifier;
return &RNA_VertexWeightProximityModifier;
default:
return &RNA_Modifier;
}
@ -2552,7 +2552,7 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *brna, StructRNA *srna)
static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
{
static EnumPropertyItem weightvg_edit_mapping_mode_items[] = {
static EnumPropertyItem weightvg_edit_falloff_type_items[] = {
{MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", ""},
{MOD_WVG_MAPPING_CURVE, "CURVE", ICON_RNDCURVE, "Custom Curve", ""},
{MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
@ -2566,11 +2566,11 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
srna= RNA_def_struct(brna, "WeightVGEditModifier", "Modifier");
srna= RNA_def_struct(brna, "VertexWeightEditModifier", "Modifier");
RNA_def_struct_ui_text(srna, "WeightVG Edit Modifier",
"Edit the weights of vertices in a group.");
RNA_def_struct_sdna(srna, "WeightVGEditModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
@ -2578,9 +2578,9 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
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, "mapping_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, weightvg_edit_mapping_mode_items);
RNA_def_property_ui_text(prop, "Mapping Mode", "How weights are mapped to there new values.");
prop= RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, weightvg_edit_falloff_type_items);
RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to there new values.");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "use_add", PROP_BOOLEAN, PROP_NONE);
@ -2650,11 +2650,11 @@ static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
srna= RNA_def_struct(brna, "WeightVGMixModifier", "Modifier");
srna= RNA_def_struct(brna, "VertexWeightMixModifier", "Modifier");
RNA_def_struct_ui_text(srna, "WeightVG Mix Modifier",
"Mix the weights of two vertex groups.");
RNA_def_struct_sdna(srna, "WeightVGMixModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
prop= RNA_def_property(srna, "vertex_group_a", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "defgrp_name_a");
@ -2712,7 +2712,7 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
{MOD_WVG_PROXIMITY_GEOM_FACES, "FACE", ICON_FACESEL, "Face", ""},
{0, NULL, 0, NULL, NULL}};
static EnumPropertyItem weightvg_proximity_mapping_mode_items[] = {
static EnumPropertyItem weightvg_proximity_falloff_type_items[] = {
{MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", ""},
/* No curve mapping here! */
{MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
@ -2726,12 +2726,12 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
srna= RNA_def_struct(brna, "WeightVGProximityModifier", "Modifier");
srna= RNA_def_struct(brna, "VertexWeightProximityModifier", "Modifier");
RNA_def_struct_ui_text(srna, "WeightVG Proximity Modifier",
"Set the weights of vertices in a group from a target object's "
"distance.");
RNA_def_struct_sdna(srna, "WeightVGProximityModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_WEIGHTVG);
RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "defgrp_name");
@ -2769,9 +2769,9 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Highest Dist", "Distance mapping to weight 1.0.");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "mapping_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, weightvg_proximity_mapping_mode_items);
RNA_def_property_ui_text(prop, "Mapping Mode", "How weights are mapped to there new values.");
prop= RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, weightvg_proximity_falloff_type_items);
RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to there new values.");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
/* Common masking properties. */

@ -63,16 +63,16 @@
* vertex index (in case the weight tables do not cover the whole vertices...).
* cmap might be NULL, in which case curve mapping mode will return unmodified data.
*/
void weightvg_do_map(int num, float *new_w, short mode, CurveMapping *cmap)
void weightvg_do_map(int num, float *new_w, short falloff_type, CurveMapping *cmap)
{
int i;
/* Return immediately, if we have nothing to do! */
/* Also security checks... */
if(((mode == MOD_WVG_MAPPING_CURVE) && (cmap == NULL))
|| !ELEM7(mode, MOD_WVG_MAPPING_CURVE, MOD_WVG_MAPPING_SHARP, MOD_WVG_MAPPING_SMOOTH,
MOD_WVG_MAPPING_ROOT, MOD_WVG_MAPPING_SPHERE, MOD_WVG_MAPPING_RANDOM,
MOD_WVG_MAPPING_STEP))
if(((falloff_type == MOD_WVG_MAPPING_CURVE) && (cmap == NULL))
|| !ELEM7(falloff_type, MOD_WVG_MAPPING_CURVE, MOD_WVG_MAPPING_SHARP, MOD_WVG_MAPPING_SMOOTH,
MOD_WVG_MAPPING_ROOT, MOD_WVG_MAPPING_SPHERE, MOD_WVG_MAPPING_RANDOM,
MOD_WVG_MAPPING_STEP))
return;
/* Map each weight (vertex) to its new value, accordingly to the chosen mode. */
@ -81,7 +81,7 @@ void weightvg_do_map(int num, float *new_w, short mode, CurveMapping *cmap)
/* Code borrowed from the warp modifier. */
/* Closely matches PROP_SMOOTH and similar. */
switch(mode) {
switch(falloff_type) {
case MOD_WVG_MAPPING_CURVE:
fac = curvemapping_evaluateF(cmap, 0, fac);
break;

@ -62,7 +62,7 @@ static void initData(ModifierData *md)
{
WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
wmd->edit_flags = 0;
wmd->mapping_mode = MOD_WVG_MAPPING_NONE;
wmd->falloff_type = MOD_WVG_MAPPING_NONE;
wmd->default_weight = 0.0f;
wmd->cmap_curve = curvemapping_add(1, 0.0, 0.0, 1.0, 1.0);
@ -90,7 +90,7 @@ static void copyData(ModifierData *md, ModifierData *target)
BLI_strncpy(twmd->defgrp_name, wmd->defgrp_name, sizeof(twmd->defgrp_name));
twmd->edit_flags = wmd->edit_flags;
twmd->mapping_mode = wmd->mapping_mode;
twmd->falloff_type = wmd->falloff_type;
twmd->default_weight = wmd->default_weight;
twmd->cmap_curve = curvemapping_copy(wmd->cmap_curve);
@ -268,8 +268,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
}
/* Do mapping. */
if (wmd->mapping_mode != MOD_WVG_MAPPING_NONE) {
weightvg_do_map(numVerts, new_w, wmd->mapping_mode, wmd->cmap_curve);
if (wmd->falloff_type != MOD_WVG_MAPPING_NONE) {
weightvg_do_map(numVerts, new_w, wmd->falloff_type, wmd->cmap_curve);
}
/* Do masking. */
@ -298,7 +298,7 @@ static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
ModifierTypeInfo modifierType_WeightVGEdit = {
/* name */ "WeightVGEdit",
/* name */ "VertexWeightEdit",
/* structName */ "WeightVGEditModifierData",
/* structSize */ sizeof(WeightVGEditModifierData),
/* type */ eModifierTypeType_Nonconstructive,

@ -438,7 +438,7 @@ static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
ModifierTypeInfo modifierType_WeightVGMix = {
/* name */ "WeightVGMix",
/* name */ "VertexWeightMix",
/* structName */ "WeightVGMixModifierData",
/* structSize */ sizeof(WeightVGMixModifierData),
/* type */ eModifierTypeType_Nonconstructive,

@ -220,7 +220,7 @@ static void initData(ModifierData *md)
wmd->proximity_mode = MOD_WVG_PROXIMITY_OBJECT;
wmd->proximity_flags = MOD_WVG_PROXIMITY_GEOM_VERTS;
wmd->mapping_mode = MOD_WVG_MAPPING_NONE;
wmd->falloff_type = MOD_WVG_MAPPING_NONE;
wmd->mask_constant = 1.0f;
wmd->mask_tex_use_channel = MOD_WVG_MASK_TEX_USE_INT; /* Use intensity by default. */
@ -238,7 +238,7 @@ static void copyData(ModifierData *md, ModifierData *target)
twmd->proximity_flags = wmd->proximity_flags;
twmd->proximity_ob_target = wmd->proximity_ob_target;
twmd->mapping_mode = wmd->mapping_mode;
twmd->falloff_type = wmd->falloff_type;
twmd->mask_constant = wmd->mask_constant;
BLI_strncpy(twmd->mask_defgrp_name, wmd->mask_defgrp_name, sizeof(twmd->mask_defgrp_name));
@ -498,7 +498,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
/* Map distances to weights. */
do_map(org_w, numIdx, wmd->min_dist, wmd->max_dist, wmd->mapping_mode);
do_map(org_w, numIdx, wmd->min_dist, wmd->max_dist, wmd->falloff_type);
/* Update vgroup. Note we never add nor remove vertices from vgroup here. */
weightvg_update_vg(dvert, defgrp_idx, numIdx, indices, org_w, 0, 0.0f, 0, 0.0f);
@ -522,7 +522,7 @@ static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
ModifierTypeInfo modifierType_WeightVGProximity = {
/* name */ "WeightVGProximity",
/* name */ "VertexWeightProximity",
/* structName */ "WeightVGProximityModifierData",
/* structSize */ sizeof(WeightVGProximityModifierData),
/* type */ eModifierTypeType_Nonconstructive,