|
Blender V4.3
|
#include "BLI_math_geom.h"#include "BLI_math_matrix.h"#include "BLI_task.h"#include "BLT_translation.hh"#include "DNA_defaults.h"#include "DNA_mesh_types.h"#include "DNA_meshdata_types.h"#include "DNA_object_types.h"#include "DNA_screen_types.h"#include "BKE_bvhutils.hh"#include "BKE_deform.hh"#include "BKE_lib_query.hh"#include "BKE_mesh.hh"#include "BKE_mesh_wrapper.hh"#include "BKE_modifier.hh"#include "UI_interface.hh"#include "UI_resources.hh"#include "BLO_read_write.hh"#include "RNA_access.hh"#include "RNA_prototypes.hh"#include "DEG_depsgraph.hh"#include "MEM_guardedalloc.h"#include "MOD_ui_common.hh"#include "MOD_util.hh"Go to the source code of this file.
Classes | |
| struct | SDefAdjacency |
| struct | SDefAdjacencyArray |
| struct | SDefEdgePolys |
| struct | SDefBindCalcData |
| struct | SDefBindPoly |
| struct | SDefBindWeightData |
| struct | SDefDeformData |
Enumerations | |
| enum | { MOD_SDEF_BIND_RESULT_SUCCESS = 1 , MOD_SDEF_BIND_RESULT_GENERIC_ERR = 0 , MOD_SDEF_BIND_RESULT_MEM_ERR = -1 , MOD_SDEF_BIND_RESULT_NONMANY_ERR = -2 , MOD_SDEF_BIND_RESULT_CONCAVE_ERR = -3 , MOD_SDEF_BIND_RESULT_OVERLAP_ERR = -4 } |
| enum | { MOD_SDEF_INFINITE_WEIGHT_ANGULAR = (1 << 0) , MOD_SDEF_INFINITE_WEIGHT_DIST_PROJ = (1 << 1) , MOD_SDEF_INFINITE_WEIGHT_DIST = (1 << 2) } |
Functions | |
| static void | init_data (ModifierData *md) |
| static void | required_data_mask (ModifierData *md, CustomData_MeshMasks *r_cddata_masks) |
| static void | free_data (ModifierData *md) |
| static void | copy_data (const ModifierData *md, ModifierData *target, const int flag) |
| static void | foreach_ID_link (ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data) |
| static void | update_depsgraph (ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) |
| static void | freeAdjacencyMap (SDefAdjacencyArray *const vert_edges, SDefAdjacency *const adj_ref, SDefEdgePolys *const edge_polys) |
| static int | buildAdjacencyMap (const blender::OffsetIndices< int > polys, const blender::Span< blender::int2 > edges, const blender::Span< int > corner_edges, SDefAdjacencyArray *const vert_edges, SDefAdjacency *adj, SDefEdgePolys *const edge_polys) |
| BLI_INLINE void | sortPolyVertsEdge (uint *indices, const int *const corner_verts, const int *const corner_edges, const uint edge, const uint num) |
| BLI_INLINE void | sortPolyVertsTri (uint *indices, const int *const corner_verts, const uint loopstart, const uint num) |
| BLI_INLINE uint | nearestVert (SDefBindCalcData *const data, const float point_co[3]) |
| BLI_INLINE int | isPolyValid (const float coords[][2], const uint nr) |
| static void | freeBindData (SDefBindWeightData *const bwdata) |
| BLI_INLINE float | computeAngularWeight (const float point_angle, const float edgemid_angle) |
| BLI_INLINE SDefBindWeightData * | computeBindWeights (SDefBindCalcData *const data, const float point_co[3]) |
| BLI_INLINE float | computeNormalDisplacement (const float point_co[3], const float point_co_proj[3], const float normal[3]) |
| static void | bindVert (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict) |
| static void | compactSparseBinds (SurfaceDeformModifierData *smd) |
| static bool | surfacedeformBind (Object *ob, SurfaceDeformModifierData *smd_orig, SurfaceDeformModifierData *smd_eval, float(*vertexCos)[3], uint verts_num, uint target_faces_num, uint target_verts_num, Mesh *target, Mesh *mesh) |
| static void | deformVert (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict) |
| static void | surfacedeformModifier_do (ModifierData *md, const ModifierEvalContext *ctx, float(*vertexCos)[3], uint verts_num, Object *ob, Mesh *mesh) |
| static void | deform_verts (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions) |
| static bool | is_disabled (const Scene *, ModifierData *md, bool) |
| static void | panel_draw (const bContext *, Panel *panel) |
| static void | panel_register (ARegionType *region_type) |
| static void | blend_write (BlendWriter *writer, const ID *id_owner, const ModifierData *md) |
| static void | blend_read (BlendDataReader *reader, ModifierData *md) |
Variables | |
| ModifierTypeInfo | modifierType_SurfaceDeform |
| anonymous enum |
| Enumerator | |
|---|---|
| MOD_SDEF_BIND_RESULT_SUCCESS | |
| MOD_SDEF_BIND_RESULT_GENERIC_ERR | |
| MOD_SDEF_BIND_RESULT_MEM_ERR | |
| MOD_SDEF_BIND_RESULT_NONMANY_ERR | |
| MOD_SDEF_BIND_RESULT_CONCAVE_ERR | |
| MOD_SDEF_BIND_RESULT_OVERLAP_ERR | |
Definition at line 176 of file MOD_surfacedeform.cc.
| anonymous enum |
| Enumerator | |
|---|---|
| MOD_SDEF_INFINITE_WEIGHT_ANGULAR | |
| MOD_SDEF_INFINITE_WEIGHT_DIST_PROJ | |
| MOD_SDEF_INFINITE_WEIGHT_DIST | |
Definition at line 186 of file MOD_surfacedeform.cc.
|
static |
Definition at line 944 of file MOD_surfacedeform.cc.
References add_v3_v3v3(), SDefBindWeightData::bind_polys, SDefVert::binds, SDefBindWeightData::binds_num, SDefVert::binds_num, BKE_defvert_find_weight(), BLI_assert, SDefBindPoly::centroid, computeBindWeights(), computeNormalDisplacement(), SDefBindPoly::coords, SDefBindPoly::coords_v2, copy_v3_v3(), SDefBindPoly::dominant_angle_weight, SDefBindPoly::dominant_edge, SDefBindPoly::edge_inds, SDefBindPoly::edge_vert_inds, freeBindData(), SDefBind::influence, SDefBindPoly::inside, interp_weights_poly_v2(), interp_weights_tri_v3(), isect_line_plane_v3(), SDefBindPoly::loopstart, madd_v3_v3fl(), MEM_calloc_arrayN, MEM_malloc_arrayN, mid_v3_v3v3v3(), MOD_SDEF_BIND_RESULT_MEM_ERR, MOD_SDEF_BIND_RESULT_SUCCESS, MOD_SDEF_MODE_CENTROID, MOD_SDEF_MODE_CORNER_TRIS, MOD_SDEF_MODE_NGONS, SDefBind::mode, norm(), SDefBindPoly::normal, SDefBind::normal_dist, normal_tri_v3(), SDefBindPoly::point_v2, sortPolyVertsEdge(), sortPolyVertsTri(), v2, SDefBind::vert_inds, SDefBind::vert_weights, SDefVert::vertex_idx, SDefBind::verts_num, SDefBindPoly::verts_num, SDefBindPoly::weight, and zero_v3().
Referenced by surfacedeformBind().
|
static |
Definition at line 1680 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::bind_verts_num, SDefVert::binds, SDefVert::binds_num, BLO_read_float3_array(), BLO_read_float_array(), BLO_read_struct_array, BLO_read_uint32_array(), ELEM, MOD_SDEF_MODE_CENTROID, MOD_SDEF_MODE_CORNER_TRIS, SDefBind::mode, SDefBind::vert_inds, SDefBind::vert_weights, SurfaceDeformModifierData::verts, and SDefBind::verts_num.
|
static |
Definition at line 1636 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::bind_verts_num, SDefVert::binds_num, BLI_assert, BLO_write_float3_array(), BLO_write_float_array(), BLO_write_is_undo(), BLO_write_struct_array, BLO_write_struct_at_address, BLO_write_uint32_array(), ELEM, eModifierFlag_OverrideLibrary_Local, ModifierData::flag, ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY, MOD_SDEF_MODE_CENTROID, MOD_SDEF_MODE_CORNER_TRIS, and SurfaceDeformModifierData::verts.
|
static |
Definition at line 287 of file MOD_surfacedeform.cc.
References SDefAdjacencyArray::first, SDefAdjacency::index, blender::offset_indices::OffsetIndices< T >::index_range(), MOD_SDEF_BIND_RESULT_NONMANY_ERR, MOD_SDEF_BIND_RESULT_SUCCESS, SDefAdjacency::next, SDefAdjacencyArray::num, SDefEdgePolys::num, SDefEdgePolys::polys, and blender::Span< T >::slice().
Referenced by surfacedeformBind().
|
static |
Definition at line 1151 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::bind_verts_num, SDefVert::binds_num, MEM_reallocN_id, SurfaceDeformModifierData::mesh_verts_num, and SurfaceDeformModifierData::verts.
Referenced by surfacedeformBind().
| BLI_INLINE float computeAngularWeight | ( | const float | point_angle, |
| const float | edgemid_angle ) |
Definition at line 469 of file MOD_surfacedeform.cc.
References M_PI_2, min_ff(), and sinf.
Referenced by computeBindWeights().
| BLI_INLINE SDefBindWeightData * computeBindWeights | ( | SDefBindCalcData *const | data, |
| const float | point_co[3] ) |
Definition at line 474 of file MOD_surfacedeform.cc.
References angle(), angle_normalized_v2v2(), angle_normalized_v3v3(), angle_signed_v2v2(), area_tri_v2(), SDefBindWeightData::bind_polys, SDefBindWeightData::binds_num, BLI_assert, SDefBindPoly::cent_edgemid_vecs_v2, SDefBindPoly::centroid, SDefBindPoly::centroid_v2, computeAngularWeight(), SDefBindPoly::coords, SDefBindPoly::coords_v2, copy_v3_v3(), SDefBindPoly::corner_edgemid_angles, SDefBindPoly::corner_ind, cross_v3_v3v3(), dist_to_line_v2(), SDefBindPoly::dominant_angle_weight, SDefBindPoly::dominant_edge, SDefBindPoly::edge_inds, SDefBindPoly::edge_vert_inds, SDefBindPoly::edgemid_angle, ELEM, fabsf, SDefBindWeightData::faces_num, freeBindData(), SDefAdjacency::index, SDefBindPoly::index, SDefBindPoly::inside, interpf(), isect_point_poly_v2(), isPolyValid(), len_v2v2(), len_v3v3(), SDefBindPoly::loopstart, M_PI, M_PI_2, madd_v2_v2fl(), map_to_plane_axis_angle_v2_v3v3fl(), max_ff(), MEM_calloc_arrayN, MEM_callocN, MEM_malloc_arrayN, mid_v2_v2v2(), mid_v3_v3_array(), min_ff(), MOD_SDEF_BIND_RESULT_GENERIC_ERR, MOD_SDEF_BIND_RESULT_MEM_ERR, MOD_SDEF_BIND_RESULT_SUCCESS, MOD_SDEF_INFINITE_WEIGHT_ANGULAR, MOD_SDEF_INFINITE_WEIGHT_DIST, MOD_SDEF_INFINITE_WEIGHT_DIST_PROJ, nearestVert(), SDefAdjacency::next, SDefBindPoly::normal, normal_poly_v3(), normalize_v2(), normalize_v3(), SDefEdgePolys::num, SDefBindPoly::point_edgemid_angles, SDefBindPoly::point_v2, SDefEdgePolys::polys, powf, SDefBindPoly::scale_mid, SDefBindPoly::scales, signf(), sinf, sqr(), sqrtf, sub_v2_v2(), sub_v2_v2v2(), SDefBindPoly::verts_num, SDefBindPoly::weight, SDefBindPoly::weight_angular, SDefBindPoly::weight_dist, SDefBindPoly::weight_dist_proj, and zero_v2().
Referenced by bindVert().
| BLI_INLINE float computeNormalDisplacement | ( | const float | point_co[3], |
| const float | point_co_proj[3], | ||
| const float | normal[3] ) |
Definition at line 927 of file MOD_surfacedeform.cc.
References dot_v3v3(), len_v3(), and sub_v3_v3v3().
Referenced by bindVert().
|
static |
Definition at line 230 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::bind_verts_num, SDefVert::binds, SDefVert::binds_num, BKE_modifier_copydata_generic(), flag, MEM_dupallocN, SDefBind::vert_inds, SDefBind::vert_weights, and SurfaceDeformModifierData::verts.
|
static |
Definition at line 1564 of file MOD_surfacedeform.cc.
References ModifierEvalContext::object, and surfacedeformModifier_do().
|
static |
Definition at line 1331 of file MOD_surfacedeform.cc.
References BKE_defvert_find_weight(), copy_v3_v3(), blender::Array< T, InlineBufferCapacity, Allocator >::data(), SDefBind::influence, madd_v3_v3fl(), mid_v3_v3_array(), MOD_SDEF_MODE_CENTROID, MOD_SDEF_MODE_CORNER_TRIS, MOD_SDEF_MODE_NGONS, SDefBind::mode, norm(), SDefBind::normal_dist, normal_poly_v3(), sub_v3_v3(), SDefBind::vert_inds, SDefBind::vert_weights, SDefBind::verts_num, and zero_v3().
Referenced by surfacedeformModifier_do().
|
static |
Definition at line 260 of file MOD_surfacedeform.cc.
References IDWALK_NOP, and SurfaceDeformModifierData::target.
|
static |
Definition at line 211 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::bind_verts_num, SDefVert::binds, SDefVert::binds_num, MEM_freeN(), MEM_SAFE_FREE, SDefBind::vert_inds, SDefBind::vert_weights, and SurfaceDeformModifierData::verts.
Referenced by surfacedeformBind(), and surfacedeformModifier_do().
|
static |
Definition at line 276 of file MOD_surfacedeform.cc.
References MEM_freeN().
Referenced by surfacedeformBind().
|
static |
Definition at line 453 of file MOD_surfacedeform.cc.
References SDefBindWeightData::bind_polys, SDefBindPoly::coords, SDefBindPoly::coords_v2, SDefBindWeightData::faces_num, MEM_freeN(), and MEM_SAFE_FREE.
Referenced by bindVert(), and computeBindWeights().
|
static |
Definition at line 192 of file MOD_surfacedeform.cc.
References BLI_assert, DNA_struct_default_get, MEMCMP_STRUCT_AFTER_IS_ZERO, and MEMCPY_STRUCT_AFTER.
|
static |
Definition at line 1577 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::flags, MOD_SDEF_BIND, OB_MESH, SurfaceDeformModifierData::target, Object::type, and SurfaceDeformModifierData::verts.
| BLI_INLINE int isPolyValid | ( | const float | coords[][2], |
| const uint | nr ) |
Definition at line 412 of file MOD_surfacedeform.cc.
References copy_v2_v2(), dot_v2v2(), is_poly_convex_v2(), len_squared_v2v2(), MOD_SDEF_BIND_RESULT_CONCAVE_ERR, MOD_SDEF_BIND_RESULT_OVERLAP_ERR, MOD_SDEF_BIND_RESULT_SUCCESS, normalize_v2(), and sub_v2_v2v2().
Referenced by computeBindWeights().
| BLI_INLINE uint nearestVert | ( | SDefBindCalcData *const | data, |
| const float | point_co[3] ) |
Definition at line 372 of file MOD_surfacedeform.cc.
References BLI_bvhtree_find_nearest(), BVHTreeNearest::dist_sq, dist_squared_to_line_segment_v3(), FLT_MAX, len_squared_v3v3(), and mul_v3_m4v3().
Referenced by computeBindWeights().
Definition at line 1590 of file MOD_surfacedeform.cc.
References col, IFACE_, Panel::layout, modifier_panel_end(), modifier_panel_get_property_pointers(), modifier_vgroup_ui(), ptr, RNA_boolean_get(), RNA_pointer_get(), RNA_pointer_is_null(), RNA_string_length(), UI_ITEM_NONE, uiItemO(), uiItemR(), uiItemS(), uiLayoutColumn(), uiLayoutSetActive(), uiLayoutSetEnabled(), and uiLayoutSetPropSep().
Referenced by panel_register().
|
static |
Definition at line 1631 of file MOD_surfacedeform.cc.
References eModifierType_SurfaceDeform, modifier_panel_register(), and panel_draw().
|
static |
Definition at line 201 of file MOD_surfacedeform.cc.
References CD_MASK_MDEFORMVERT, SurfaceDeformModifierData::defgrp_name, and CustomData_MeshMasks::vmask.
| BLI_INLINE void sortPolyVertsEdge | ( | uint * | indices, |
| const int *const | corner_verts, | ||
| const int *const | corner_edges, | ||
| const uint | edge, | ||
| const uint | num ) |
Definition at line 331 of file MOD_surfacedeform.cc.
Referenced by bindVert().
| BLI_INLINE void sortPolyVertsTri | ( | uint * | indices, |
| const int *const | corner_verts, | ||
| const uint | loopstart, | ||
| const uint | num ) |
Definition at line 356 of file MOD_surfacedeform.cc.
Referenced by bindVert().
|
static |
Definition at line 1165 of file MOD_surfacedeform.cc.
References SurfaceDeformModifierData::bind_verts_num, bindVert(), BKE_bvhtree_from_mesh_get(), BKE_modifier_set_error(), BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), buildAdjacencyMap(), BVHTREE_FROM_CORNER_TRIS, compactSparseBinds(), SurfaceDeformModifierData::defgrp_name, SurfaceDeformModifierData::falloff, SurfaceDeformModifierData::flags, free_bvhtree_from_mesh(), free_data(), freeAdjacencyMap(), invert_m4_m4(), SurfaceDeformModifierData::mat, MEM_calloc_arrayN, MEM_freeN(), MEM_malloc_arrayN, SurfaceDeformModifierData::mesh_verts_num, MOD_get_vgroup(), MOD_SDEF_BIND_RESULT_CONCAVE_ERR, MOD_SDEF_BIND_RESULT_GENERIC_ERR, MOD_SDEF_BIND_RESULT_MEM_ERR, MOD_SDEF_BIND_RESULT_NONMANY_ERR, MOD_SDEF_BIND_RESULT_OVERLAP_ERR, MOD_SDEF_BIND_RESULT_SUCCESS, MOD_SDEF_INVERT_VGROUP, MOD_SDEF_SPARSE_BIND, mul_v3_m4v3(), SDefEdgePolys::polys, SurfaceDeformModifierData::target_polys_num, SurfaceDeformModifierData::target_verts_num, BVHTreeFromMesh::tree, SDefBindCalcData::treeData, and SurfaceDeformModifierData::verts.
Referenced by surfacedeformModifier_do().
|
static |
Definition at line 1420 of file MOD_surfacedeform.cc.
References SDefDeformData::bind_verts, SurfaceDeformModifierData::bind_verts_num, BKE_mesh_wrapper_ensure_mdata(), BKE_mesh_wrapper_face_len(), BKE_mesh_wrapper_vert_coords_copy_with_mat4(), BKE_mesh_wrapper_vert_len(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), BKE_modifier_get_original(), BKE_modifier_set_error(), BKE_modifier_set_warning(), BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), SurfaceDeformModifierData::defgrp_name, deformVert(), DEG_is_active(), ModifierEvalContext::depsgraph, ELEM, SurfaceDeformModifierData::flags, free_data(), invert_m4_m4(), SurfaceDeformModifierData::mat, MEM_freeN(), MEM_malloc_arrayN, SurfaceDeformModifierData::mesh_verts_num, MOD_get_vgroup(), MOD_SDEF_BIND, MOD_SDEF_INVERT_VGROUP, mul_m4_m4m4(), SurfaceDeformModifierData::strength, surfacedeformBind(), SurfaceDeformModifierData::target, SurfaceDeformModifierData::target_polys_num, SurfaceDeformModifierData::target_verts_num, and SurfaceDeformModifierData::verts.
Referenced by deform_verts().
|
static |
Definition at line 267 of file MOD_surfacedeform.cc.
References DEG_add_object_relation(), DEG_OB_COMP_GEOMETRY, ModifierUpdateDepsgraphContext::node, and SurfaceDeformModifierData::target.
| ModifierTypeInfo modifierType_SurfaceDeform |
Definition at line 1709 of file MOD_surfacedeform.cc.