Blender V5.0
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 "DNA_texture_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_interface_layout.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()

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 ( )
Value:
(void)printf("WeightVGProximity: Out of memory.\n")
#define printf(...)

Definition at line 69 of file MOD_weightvgproximity.cc.

Referenced by get_vert2geom_distance().

Function Documentation

◆ blend_read()

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

◆ blend_write()

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

◆ copy_data()

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

◆ depends_on_time()

bool depends_on_time ( Scene * ,
ModifierData * md )
static

◆ do_map()

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 241 of file MOD_weightvgproximity.cc.

References BLI_ghashutil_strhash, BLI_rng_free(), BLI_rng_new_srandom(), i, 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()

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

◆ free_data()

void free_data ( ModifierData * md)
static

◆ get_ob2ob_distance()

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 233 of file MOD_weightvgproximity.cc.

References len_v3v3().

Referenced by modify_mesh().

◆ get_vert2geom_distance()

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()

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 210 of file MOD_weightvgproximity.cc.

References i, indices, len_v3v3(), and mul_v3_m4v3().

Referenced by modify_mesh().

◆ influence_panel_draw()

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

◆ init_data()

◆ is_disabled()

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

◆ modify_mesh()

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

Definition at line 415 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, WeightVGProximityModifierData::cmap_curve, 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(), i, Mesh::id, indices, 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, 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, Mesh::runtime, TIMEIT_END, TIMEIT_START, Mesh::vertex_group_names, Mesh::verts_num, MDeformWeight::weight, weightvg_do_mask(), and weightvg_update_vg().

◆ panel_draw()

◆ panel_register()

◆ required_data_mask()

◆ update_depsgraph()

◆ vert2geom_task_cb_ex()

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 719 of file MOD_weightvgproximity.cc.