Blender  V3.3
Classes | Macros | Typedefs | Functions | Variables
MOD_weightvgproximity.c File Reference
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_rand.h"
#include "BLI_task.h"
#include "BLT_translation.h"
#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.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
#include "BKE_deform.h"
#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"
#include "UI_interface.h"
#include "UI_resources.h"
#include "BLO_read_write.h"
#include "RNA_access.h"
#include "RNA_prototypes.h"
#include "DEG_depsgraph_build.h"
#include "DEG_depsgraph_query.h"
#include "MEM_guardedalloc.h"
#include "MOD_modifiertypes.h"
#include "MOD_ui_common.h"
#include "MOD_util.h"
#include "MOD_weightvg_util.h"

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

Typedefs

typedef struct Vert2GeomData Vert2GeomData
 
typedef struct Vert2GeomDataChunk Vert2GeomDataChunk
 

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, float(*v_cos)[3], float *dist_v, float *dist_e, float *dist_f, Mesh *target, const SpaceTransform *loc2trgt)
 
static void get_vert2ob_distance (int verts_num, float(*v_cos)[3], 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 initData (ModifierData *md)
 
static void freeData (ModifierData *md)
 
static void copyData (const ModifierData *md, ModifierData *target, const int flag)
 
static void requiredDataMask (Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
 
static bool dependsOnTime (struct Scene *UNUSED(scene), ModifierData *md)
 
static void foreachIDLink (ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
 
static void foreachTexLink (ModifierData *md, Object *ob, TexWalkFunc walk, void *userData)
 
static void updateDepsgraph (ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
 
static bool isDisabled (const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
 
static Mesh * modifyMesh (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
 
static void panel_draw (const bContext *UNUSED(C), Panel *panel)
 
static void falloff_panel_draw (const bContext *UNUSED(C), Panel *panel)
 
static void influence_panel_draw (const bContext *C, Panel *panel)
 
static void panelRegister (ARegionType *region_type)
 
static void blendWrite (BlendWriter *writer, const ID *UNUSED(id_owner), const ModifierData *md)
 
static void blendRead (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 70 of file MOD_weightvgproximity.c.

Typedef Documentation

◆ Vert2GeomData

typedef struct Vert2GeomData Vert2GeomData

◆ Vert2GeomDataChunk

Data which is localized to each computed chunk (i.e. thread-safe, and with continuous subset of index range).

Function Documentation

◆ blendRead()

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

◆ blendWrite()

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

◆ copyData()

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

◆ dependsOnTime()

static bool dependsOnTime ( struct Scene *  UNUSEDscene,
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 244 of file MOD_weightvgproximity.c.

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

Referenced by modifyMesh().

◆ falloff_panel_draw()

static void falloff_panel_draw ( const bContext *  UNUSEDC,
Panel *  panel 
)
static

◆ foreachIDLink()

static void foreachIDLink ( ModifierData *  md,
Object *  ob,
IDWalkFunc  walk,
void *  userData 
)
static

◆ foreachTexLink()

static void foreachTexLink ( ModifierData *  md,
Object *  ob,
TexWalkFunc  walk,
void *  userData 
)
static

Definition at line 369 of file MOD_weightvgproximity.c.

◆ freeData()

static void freeData ( 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 236 of file MOD_weightvgproximity.c.

References len_v3v3(), and Object::obmat.

Referenced by modifyMesh().

◆ get_vert2geom_distance()

static void get_vert2geom_distance ( int  verts_num,
float(*)  v_cos[3],
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,
float(*)  v_cos[3],
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 217 of file MOD_weightvgproximity.c.

References len_v3v3(), mul_v3_m4v3(), and Object::obmat.

Referenced by modifyMesh().

◆ influence_panel_draw()

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

◆ initData()

static void initData ( ModifierData *  md)
static

◆ isDisabled()

static bool isDisabled ( const struct Scene *  UNUSEDscene,
ModifierData *  md,
bool   UNUSEDuseRenderParams 
)
static

◆ modifyMesh()

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

Definition at line 421 of file MOD_weightvgproximity.c.

References BKE_defvert_find_index(), BKE_id_defgroup_name_index(), BKE_mesh_vert_coords_alloc(), 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, copy_v3_v3(), CustomData_duplicate_referenced_layer(), CustomData_has_layer(), WeightVGProximityModifierData::defgrp_name, DEG_get_evaluated_scene(), ModifierEvalContext::depsgraph, do_map(), Mesh::dvert, WeightVGProximityModifierData::falloff_type, float(), get_ob2ob_distance(), get_vert2geom_distance(), get_vert2ob_distance(), Mesh::id, indices, Mesh_Runtime::is_original, 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, NULL, ModifierEvalContext::object, WeightVGProximityModifierData::proximity_flags, WeightVGProximityModifierData::proximity_mode, WeightVGProximityModifierData::proximity_ob_target, Mesh::runtime, scene, TIMEIT_END, TIMEIT_START, Mesh::totvert, Mesh::vdata, Mesh::vertex_group_names, MDeformWeight::weight, weightvg_do_mask(), and weightvg_update_vg().

◆ panel_draw()

static void panel_draw ( const bContext *  UNUSEDC,
Panel *  panel 
)
static

◆ panelRegister()

static void panelRegister ( ARegionType *  region_type)
static

◆ requiredDataMask()

static void requiredDataMask ( Object *  UNUSEDob,
ModifierData *  md,
CustomData_MeshMasks *  r_cddata_masks 
)
static

◆ updateDepsgraph()

static void updateDepsgraph ( ModifierData *  md,
const ModifierUpdateDepsgraphContext *  ctx 
)
static

◆ 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 739 of file MOD_weightvgproximity.c.