Blender
V3.3
|
#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 |
Definition at line 70 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 729 of file MOD_weightvgproximity.c.
References BKE_curvemapping_blend_read(), BLO_read_data_address, and WeightVGProximityModifierData::cmap_curve.
|
static |
Definition at line 718 of file MOD_weightvgproximity.c.
References BKE_curvemapping_blend_write(), BLO_write_struct, and WeightVGProximityModifierData::cmap_curve.
|
static |
Definition at line 323 of file MOD_weightvgproximity.c.
References BKE_curvemapping_copy(), BKE_modifier_copydata_generic(), and WeightVGProximityModifierData::cmap_curve.
|
static |
Definition at line 350 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 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().
Definition at line 677 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 360 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 369 of file MOD_weightvgproximity.c.
|
static |
Definition at line 317 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 236 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 146 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 217 of file MOD_weightvgproximity.c.
References len_v3v3(), mul_v3_m4v3(), and Object::obmat.
Referenced by modifyMesh().
Definition at line 698 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 305 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 408 of file MOD_weightvgproximity.c.
References WeightVGProximityModifierData::defgrp_name, NULL, and WeightVGProximityModifierData::proximity_ob_target.
|
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().
Definition at line 649 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 708 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 333 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 374 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 97 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 739 of file MOD_weightvgproximity.c.