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 MeshmodifyMesh (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.