Blender V4.3
MOD_weightvgproximity.cc File Reference
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_math_matrix.h"
#include "BLI_math_vector.h"
#include "BLI_rand.h"
#include "BLI_task.h"
#include "BLT_translation.hh"
#include "DNA_color_types.h"
#include "DNA_defaults.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "BKE_bvhutils.hh"
#include "BKE_colortools.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_lib_query.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_wrapper.hh"
#include "BKE_modifier.hh"
#include "BKE_texture.h"
#include "UI_interface.hh"
#include "UI_resources.hh"
#include "BLO_read_write.hh"
#include "RNA_access.hh"
#include "RNA_prototypes.hh"
#include "DEG_depsgraph_build.hh"
#include "DEG_depsgraph_query.hh"
#include "MEM_guardedalloc.h"
#include "MOD_ui_common.hh"
#include "MOD_util.hh"
#include "MOD_weightvg_util.hh"

Go to the source code of this file.

Classes

struct  Vert2GeomData
 
struct  Vert2GeomDataChunk
 

Macros

#define OUT_OF_MEMORY()   (void)printf("WeightVGProximity: Out of memory.\n")
 

Functions

static void vert2geom_task_cb_ex (void *__restrict userdata, const int iter, const TaskParallelTLS *__restrict tls)
 
static void get_vert2geom_distance (int verts_num, const blender::Span< blender::float3 > positions, const int *indices, float *dist_v, float *dist_e, float *dist_f, Mesh *target, const SpaceTransform *loc2trgt)
 
static void get_vert2ob_distance (int verts_num, const blender::Span< blender::float3 > positions, const int *indices, float *dist, Object *ob, Object *obr)
 
static float get_ob2ob_distance (const Object *ob, const Object *obr)
 
static void do_map (Object *ob, float *weights, const int nidx, const float min_d, const float max_d, short mode, const bool do_invert_mapping, CurveMapping *cmap)
 
static void init_data (ModifierData *md)
 
static void free_data (ModifierData *md)
 
static void copy_data (const ModifierData *md, ModifierData *target, const int flag)
 
static void required_data_mask (ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
 
static bool depends_on_time (Scene *, ModifierData *md)
 
static void foreach_ID_link (ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
 
static void foreach_tex_link (ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
 
static void update_depsgraph (ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
 
static bool is_disabled (const Scene *, ModifierData *md, bool)
 
static Meshmodify_mesh (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
 
static void panel_draw (const bContext *, Panel *panel)
 
static void falloff_panel_draw (const bContext *, Panel *panel)
 
static void influence_panel_draw (const bContext *C, Panel *panel)
 
static void panel_register (ARegionType *region_type)
 
static void blend_write (BlendWriter *writer, const ID *, const ModifierData *md)
 
static void blend_read (BlendDataReader *reader, ModifierData *md)
 

Variables

ModifierTypeInfo modifierType_WeightVGProximity
 

Macro Definition Documentation

◆ OUT_OF_MEMORY

#define OUT_OF_MEMORY ( )    (void)printf("WeightVGProximity: Out of memory.\n")

Definition at line 67 of file MOD_weightvgproximity.cc.

Referenced by get_vert2geom_distance().

Function Documentation

◆ blend_read()

static void blend_read ( BlendDataReader * reader,
ModifierData * md )
static

◆ blend_write()

static void blend_write ( BlendWriter * writer,
const ID * ,
const ModifierData * md )
static

◆ copy_data()

static void copy_data ( const ModifierData * md,
ModifierData * target,
const int flag )
static

◆ depends_on_time()

static bool depends_on_time ( Scene * ,
ModifierData * md )
static

◆ do_map()

static void do_map ( Object * ob,
float * weights,
const int nidx,
const float min_d,
const float max_d,
short mode,
const bool do_invert_mapping,
CurveMapping * cmap )
static

Maps distances to weights, with an optional "smoothing" mapping.

Definition at line 249 of file MOD_weightvgproximity.cc.

References BLI_ghashutil_strhash, BLI_rng_free(), BLI_rng_new_srandom(), Object::id, MOD_WVG_MAPPING_NONE, MOD_WVG_MAPPING_RANDOM, ID::name, and weightvg_do_map().

Referenced by modify_mesh().

◆ falloff_panel_draw()

◆ foreach_ID_link()

◆ foreach_tex_link()

static void foreach_tex_link ( ModifierData * md,
Object * ob,
TexWalkFunc walk,
void * user_data )
static

◆ free_data()

static void free_data ( ModifierData * md)
static

◆ get_ob2ob_distance()

static float get_ob2ob_distance ( const Object * ob,
const Object * obr )
static

Returns the real distance between an object and another reference object. Note that it works in final world space (i.e. with constraints etc. applied).

Definition at line 241 of file MOD_weightvgproximity.cc.

References len_v3v3().

Referenced by modify_mesh().

◆ get_vert2geom_distance()

static void get_vert2geom_distance ( int verts_num,
const blender::Span< blender::float3 > positions,
const int * indices,
float * dist_v,
float * dist_e,
float * dist_f,
Mesh * target,
const SpaceTransform * loc2trgt )
static

◆ get_vert2ob_distance()

static void get_vert2ob_distance ( int verts_num,
const blender::Span< blender::float3 > positions,
const int * indices,
float * dist,
Object * ob,
Object * obr )
static

Returns the real distance between a vertex and another reference object. Note that it works in final world space (i.e. with constraints etc. applied).

Definition at line 218 of file MOD_weightvgproximity.cc.

References len_v3v3(), and mul_v3_m4v3().

Referenced by modify_mesh().

◆ influence_panel_draw()

static void influence_panel_draw ( const bContext * C,
Panel * panel )
static

◆ init_data()

◆ is_disabled()

static bool is_disabled ( const Scene * ,
ModifierData * md,
bool  )
static

◆ modify_mesh()

static Mesh * modify_mesh ( ModifierData * md,
const ModifierEvalContext * ctx,
Mesh * mesh )
static

Definition at line 423 of file MOD_weightvgproximity.cc.

References BKE_defvert_find_index(), BKE_id_defgroup_name_index(), BKE_mesh_wrapper_ensure_mdata(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), BLI_assert, BLI_listbase_is_empty(), BLI_SPACE_TRANSFORM_SETUP, CD_MDEFORMVERT, WeightVGProximityModifierData::cmap_curve, CustomData_has_layer(), WeightVGProximityModifierData::defgrp_name, DEG_get_evaluated_scene(), ModifierEvalContext::depsgraph, do_map(), WeightVGProximityModifierData::falloff_type, FLT_MAX, get_ob2ob_distance(), get_vert2geom_distance(), get_vert2ob_distance(), WeightVGProximityModifierData::mask_constant, WeightVGProximityModifierData::mask_defgrp_name, WeightVGProximityModifierData::mask_tex_map_bone, WeightVGProximityModifierData::mask_tex_map_obj, WeightVGProximityModifierData::mask_tex_mapping, WeightVGProximityModifierData::mask_tex_use_channel, WeightVGProximityModifierData::mask_tex_uvlayer_name, WeightVGProximityModifierData::mask_texture, WeightVGProximityModifierData::max_dist, MEM_freeN(), MEM_malloc_arrayN, MEM_SAFE_FREE, mesh, WeightVGProximityModifierData::min_dist, min_ff(), MOD_WVG_PROXIMITY_GEOM_EDGES, MOD_WVG_PROXIMITY_GEOM_FACES, MOD_WVG_PROXIMITY_GEOM_VERTS, MOD_WVG_PROXIMITY_GEOMETRY, MOD_WVG_PROXIMITY_INVERT_FALLOFF, MOD_WVG_PROXIMITY_INVERT_VGROUP_MASK, MOD_WVG_PROXIMITY_OBJECT, MOD_WVG_PROXIMITY_WEIGHTS_NORMALIZE, ModifierData::mode, WeightVGProximityModifierData::modifier, ModifierEvalContext::object, WeightVGProximityModifierData::proximity_flags, WeightVGProximityModifierData::proximity_mode, WeightVGProximityModifierData::proximity_ob_target, TIMEIT_END, TIMEIT_START, MDeformWeight::weight, weightvg_do_mask(), and weightvg_update_vg().

◆ panel_draw()

◆ panel_register()

◆ required_data_mask()

◆ update_depsgraph()

◆ vert2geom_task_cb_ex()

static void vert2geom_task_cb_ex ( void *__restrict userdata,
const int iter,
const TaskParallelTLS *__restrict tls )
static

Variable Documentation

◆ modifierType_WeightVGProximity

ModifierTypeInfo modifierType_WeightVGProximity

Definition at line 732 of file MOD_weightvgproximity.cc.