|
Blender
V2.93
|
#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 "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 numVerts, float(*v_cos)[3], float *dist_v, float *dist_e, float *dist_f, Mesh *target, const SpaceTransform *loc2trgt) |
| static void | get_vert2ob_distance (int numVerts, 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 (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 ModifierData *md) |
| static void | blendRead (BlendDataReader *reader, ModifierData *md) |
Variables | |
| ModifierTypeInfo | modifierType_WeightVGProximity |
| #define OUT_OF_MEMORY | ( | ) | ((void)printf("WeightVGProximity: Out of memory.\n")) |
Definition at line 85 of file MOD_weightvgproximity.c.
| typedef struct Vert2GeomData Vert2GeomData |
| typedef struct Vert2GeomDataChunk Vert2GeomDataChunk |
Data which is localized to each computed chunk (i.e. thread-safe, and with continuous subset of index range).
|
static |
Definition at line 742 of file MOD_weightvgproximity.c.
References BKE_curvemapping_blend_read(), BLO_read_data_address, and WeightVGProximityModifierData::cmap_curve.
|
static |
Definition at line 733 of file MOD_weightvgproximity.c.
References BKE_curvemapping_blend_write(), and WeightVGProximityModifierData::cmap_curve.
|
static |
Definition at line 338 of file MOD_weightvgproximity.c.
References BKE_curvemapping_copy(), BKE_modifier_copydata_generic(), and WeightVGProximityModifierData::cmap_curve.
|
static |
Definition at line 365 of file MOD_weightvgproximity.c.
References BKE_texture_dependsOnTime(), and WeightVGProximityModifierData::mask_texture.
|
static |
Maps distances to weights, with an optional "smoothing" mapping.
Definition at line 259 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().
Definition at line 692 of file MOD_weightvgproximity.c.
References IFACE_, Panel::layout, MOD_WVG_MAPPING_CURVE, modifier_panel_end(), modifier_panel_get_property_pointers(), ptr, RNA_enum_get(), uiItemR(), uiLayoutRow(), uiLayoutSetPropSep(), and uiTemplateCurveMapping().
Referenced by panelRegister().
|
static |
Definition at line 375 of file MOD_weightvgproximity.c.
References IDWALK_CB_NOP, IDWALK_CB_USER, WeightVGProximityModifierData::mask_tex_map_obj, WeightVGProximityModifierData::mask_texture, and WeightVGProximityModifierData::proximity_ob_target.
|
static |
Definition at line 384 of file MOD_weightvgproximity.c.
|
static |
Definition at line 332 of file MOD_weightvgproximity.c.
References BKE_curvemapping_free(), and WeightVGProximityModifierData::cmap_curve.
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 251 of file MOD_weightvgproximity.c.
References len_v3v3(), and Object::obmat.
Referenced by modifyMesh().
|
static |
Find nearest vertex and/or edge and/or face, for each vertex (adapted from shrinkwrap.c).
Definition at line 161 of file MOD_weightvgproximity.c.
References BKE_bvhtree_from_mesh_get(), BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), BVHTREE_FROM_EDGES, BVHTREE_FROM_LOOPTRI, BVHTREE_FROM_VERTS, data, free_bvhtree_from_mesh(), NULL, OUT_OF_MEMORY, BVHTreeFromMesh::tree, TaskParallelSettings::use_threading, TaskParallelSettings::userdata_chunk, TaskParallelSettings::userdata_chunk_size, and vert2geom_task_cb_ex().
Referenced by modifyMesh().
|
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 232 of file MOD_weightvgproximity.c.
References len_v3v3(), mul_v3_m4v3(), and Object::obmat.
Referenced by modifyMesh().
Definition at line 713 of file MOD_weightvgproximity.c.
References C, Panel::layout, modifier_panel_get_property_pointers(), ptr, and weightvg_ui_common().
Referenced by panelRegister().
|
static |
Definition at line 320 of file MOD_weightvgproximity.c.
References BKE_curvemapping_add(), BKE_curvemapping_init(), BLI_assert, WeightVGProximityModifierData::cmap_curve, DNA_struct_default_get, MEMCMP_STRUCT_AFTER_IS_ZERO, and MEMCPY_STRUCT_AFTER.
|
static |
Definition at line 423 of file MOD_weightvgproximity.c.
References WeightVGProximityModifierData::defgrp_name, NULL, and WeightVGProximityModifierData::proximity_ob_target.
|
static |
Definition at line 436 of file MOD_weightvgproximity.c.
References BKE_defvert_find_index(), BKE_mesh_vert_coords_alloc(), BKE_mesh_wrapper_ensure_mdata(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), BKE_object_defgroup_name_index(), 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(), Object::defbase, 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(), 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, MDeformWeight::weight, weightvg_do_mask(), and weightvg_update_vg().
Definition at line 664 of file MOD_weightvgproximity.c.
References col, IFACE_, Panel::layout, MOD_WVG_PROXIMITY_GEOMETRY, modifier_panel_get_property_pointers(), NULL, ptr, RNA_enum_get(), UI_ITEM_R_EXPAND, uiItemPointerR(), uiItemR(), uiItemS(), uiLayoutColumn(), and uiLayoutSetPropSep().
Referenced by panelRegister().
|
static |
Definition at line 723 of file MOD_weightvgproximity.c.
References eModifierType_WeightVGProximity, falloff_panel_draw(), influence_panel_draw(), modifier_panel_register(), modifier_subpanel_register(), NULL, and panel_draw().
|
static |
Definition at line 348 of file MOD_weightvgproximity.c.
References CD_MASK_MDEFORMVERT, CD_MASK_MTFACE, CustomData_MeshMasks::fmask, WeightVGProximityModifierData::mask_tex_mapping, MOD_DISP_MAP_UV, and CustomData_MeshMasks::vmask.
|
static |
Definition at line 389 of file MOD_weightvgproximity.c.
References Object::data, DEG_add_generic_id_relation(), DEG_add_modifier_to_transform_relation(), DEG_add_object_relation(), DEG_OB_COMP_GEOMETRY, DEG_OB_COMP_TRANSFORM, Tex::id, WeightVGProximityModifierData::mask_tex_map_bone, WeightVGProximityModifierData::mask_tex_map_obj, WeightVGProximityModifierData::mask_tex_mapping, WeightVGProximityModifierData::mask_texture, MOD_depsgraph_update_object_bone_relation(), MOD_DISP_MAP_GLOBAL, MOD_DISP_MAP_OBJECT, MOD_WVG_PROXIMITY_GEOMETRY, ModifierUpdateDepsgraphContext::node, NULL, WeightVGProximityModifierData::proximity_mode, and WeightVGProximityModifierData::proximity_ob_target.
|
static |
Callback used by BLI_task 'for loop' helper.
Definition at line 112 of file MOD_weightvgproximity.c.
References ARRAY_SIZE, BLI_bvhtree_find_nearest(), BLI_space_transform_apply(), BVHTreeNearest::co, copy_v3_v3(), data, BVHTreeNearest::dist_sq, BVHTreeNearest::index, Vert2GeomDataChunk::is_init, Vert2GeomDataChunk::last_hit_co, len_squared_v3v3(), and sqrtf.
Referenced by get_vert2geom_distance().
| ModifierTypeInfo modifierType_WeightVGProximity |
Definition at line 752 of file MOD_weightvgproximity.c.