diff options
Diffstat (limited to 'source/blender/modifiers/intern/MOD_weightvgproximity.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_weightvgproximity.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index 994f2c04921..9b21c77268e 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -31,6 +31,7 @@ #include "BLT_translation.h" +#include "DNA_defaults.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" #include "DNA_modifier_types.h" @@ -45,6 +46,7 @@ #include "BKE_lib_id.h" #include "BKE_lib_query.h" #include "BKE_mesh.h" +#include "BKE_mesh_wrapper.h" #include "BKE_modifier.h" #include "BKE_screen.h" #include "BKE_texture.h" /* Texture masking. */ @@ -315,15 +317,9 @@ static void initData(ModifierData *md) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; - wmd->proximity_mode = MOD_WVG_PROXIMITY_OBJECT; - wmd->proximity_flags = MOD_WVG_PROXIMITY_GEOM_VERTS; + BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(wmd, modifier)); - 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. */ - wmd->mask_tex_mapping = MOD_DISP_MAP_LOCAL; - wmd->max_dist = 1.0f; /* vert arbitrary distance, but don't use 0 */ + MEMCPY_STRUCT_AFTER(wmd, DNA_struct_default_get(WeightVGProximityModifierData), modifier); } static void requiredDataMask(Object *UNUSED(ob), @@ -353,20 +349,13 @@ static bool dependsOnTime(ModifierData *md) return 0; } -static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData) -{ - WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; - walk(userData, ob, &wmd->proximity_ob_target, IDWALK_CB_NOP); - walk(userData, ob, &wmd->mask_tex_map_obj, IDWALK_CB_NOP); -} - static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData) { WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md; walk(userData, ob, (ID **)&wmd->mask_texture, IDWALK_CB_USER); - - foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData); + walk(userData, ob, (ID **)&wmd->proximity_ob_target, IDWALK_CB_NOP); + walk(userData, ob, (ID **)&wmd->mask_tex_map_obj, IDWALK_CB_NOP); } static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void *userData) @@ -552,6 +541,11 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * /* We must check that we do have a valid target_mesh! */ if (target_mesh != NULL) { + + /* TODO: edit-mode versions of the BVH lookup functions are available so it could be + * avoided. */ + BKE_mesh_wrapper_ensure_mdata(target_mesh); + SpaceTransform loc2trgt; float *dists_v = use_trgt_verts ? MEM_malloc_arrayN(numIdx, sizeof(float), "dists_v") : NULL; @@ -713,9 +707,11 @@ ModifierTypeInfo modifierType_WeightVGProximity = { /* name */ "VertexWeightProximity", /* structName */ "WeightVGProximityModifierData", /* structSize */ sizeof(WeightVGProximityModifierData), + /* srna */ &RNA_VertexWeightProximityModifier, /* type */ eModifierTypeType_NonGeometrical, /* flags */ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_SupportsMapping | eModifierTypeFlag_SupportsEditmode | eModifierTypeFlag_UsesPreview, + /* icon */ ICON_MOD_VERTEX_WEIGHT, /* copyData */ BKE_modifier_copydata_generic, @@ -735,7 +731,6 @@ ModifierTypeInfo modifierType_WeightVGProximity = { /* updateDepsgraph */ updateDepsgraph, /* dependsOnTime */ dependsOnTime, /* dependsOnNormals */ NULL, - /* foreachObjectLink */ foreachObjectLink, /* foreachIDLink */ foreachIDLink, /* foreachTexLink */ foreachTexLink, /* freeRuntimeData */ NULL, |