forked from bartvdbraak/blender
minor edits.
- init proximity to 1.0f - min/max proximity dist were not being copied. - minor edits to comments - use ascii chars in a few places.
This commit is contained in:
parent
e4fd20c20c
commit
57411d1c5f
@ -790,16 +790,13 @@ typedef enum {
|
||||
typedef struct WeightVGEditModifierData {
|
||||
ModifierData modifier;
|
||||
|
||||
/* XXX Note: I tried to keep everything logically ordered – provided the
|
||||
* alignment constraints…
|
||||
*/
|
||||
/* Note: I tried to keep everything logically ordered - provided the
|
||||
* alignment constraints... */
|
||||
|
||||
char defgrp_name[32]; /* Name of vertex group to edit. */
|
||||
|
||||
/* Flags (MOD_WVG_EDIT_MAP, MOD_WVG_EDIT_CMAP, MOD_WVG_EDIT_REVERSE_WEIGHTS,
|
||||
* MOD_WVG_EDIT_ADD2VG, MOD_WVG_EDIT_REMFVG, MOD_WVG_EDIT_CLAMP).
|
||||
*/
|
||||
int edit_flags;
|
||||
short edit_flags; /* using MOD_WVG_EDIT_* flags */
|
||||
short pad1;
|
||||
float default_weight; /* Weight for vertices not in vgroup. */
|
||||
|
||||
/* Mapping stuff. */
|
||||
@ -809,7 +806,7 @@ typedef struct WeightVGEditModifierData {
|
||||
float add_threshold, rem_threshold;
|
||||
|
||||
/* Masking options. */
|
||||
float mask_constant; /* The global “influence”, if no vgroup nor tex is used as mask. */
|
||||
float mask_constant; /* The global "influence", if no vgroup nor tex is used as mask. */
|
||||
/* Name of mask vertex group from which to get weight factors. */
|
||||
char mask_defgrp_name[32];
|
||||
|
||||
@ -817,10 +814,9 @@ typedef struct WeightVGEditModifierData {
|
||||
int mask_tex_use_channel; /* Which channel to use as weightf. */
|
||||
struct Tex *mask_texture; /* The texture. */
|
||||
struct Object *mask_tex_map_obj; /* Name of the map object. */
|
||||
/* How to map the texture (using MOD_DISP_MAP_xxx constants). */
|
||||
/* How to map the texture (using MOD_DISP_MAP_* constants). */
|
||||
int mask_tex_mapping;
|
||||
char mask_tex_uvlayer_name[32]; /* Name of the UV layer. */
|
||||
|
||||
/* Padding… */
|
||||
int pad_i1;
|
||||
} WeightVGEditModifierData;
|
||||
@ -843,21 +839,19 @@ typedef struct WeightVGMixModifierData {
|
||||
ModifierData modifier;
|
||||
|
||||
/* XXX Note: I tried to keep everything logically ordered – provided the
|
||||
* alignment constraints…
|
||||
*/
|
||||
* 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 mix_mode; /* How second vgroup’s weights affect first ones */
|
||||
char mix_mode; /* How second vgroups weights affect first ones */
|
||||
char mix_set; /* What vertices to affect. */
|
||||
|
||||
char pad_c1, pad_c2;
|
||||
int pad_i1;
|
||||
char pad[6];
|
||||
|
||||
/* Masking options. */
|
||||
float mask_constant; /* The global “influence”, if no vgroup nor tex is used as mask. */
|
||||
float mask_constant; /* The global "influence", if no vgroup nor tex is used as mask. */
|
||||
/* Name of mask vertex group from which to get weight factors. */
|
||||
char mask_defgrp_name[32];
|
||||
|
||||
@ -867,12 +861,11 @@ typedef struct WeightVGMixModifierData {
|
||||
struct Object *mask_tex_map_obj; /* Name of the map object. */
|
||||
int mask_tex_mapping; /* How to map the texture! */
|
||||
char mask_tex_uvlayer_name[32]; /* Name of the UV layer. */
|
||||
|
||||
/* Padding… */
|
||||
int pad_i2;
|
||||
int pad2;
|
||||
} WeightVGMixModifierData;
|
||||
|
||||
/* How second vgroup’s weights affect first ones. */
|
||||
/* How second vgroup's weights affect first ones. */
|
||||
#define MOD_WVG_MIX_SET 1 /* Second weights replace weights. */
|
||||
#define MOD_WVG_MIX_ADD 2 /* Second weights are added to weights. */
|
||||
#define MOD_WVG_MIX_SUB 3 /* Second weights are subtracted from weights. */
|
||||
@ -891,9 +884,8 @@ typedef struct WeightVGMixModifierData {
|
||||
typedef struct WeightVGProximityModifierData {
|
||||
ModifierData modifier;
|
||||
|
||||
/* XXX Note: I tried to keep everything logically ordered – provided the
|
||||
* alignment constraints…
|
||||
*/
|
||||
/* Note: I tried to keep everything logically ordered - provided the
|
||||
* alignment constraints... */
|
||||
|
||||
char defgrp_name[32]; /* Name of vertex group to modify/weight. */
|
||||
|
||||
@ -901,11 +893,11 @@ typedef struct WeightVGProximityModifierData {
|
||||
int proximity_mode;
|
||||
int proximity_flags;
|
||||
|
||||
/* Target object from which to calculate vertices’ distances. */
|
||||
/* Target object from which to calculate vertices distances. */
|
||||
struct Object *proximity_ob_target;
|
||||
|
||||
/* Masking options. */
|
||||
float mask_constant; /* The global “influence”, if no vgroup nor tex is used as mask. */
|
||||
float mask_constant; /* The global "influence", if no vgroup nor tex is used as mask. */
|
||||
/* Name of mask vertex group from which to get weight factors. */
|
||||
char mask_defgrp_name[32];
|
||||
|
||||
@ -918,8 +910,8 @@ typedef struct WeightVGProximityModifierData {
|
||||
|
||||
float min_dist, max_dist; /* Distances mapping to 0.0/1.0 weights. */
|
||||
|
||||
/* Padding… */
|
||||
int pad_i2;
|
||||
/* Padding... */
|
||||
int pad;
|
||||
} WeightVGProximityModifierData;
|
||||
|
||||
/* Modes of proximity weighting. */
|
||||
|
@ -2642,7 +2642,7 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
|
||||
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_ui_text(prop, "Add Threshold", "Lower bound for a vertex’s weight "
|
||||
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");
|
||||
|
||||
@ -2650,7 +2650,7 @@ static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
|
||||
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_ui_text(prop, "Rem Threshold", "Upper bound for a vertex’s weight "
|
||||
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");
|
||||
|
||||
@ -2746,7 +2746,7 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
|
||||
{MOD_WVG_PROXIMITY_OBJECT, "OBJECT", 0, "Object Distance",
|
||||
"Use distance between affected and target objects."},
|
||||
{MOD_WVG_PROXIMITY_GEOMETRY, "GEOMETRY", 0, "Geometry Distance",
|
||||
"Use distance between affected object’s vertices and target object, or target object’s geometry."},
|
||||
"Use distance between affected object's vertices and target object, or target object's geometry."},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem proximity_geometry_items[] = {
|
||||
@ -2760,7 +2760,7 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
|
||||
|
||||
srna= RNA_def_struct(brna, "WeightVGProximityModifier", "Modifier");
|
||||
RNA_def_struct_ui_text(srna, "WeightVG Proximity Modifier",
|
||||
"Set the weights of vertices in a group from a target object’s "
|
||||
"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);
|
||||
@ -2780,12 +2780,12 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
|
||||
RNA_def_property_enum_sdna(prop, NULL, "proximity_flags");
|
||||
RNA_def_property_enum_items(prop, proximity_geometry_items);
|
||||
RNA_def_property_flag(prop, PROP_ENUM_FLAG); /* important to run before default set */
|
||||
RNA_def_property_ui_text(prop, "Proximity Geometry", "Use shortest distance to target object’s geometry as weight");
|
||||
RNA_def_property_ui_text(prop, "Proximity Geometry", "Use shortest distance to target object's geometry as weight");
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||
|
||||
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "proximity_ob_target");
|
||||
RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices’ distances from.");
|
||||
RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices distances from.");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
|
||||
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
|
||||
|
||||
|
@ -27,8 +27,8 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX I’d like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn’t figure a way to do this…
|
||||
* XXX I'd like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn't figure a way to do this…
|
||||
* Maybe this will need changes in mesh_calc_modifiers (DerivedMesh.c)?
|
||||
* Or the WeightPaint mode code itself?
|
||||
*/
|
||||
@ -61,9 +61,10 @@
|
||||
* XXX The standard “factor” value is assumed in [0.0, 1.0] range. Else, weird results might appear.
|
||||
*/
|
||||
void weightvg_do_mask(int num, int *indices, float *org_w, float *new_w, Object *ob,
|
||||
DerivedMesh *dm, float fact, const char *defgrp_name, Tex *texture,
|
||||
DerivedMesh *dm, float fact, const char defgrp_name[32], Tex *texture,
|
||||
int tex_use_channel, int tex_mapping, Object *tex_map_object,
|
||||
const char *tex_uvlayer_name) {
|
||||
const char *tex_uvlayer_name)
|
||||
{
|
||||
int ref_didx;
|
||||
MDeformVert *dvert = NULL;
|
||||
int i;
|
||||
@ -80,9 +81,9 @@ void weightvg_do_mask(int num, int *indices, float *org_w, float *new_w, Object
|
||||
float (*v_co)[3];
|
||||
|
||||
/* Use new generic get_texture_coords, but do not modify our DNA struct for it…
|
||||
* XXX Why use a ModifierData stuff here ? Why not a simple, generic struct for parameters ?
|
||||
* What e.g. if a modifier wants to use several textures ?
|
||||
* Why use only v_co, and not MVert (or both) ?
|
||||
* XXX Why use a ModifierData stuff here ? Why not a simple, generic struct for parameters ?
|
||||
* What e.g. if a modifier wants to use several textures ?
|
||||
* Why use only v_co, and not MVert (or both) ?
|
||||
*/
|
||||
t_map.texture = texture;
|
||||
t_map.map_object = tex_map_object;
|
||||
@ -180,9 +181,10 @@ void weightvg_do_mask(int num, int *indices, float *org_w, float *new_w, Object
|
||||
* If indices is not NULL, it must be a table of same length as weights, mapping to the real
|
||||
* vertex index (in case the weight table does not cover the whole vertices...).
|
||||
*/
|
||||
void weightvg_update_vg(MDeformVert *dvert, int defgrp_idx, int num, int *indices,
|
||||
float *weights, int do_add, float add_thresh, int do_rem,
|
||||
float rem_thresh){
|
||||
void weightvg_update_vg(MDeformVert *dvert, int defgrp_idx, int num,
|
||||
const int *indices, const float *weights, int do_add,
|
||||
float add_thresh, int do_rem, float rem_thresh)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
@ -195,8 +197,8 @@ void weightvg_update_vg(MDeformVert *dvert, int defgrp_idx, int num, int *indice
|
||||
/* Never allow weights out of [0.0, 1.0] range. */
|
||||
CLAMP(w, 0.0, 1.0);
|
||||
|
||||
/* Let’s first check to see if this vert is already in the weight group – if so
|
||||
* let’s update it, or remove it if needed.
|
||||
/* Let's first check to see if this vert is already in the weight group – if so
|
||||
* let's update it, or remove it if needed.
|
||||
*/
|
||||
for (j = 0; j < dv->totweight; j++) {
|
||||
/* If this weight corresponds to the deform group, update the value or,
|
||||
@ -233,7 +235,7 @@ void weightvg_update_vg(MDeformVert *dvert, int defgrp_idx, int num, int *indice
|
||||
}
|
||||
}
|
||||
|
||||
/* If the vert wasn’t in the deform group, add it if needed!
|
||||
/* If the vert wasn't in the deform group, add it if needed!
|
||||
*/
|
||||
if (add2vg && w > add_thresh) {
|
||||
newdw = MEM_callocN(sizeof(MDeformWeight)*(dv->totweight+1), "WeightVGEdit Modifier, deformWeight");
|
||||
|
@ -44,8 +44,8 @@ struct Object;
|
||||
struct MappingInfoModifierData;*/
|
||||
|
||||
/*
|
||||
* XXX I’d like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn’t figure a way to do this…
|
||||
* XXX I'd like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn't figure a way to do this…
|
||||
* Maybe this will need changes in mesh_calc_modifiers (DerivedMesh.c)?
|
||||
* Or the WeightPaint mode code itself?
|
||||
*/
|
||||
@ -68,7 +68,7 @@ struct MappingInfoModifierData;*/
|
||||
* XXX The standard “factor” value is assumed in [0.0, 1.0] range. Else, weird results might appear.
|
||||
*/
|
||||
void weightvg_do_mask(int num, int *indices, float *org_w, float *new_w, Object *ob,
|
||||
struct DerivedMesh *dm, float fact, const char *defgrp_name, Tex *texture,
|
||||
struct DerivedMesh *dm, float fact, const char defgrp_name[32], Tex *texture,
|
||||
int tex_use_channel, int tex_mapping, Object *tex_map_object,
|
||||
const char *tex_uvlayer_name);
|
||||
|
||||
@ -76,7 +76,8 @@ void weightvg_do_mask(int num, int *indices, float *org_w, float *new_w, Object
|
||||
* If indices is not NULL, it must be a table of same length as weights, mapping to the real
|
||||
* vertex index (in case the weight table does not cover the whole vertices...).
|
||||
*/
|
||||
void weightvg_update_vg(MDeformVert *dvert, int defgrp_idx, int num, int *indices, float *weights,
|
||||
int do_add, float add_thresh, int do_rem, float rem_thresh);
|
||||
void weightvg_update_vg(MDeformVert *dvert, int defgrp_idx, int num,
|
||||
const int *indices, const float *weights, int do_add,
|
||||
float add_thresh, int do_rem, float rem_thresh);
|
||||
|
||||
#endif /* MOD_WEIGHTVG_UTIL_H */
|
||||
|
@ -27,8 +27,8 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX I’d like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn’t figure a way to do this…
|
||||
* XXX I'd like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn't figure a way to do this…
|
||||
* Maybe this will need changes in mesh_calc_modifiers (DerivedMesh.c)?
|
||||
* Or the WeightPaint mode code itself?
|
||||
*/
|
||||
@ -102,8 +102,7 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
twmd->mask_tex_use_channel = wmd->mask_tex_use_channel;
|
||||
twmd->mask_tex_mapping = wmd->mask_tex_mapping;
|
||||
twmd->mask_tex_map_obj = wmd->mask_tex_map_obj;
|
||||
BLI_strncpy(twmd->mask_tex_uvlayer_name, wmd->mask_tex_uvlayer_name,
|
||||
sizeof(twmd->mask_tex_uvlayer_name));
|
||||
BLI_strncpy(twmd->mask_tex_uvlayer_name, wmd->mask_tex_uvlayer_name, sizeof(twmd->mask_tex_uvlayer_name));
|
||||
}
|
||||
|
||||
static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
||||
@ -232,7 +231,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
/* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
|
||||
if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
|
||||
/* XXX Seems to create problems with weightpaint mode???
|
||||
* I’m missing something here, I guess…
|
||||
* I'm missing something here, I guess…
|
||||
*/
|
||||
// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
|
||||
ret = CDDM_copy(dm);
|
||||
|
@ -27,8 +27,8 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX I’d like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn’t figure a way to do this…
|
||||
* XXX I'd like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn't figure a way to do this…
|
||||
* Maybe this will need changes in mesh_calc_modifiers (DerivedMesh.c)?
|
||||
* Or the WeightPaint mode code itself?
|
||||
*/
|
||||
@ -61,7 +61,7 @@ static float mix_weight(float weight, float weight2, char mix_mode)
|
||||
{
|
||||
#if 0
|
||||
/*
|
||||
* XXX Don’t know why, but the switch version takes many CPU time,
|
||||
* XXX Don't know why, but the switch version takes many CPU time,
|
||||
* and produces lag in realtime playback…
|
||||
*/
|
||||
switch (mix_mode)
|
||||
@ -146,8 +146,7 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
twmd->mask_tex_use_channel = wmd->mask_tex_use_channel;
|
||||
twmd->mask_tex_mapping = wmd->mask_tex_mapping;
|
||||
twmd->mask_tex_map_obj = wmd->mask_tex_map_obj;
|
||||
BLI_strncpy(twmd->mask_tex_uvlayer_name, wmd->mask_tex_uvlayer_name,
|
||||
sizeof(twmd->mask_tex_uvlayer_name));
|
||||
BLI_strncpy(twmd->mask_tex_uvlayer_name, wmd->mask_tex_uvlayer_name, sizeof(twmd->mask_tex_uvlayer_name));
|
||||
}
|
||||
|
||||
static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
||||
@ -279,7 +278,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
/* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
|
||||
if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
|
||||
/* XXX Seems to create problems with weightpaint mode???
|
||||
* I’m missing something here, I guess…
|
||||
* I'm missing something here, I guess…
|
||||
*/
|
||||
// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
|
||||
ret = CDDM_copy(dm);
|
||||
|
@ -27,8 +27,8 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX I’d like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn’t figure a way to do this…
|
||||
* XXX I'd like to make modified weights visible in WeightPaint mode,
|
||||
* but couldn't figure a way to do this…
|
||||
* Maybe this will need changes in mesh_calc_modifiers (DerivedMesh.c)?
|
||||
* Or the WeightPaint mode code itself?
|
||||
*/
|
||||
@ -234,6 +234,7 @@ static void initData(ModifierData *md)
|
||||
wmd->mask_constant = 1.0f;
|
||||
wmd->mask_tex_use_channel = MOD_WVG_MASK_TEX_USE_INT; /* Use intensity by default. */
|
||||
wmd->mask_tex_mapping = MOD_DISP_MAP_LOCAL;
|
||||
wmd->max_dist = 1.0f; /* vert arbitrary distance, but don't use 0 */
|
||||
}
|
||||
|
||||
static void copyData(ModifierData *md, ModifierData *target)
|
||||
@ -252,8 +253,9 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
twmd->mask_tex_use_channel = wmd->mask_tex_use_channel;
|
||||
twmd->mask_tex_mapping = wmd->mask_tex_mapping;
|
||||
twmd->mask_tex_map_obj = wmd->mask_tex_map_obj;
|
||||
BLI_strncpy(twmd->mask_tex_uvlayer_name, wmd->mask_tex_uvlayer_name,
|
||||
sizeof(twmd->mask_tex_uvlayer_name));
|
||||
BLI_strncpy(twmd->mask_tex_uvlayer_name, wmd->mask_tex_uvlayer_name, sizeof(twmd->mask_tex_uvlayer_name));
|
||||
twmd->min_dist = wmd->min_dist;
|
||||
twmd->max_dist = wmd->max_dist;
|
||||
}
|
||||
|
||||
static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
||||
@ -396,7 +398,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
/* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
|
||||
if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
|
||||
/* XXX Seems to create problems with weightpaint mode???
|
||||
* I’m missing something here, I guess…
|
||||
* I'm missing something here, I guess…
|
||||
*/
|
||||
// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
|
||||
ret = CDDM_copy(dm);
|
||||
|
Loading…
Reference in New Issue
Block a user