35inline namespace snake_hook_cc {
80 float3 vec_rot = v_co - sculpt_co;
85 return vec_rot - v_co;
103 for (
const int i : positions.index_range()) {
113 delta_pinch += grab_delta;
117 float3 delta_pinch_init = delta_pinch;
119 float pinch_fade = pinch * factors[i];
126 delta_pinch *= (1.0f + pinch_fade);
127 delta_pinch = delta_pinch_init - delta_pinch;
128 translations[i] += delta_pinch;
140 for (
const int i : positions.index_range()) {
152 for (
const int i : positions.index_range()) {
155 translations[i] = disp * factors[i];
367 if (bstrength < 0.0f) {
381 switch (pbvh.
type()) {
383 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
406 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
void BKE_kelvinlet_grab_triscale(float radius_elem_disp[3], const KelvinletParams *params, const float elem_orig_co[3], const float brush_location[3], const float brush_delta[3])
void BKE_kelvinlet_init_params(KelvinletParams *params, float radius, float force, float shear_modulus, float poisson_ratio)
const Brush * BKE_paint_brush_for_read(const Paint *paint)
const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_unique_verts(blender::bke::pbvh::BMeshNode *node)
MINLINE float pow2f(float x)
void project_plane_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
@ BRUSH_SNAKE_HOOK_DEFORM_ELASTIC
@ PAINT_FALLOFF_SHAPE_TUBE
Object is a sort of wrapper for general info.
constexpr void fill(const T &value) const
void resize(const int64_t new_size)
void tag_positions_changed(const IndexMask &node_mask)
Span< NodeT > nodes() const
void foreach_index(Fn &&fn) const
const Depsgraph * depsgraph
pbvh::Tree * pbvh_get(Object &object)
void update_node_bounds_bmesh(BMeshNode &node)
void update_node_bounds_mesh(Span< float3 > positions, MeshNode &node)
Span< float3 > vert_normals_eval(const Depsgraph &depsgraph, const Object &object_orig)
void update_node_bounds_grids(int grid_area, Span< float3 > positions, GridsNode &node)
void flush_bounds_to_parents(Tree &pbvh)
void calc_grids_factors(const Depsgraph &depsgraph, const Object &object, const Cache &cache, const bke::pbvh::GridsNode &node, Span< int > grids, MutableSpan< float > factors)
void calc_vert_factors(const Depsgraph &depsgraph, const Object &object, const Cache &cache, const bke::pbvh::MeshNode &node, Span< int > verts, MutableSpan< float > factors)
static void calc_bmesh(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Brush &brush, const float3 &direction, const float strength, bke::pbvh::BMeshNode &node, LocalData &tls)
static void calc_faces(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, const float4 &test_plane, const float strength, const MeshAttributeData &attribute_data, const Span< float3 > vert_normals, const bke::pbvh::MeshNode &node, Object &object, LocalData &tls, const PositionDeformData &position_data)
static void calc_grids(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Brush &brush, const float4 &test_plane, const float strength, bke::pbvh::GridsNode &node, LocalData &tls)
static BLI_NOINLINE void fill_factor_from_hide_and_mask(const Mesh &mesh, const Span< int > face_indices, const MutableSpan< float > r_factors)
static void sculpt_project_v3_cache_init(SculptProjectVector *spvc, const float3 &plane)
static void calc_grids(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Brush &brush, SculptProjectVector *spvc, const float3 &grab_delta, bke::pbvh::GridsNode &node, LocalData &tls)
static void calc_faces(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Brush &brush, const SculptProjectVector *spvc, const float3 &grab_delta, const Span< float3 > vert_normals, const MeshAttributeData &attribute_data, bke::pbvh::MeshNode &node, LocalData &tls, const PositionDeformData &position_data)
static BLI_NOINLINE void calc_pinch_influence(const Brush &brush, const StrokeCache &cache, const float3 &grab_delta, const SculptProjectVector *spvc, const Span< float3 > positions, const Span< float > factors, const MutableSpan< float3 > translations)
static BLI_NOINLINE void calc_rake_rotation_influence(const StrokeCache &cache, const Span< float3 > positions, const Span< float > factors, const MutableSpan< float3 > translations)
static void sculpt_project_v3(const SculptProjectVector *spvc, const float3 &vec, float3 &r_vec)
static void calc_bmesh(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const Brush &brush, SculptProjectVector *spvc, const float3 &grab_delta, bke::pbvh::BMeshNode &node, LocalData &tls)
static float3 sculpt_rake_rotate(const StrokeCache &cache, const float3 &sculpt_co, const float3 &v_co, float factor)
static BLI_NOINLINE void calc_kelvinet_translation(const StrokeCache &cache, const Span< float3 > positions, const Span< float > factors, const MutableSpan< float3 > translations)
void do_snake_hook_brush(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
MutableSpan< float3 > gather_grids_positions(const SubdivCCG &subdiv_ccg, const Span< int > grids, Vector< float3 > &positions)
void gather_bmesh_positions(const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions)
void calc_brush_strength_factors(const StrokeCache &cache, const Brush &brush, Span< float > distances, MutableSpan< float > factors)
void apply_hardness_to_distances(float radius, float hardness, MutableSpan< float > distances)
void filter_distances_with_radius(float radius, Span< float > distances, MutableSpan< float > factors)
void filter_region_clip_factors(const SculptSession &ss, Span< float3 > vert_positions, Span< int > verts, MutableSpan< float > factors)
void calc_brush_distances(const SculptSession &ss, Span< float3 > vert_positions, Span< int > vert_indices, eBrushFalloffShape falloff_shape, MutableSpan< float > r_distances)
void scale_factors(MutableSpan< float > factors, float strength)
void clip_and_lock_translations(const Sculpt &sd, const SculptSession &ss, Span< float3 > positions, Span< int > verts, MutableSpan< float3 > translations)
void apply_translations(Span< float3 > translations, Span< int > verts, MutableSpan< float3 > positions)
void gather_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
void calc_front_face(const float3 &view_normal, Span< float3 > normals, MutableSpan< float > factors)
void translations_from_offset_and_factors(const float3 &offset, Span< float > factors, MutableSpan< float3 > r_translations)
void calc_brush_texture_factors(const SculptSession &ss, const Brush &brush, Span< float3 > vert_positions, Span< int > vert_indices, MutableSpan< float > factors)
T length_squared(const VecBase< T, Size > &a)
T pow(const T &x, const T &power)
T length(const VecBase< T, Size > &a)
T dot(const QuaternionBase< T > &a, const QuaternionBase< T > &b)
VecBase< T, 3 > transform_point(const CartesianBasis &basis, const VecBase< T, 3 > &v)
void sculpt_project_v3_normal_align(const SculptSession &ss, const float normal_weight, float grab_delta[3])
int snake_hook_deform_type
float crease_pinch_factor
blender::ed::sculpt_paint::StrokeCache * cache
blender::Array< blender::float3 > positions
Vector< float > distances
Vector< float3 > translations
Vector< float3 > positions
VArraySpan< bool > hide_vert
std::unique_ptr< auto_mask::Cache > automasking
std::optional< math::Quaternion > rake_rotation_symm
Vector< float > distances
Vector< float3 > translations
Vector< float3 > positions