Blender V4.5
mesh_brush_common.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "BLI_array.hh"
8#include "BLI_bit_span.hh"
11#include "BLI_offset_indices.hh"
12#include "BLI_set.hh"
13#include "BLI_span.hh"
14#include "BLI_vector.hh"
15#include "BLI_virtual_array.hh"
16
17#include "BKE_subdiv_ccg.hh"
18
19#include "DNA_brush_enums.h"
20
21#include "sculpt_intern.hh"
22
37
38struct BMesh;
39struct BMVert;
40struct BMFace;
41struct Brush;
42struct Mesh;
43struct Object;
44struct Sculpt;
45struct SculptSession;
46struct SubdivCCG;
47struct SubdivCCGCoord;
48namespace blender {
49namespace bke {
51}
52namespace bke::pbvh {
53class Node;
54class Tree;
55} // namespace bke::pbvh
56} // namespace blender
57
59struct StrokeCache;
60
61namespace auto_mask {
62struct Cache;
63};
64
65void scale_translations(MutableSpan<float3> translations, Span<float> factors);
66void scale_translations(MutableSpan<float3> translations, float factor);
67void scale_factors(MutableSpan<float> factors, float strength);
68void scale_factors(MutableSpan<float> factors, Span<float> strengths);
70 Span<float> factors,
71 MutableSpan<float3> r_translations);
72
79 Span<float3> old_positions,
80 MutableSpan<float3> translations);
82 Span<float3> old_positions,
83 MutableSpan<float3> translations);
84
87
89template<typename T> void gather_data_mesh(Span<T> src, Span<int> indices, MutableSpan<T> dst);
90template<typename T>
92{
93 dst.resize(indices.size());
95 return dst;
96}
97template<typename T>
98void gather_data_grids(const SubdivCCG &subdiv_ccg,
99 Span<T> src,
100 Span<int> grids,
101 MutableSpan<T> node_data);
102template<typename T>
104 const Span<T> src,
105 const Span<int> grids,
106 Vector<T> &dst)
107{
108 const CCGKey key = BKE_subdiv_ccg_key_top_level(subdiv_ccg);
109 dst.resize(grids.size() * key.grid_area);
110 gather_data_grids(subdiv_ccg, src, grids, dst.as_mutable_span());
111 return dst;
112}
113
114template<typename T>
116template<typename T>
118{
119 dst.resize(verts.size());
121 return dst;
122}
123
125template<typename T> void scatter_data_mesh(Span<T> src, Span<int> indices, MutableSpan<T> dst);
126template<typename T>
127void scatter_data_grids(const SubdivCCG &subdiv_ccg,
128 Span<T> node_data,
129 Span<int> grids,
130 MutableSpan<T> dst);
131template<typename T>
133
136 const Span<int> grids,
137 Vector<float3> &positions)
138{
139 const CCGKey key = BKE_subdiv_ccg_key_top_level(subdiv_ccg);
140 positions.resize(key.grid_area * grids.size());
141 gather_data_grids(subdiv_ccg, subdiv_ccg.positions.as_span(), grids, positions);
142 return positions;
143}
146 Vector<float3> &positions)
147{
148 positions.resize(verts.size());
150 return positions;
151}
152
154void gather_grids_normals(const SubdivCCG &subdiv_ccg,
155 Span<int> grids,
158
163 /* Point Domain */
166
167 /* Face Domain */
170
171 explicit MeshAttributeData(const Mesh &mesh);
172};
173
174void calc_factors_common_mesh(const Depsgraph &depsgraph,
175 const Brush &brush,
176 const Object &object,
177 const MeshAttributeData &attribute_data,
178 Span<float3> positions,
179 Span<float3> vert_normals,
180 const bke::pbvh::MeshNode &node,
181 Vector<float> &r_factors,
182 Vector<float> &r_distances);
183void calc_factors_common_mesh_indexed(const Depsgraph &depsgraph,
184 const Brush &brush,
185 const Object &object,
186 const MeshAttributeData &attribute_data,
187 Span<float3> vert_positions,
188 Span<float3> vert_normals,
189 const bke::pbvh::MeshNode &node,
190 Vector<float> &r_factors,
191 Vector<float> &r_distances);
192void calc_factors_common_mesh_indexed(const Depsgraph &depsgraph,
193 const Brush &brush,
194 const Object &object,
195 const MeshAttributeData &attribute_data,
196 Span<float3> vert_positions,
197 Span<float3> vert_normals,
198 const bke::pbvh::MeshNode &node,
199 MutableSpan<float> factors,
200 MutableSpan<float> distances);
201void calc_factors_common_grids(const Depsgraph &depsgraph,
202 const Brush &brush,
203 const Object &object,
204 Span<float3> positions,
205 const bke::pbvh::GridsNode &node,
206 Vector<float> &r_factors,
207 Vector<float> &r_distances);
208void calc_factors_common_bmesh(const Depsgraph &depsgraph,
209 const Brush &brush,
210 const Object &object,
211 Span<float3> positions,
213 Vector<float> &r_factors,
214 Vector<float> &r_distances);
216 const Brush &brush,
217 const Object &object,
218 const MeshAttributeData &attribute_data,
219 Span<float3> positions,
221 const bke::pbvh::MeshNode &node,
222 Vector<float> &r_factors,
223 Vector<float> &r_distances);
225 const Brush &brush,
226 const Object &object,
227 Span<float3> positions,
229 const bke::pbvh::GridsNode &node,
230 Vector<float> &r_factors,
231 Vector<float> &r_distances);
233 const Brush &brush,
234 const Object &object,
235 Span<float3> positions,
238 Vector<float> &r_factors,
239 Vector<float> &r_distances);
240
245void fill_factor_from_hide(const SubdivCCG &subdiv_ccg,
246 Span<int> grids,
247 MutableSpan<float> r_factors);
249
256 MutableSpan<float> r_factors);
257void fill_factor_from_hide_and_mask(const SubdivCCG &subdiv_ccg,
258 Span<int> grids,
259 MutableSpan<float> r_factors);
261 const Set<BMVert *, 0> &verts,
262 MutableSpan<float> r_factors);
263
267void calc_front_face(const float3 &view_normal, Span<float3> normals, MutableSpan<float> factors);
268void calc_front_face(const float3 &view_normal,
269 Span<float3> vert_normals,
271 MutableSpan<float> factors);
272void calc_front_face(const float3 &view_normal,
273 const SubdivCCG &subdiv_ccg,
274 Span<int> grids,
275 MutableSpan<float> factors);
276void calc_front_face(const float3 &view_normal,
277 const Set<BMVert *, 0> &verts,
278 MutableSpan<float> factors);
279void calc_front_face(const float3 &view_normal,
280 const Set<BMFace *, 0> &faces,
281 MutableSpan<float> factors);
282
289 Span<float3> vert_positions,
291 MutableSpan<float> factors);
293 Span<float3> positions,
294 MutableSpan<float> factors);
295
301 Span<float3> vert_positions,
302 Span<int> vert,
303 eBrushFalloffShape falloff_shape,
304 MutableSpan<float> r_distances);
306 Span<float3> positions,
307 eBrushFalloffShape falloff_shape,
308 MutableSpan<float> r_distances);
310 Span<float3> positions,
312 eBrushFalloffShape falloff_shape,
313 MutableSpan<float> r_distances);
315 Span<float3> positions,
316 eBrushFalloffShape falloff_shape,
317 MutableSpan<float> r_distances);
318
320void filter_distances_with_radius(float radius, Span<float> distances, MutableSpan<float> factors);
321
326template<typename T>
327void calc_brush_cube_distances(const Brush &brush,
328 const Span<T> positions,
329 const MutableSpan<float> r_distances);
330
335void apply_hardness_to_distances(float radius, float hardness, MutableSpan<float> distances);
337 const MutableSpan<float> distances)
338{
339 apply_hardness_to_distances(cache.radius, cache.hardness, distances);
340}
341
345void calc_brush_strength_factors(const StrokeCache &cache,
346 const Brush &brush,
347 Span<float> distances,
348 MutableSpan<float> factors);
349
354 const Brush &brush,
355 Span<float3> vert_positions,
356 Span<int> vert,
357 MutableSpan<float> factors);
359 const Brush &brush,
360 Span<float3> positions,
361 MutableSpan<float> factors);
362
370void apply_translations(Span<float3> translations, Span<int> grids, SubdivCCG &subdiv_ccg);
371void apply_translations(Span<float3> translations, const Set<BMVert *, 0> &verts);
372
374void project_translations(MutableSpan<float3> translations, const float3 &plane);
375
384 Span<float3> positions,
385 Span<float3> orig_positions);
386
396 MutableSpan<float3> translations);
397
402 const SculptSession &ss,
403 Span<float3> positions,
405 MutableSpan<float3> translations);
407 const SculptSession &ss,
408 Span<float3> positions,
409 MutableSpan<float3> translations);
410
416 const IndexMask &node_mask,
417 Array<int> &node_data);
420 const IndexMask &node_mask,
421 Array<int> &node_data);
423 const IndexMask &node_mask,
424 Array<int> &node_data);
425
433 Span<int> corner_verts,
434 GroupedSpan<int> vert_to_face,
435 Span<bool> hide_poly,
437 Vector<int> &r_offset_data,
438 Vector<int> &r_data);
440 Span<int> grids,
441 Vector<int> &r_offset_data,
442 Vector<int> &r_data);
444 Vector<int> &r_offset_data,
445 Vector<BMVert *> &r_data);
446
454 Span<int> corner_verts,
455 GroupedSpan<int> vert_to_face,
456 BitSpan boundary_verts,
457 Span<bool> hide_poly,
459 Vector<int> &r_offset_data,
460 Vector<int> &r_data);
462 Span<int> corner_verts,
463 GroupedSpan<int> vert_to_face,
464 BitSpan boundary_verts,
465 Span<bool> hide_poly,
467 Span<float> factors,
468 Vector<int> &r_offset_data,
469 Vector<int> &r_data);
471 Span<int> corner_verts,
472 BitSpan boundary_verts,
473 const SubdivCCG &subdiv_ccg,
474 Span<int> grids,
478
480void calc_translations_to_plane(Span<float3> vert_positions,
482 const float4 &plane,
483 MutableSpan<float3> translations);
485 const float4 &plane,
486 MutableSpan<float3> translations);
487
490 const float3 &pivot,
492 MutableSpan<float> factors);
493
495void filter_plane_trim_limit_factors(const Brush &brush,
496 const StrokeCache &cache,
497 Span<float3> translations,
498 MutableSpan<float> factors);
499
501void filter_below_plane_factors(Span<float3> vert_positions,
503 const float4 &plane,
504 MutableSpan<float> factors);
506 const float4 &plane,
507 MutableSpan<float> factors);
508
509/* Ignore points above the plane. */
510void filter_above_plane_factors(Span<float3> vert_positions,
512 const float4 &plane,
513 MutableSpan<float> factors);
515 const float4 &plane,
516 MutableSpan<float> factors);
517
518} // namespace blender::ed::sculpt_paint
CCGKey BKE_subdiv_ccg_key_top_level(const SubdivCCG &subdiv_ccg)
eBrushFalloffShape
ePaintSymmetryFlags
BMesh * bm
BPy_StructRNA * depsgraph
constexpr int64_t size() const
Definition BLI_span.hh:252
void resize(const int64_t new_size)
MutableSpan< T > as_mutable_span()
static ushort indices[]
static float verts[][3]
static float normals[][3]
static char faces[256]
void fill_factor_from_hide_and_mask(Span< bool > hide_vert, Span< float > mask, Span< int > verts, MutableSpan< float > r_factors)
Definition sculpt.cc:6807
MutableSpan< float3 > gather_grids_positions(const SubdivCCG &subdiv_ccg, const Span< int > grids, Vector< float3 > &positions)
void scatter_data_bmesh(Span< T > node_data, const Set< BMVert *, 0 > &verts, MutableSpan< T > dst)
Definition sculpt.cc:6445
void calc_factors_common_from_orig_data_grids(const Depsgraph &depsgraph, const Brush &brush, const Object &object, Span< float3 > positions, Span< float3 > normals, const bke::pbvh::GridsNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6690
void gather_bmesh_positions(const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions)
Definition sculpt.cc:6351
void calc_brush_strength_factors(const StrokeCache &cache, const Brush &brush, Span< float > distances, MutableSpan< float > factors)
Definition sculpt.cc:7167
void gather_data_grids(const SubdivCCG &subdiv_ccg, Span< T > src, Span< int > grids, MutableSpan< T > node_data)
Definition sculpt.cc:6389
void filter_below_plane_factors(Span< float3 > vert_positions, Span< int > verts, const float4 &plane, MutableSpan< float > factors)
Definition sculpt.cc:7875
void apply_hardness_to_distances(float radius, float hardness, MutableSpan< float > distances)
Definition sculpt.cc:7140
void calc_factors_common_grids(const Depsgraph &depsgraph, const Brush &brush, const Object &object, Span< float3 > positions, const bke::pbvh::GridsNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6587
GroupedSpan< int > calc_vert_neighbors(OffsetIndices< int > faces, Span< int > corner_verts, GroupedSpan< int > vert_to_face, Span< bool > hide_poly, Span< int > verts, Vector< int > &r_offset_data, Vector< int > &r_data)
Definition sculpt.cc:7596
void gather_bmesh_normals(const Set< BMVert *, 0 > &verts, MutableSpan< float3 > normals)
Definition sculpt.cc:6369
void calc_factors_common_mesh_indexed(const Depsgraph &depsgraph, const Brush &brush, const Object &object, const MeshAttributeData &attribute_data, Span< float3 > vert_positions, Span< float3 > vert_normals, const bke::pbvh::MeshNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6496
void filter_distances_with_radius(float radius, Span< float > distances, MutableSpan< float > factors)
Definition sculpt.cc:7089
void filter_region_clip_factors(const SculptSession &ss, Span< float3 > vert_positions, Span< int > verts, MutableSpan< float > factors)
Definition sculpt.cc:6956
void gather_data_bmesh(Span< T > src, const Set< BMVert *, 0 > &verts, MutableSpan< T > node_data)
Definition sculpt.cc:6405
void reset_translations_to_original(MutableSpan< float3 > translations, Span< float3 > positions, Span< float3 > orig_positions)
Definition sculpt.cc:7230
void scale_translations(MutableSpan< float3 > translations, Span< float > factors)
Definition sculpt.cc:7476
void transform_positions(Span< float3 > src, const float4x4 &transform, MutableSpan< float3 > dst)
Definition sculpt.cc:7544
void filter_verts_outside_symmetry_area(Span< float3 > positions, const float3 &pivot, ePaintSymmetryFlags symm, MutableSpan< float > factors)
Definition sculpt.cc:7845
void calc_translations_to_plane(Span< float3 > vert_positions, Span< int > verts, const float4 &plane, MutableSpan< float3 > translations)
Definition sculpt.cc:7820
void scale_factors(MutableSpan< float > factors, float strength)
Definition sculpt.cc:7493
void calc_factors_common_from_orig_data_mesh(const Depsgraph &depsgraph, const Brush &brush, const Object &object, const MeshAttributeData &attribute_data, Span< float3 > positions, Span< float3 > normals, const bke::pbvh::MeshNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6654
void translations_from_new_positions(Span< float3 > new_positions, Span< int > verts, Span< float3 > old_positions, MutableSpan< float3 > translations)
Definition sculpt.cc:7523
void clip_and_lock_translations(const Sculpt &sd, const SculptSession &ss, Span< float3 > positions, Span< int > verts, MutableSpan< float3 > translations)
Definition sculpt.cc:7316
void scatter_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
Definition sculpt.cc:6419
void calc_brush_distances(const SculptSession &ss, Span< float3 > vert_positions, Span< int > vert, eBrushFalloffShape falloff_shape, MutableSpan< float > r_distances)
Definition sculpt.cc:7039
void project_translations(MutableSpan< float3 > translations, const float3 &plane)
Definition sculpt.cc:7292
void filter_plane_trim_limit_factors(const Brush &brush, const StrokeCache &cache, Span< float3 > translations, MutableSpan< float > factors)
Definition sculpt.cc:7859
OffsetIndices< int > create_node_vert_offsets(Span< bke::pbvh::MeshNode > nodes, const IndexMask &node_mask, Array< int > &node_data)
Definition sculpt.cc:7562
void apply_translations(Span< float3 > translations, Span< int > verts, MutableSpan< float3 > positions)
Definition sculpt.cc:7249
void calc_factors_common_mesh(const Depsgraph &depsgraph, const Brush &brush, const Object &object, const MeshAttributeData &attribute_data, Span< float3 > positions, Span< float3 > vert_normals, const bke::pbvh::MeshNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6552
void gather_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
Definition sculpt.cc:6379
void calc_brush_texture_factors(const SculptSession &ss, const Brush &brush, Span< float3 > vert_positions, Span< int > vert, MutableSpan< float > factors)
Definition sculpt.cc:7176
void filter_above_plane_factors(Span< float3 > vert_positions, Span< int > verts, const float4 &plane, MutableSpan< float > factors)
Definition sculpt.cc:7898
void apply_crazyspace_to_translations(Span< float3x3 > deform_imats, Span< int > verts, MutableSpan< float3 > translations)
Definition sculpt.cc:7305
void calc_front_face(const float3 &view_normal, Span< float3 > normals, MutableSpan< float > factors)
Definition sculpt.cc:6898
void calc_brush_distances_squared(const SculptSession &ss, Span< float3 > positions, Span< int > verts, eBrushFalloffShape falloff_shape, MutableSpan< float > r_distances)
Definition sculpt.cc:7011
void gather_grids_normals(const SubdivCCG &subdiv_ccg, Span< int > grids, MutableSpan< float3 > normals)
Definition sculpt.cc:6362
void translations_from_offset_and_factors(const float3 &offset, Span< float > factors, MutableSpan< float3 > r_translations)
Definition sculpt.cc:7512
void calc_brush_cube_distances(const Brush &brush, const Span< T > positions, const MutableSpan< float > r_distances)
Definition sculpt.cc:7101
void fill_factor_from_hide(Span< bool > hide_vert, Span< int > verts, MutableSpan< float > r_factors)
Definition sculpt.cc:6759
void scatter_data_grids(const SubdivCCG &subdiv_ccg, Span< T > node_data, Span< int > grids, MutableSpan< T > dst)
Definition sculpt.cc:6429
OffsetIndices< int > create_node_vert_offsets_bmesh(Span< bke::pbvh::BMeshNode > nodes, const IndexMask &node_mask, Array< int > &node_data)
Definition sculpt.cc:7584
void calc_factors_common_bmesh(const Depsgraph &depsgraph, const Brush &brush, const Object &object, Span< float3 > positions, bke::pbvh::BMeshNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6621
GroupedSpan< int > calc_vert_neighbors_interior(OffsetIndices< int > faces, Span< int > corner_verts, GroupedSpan< int > vert_to_face, BitSpan boundary_verts, Span< bool > hide_poly, Span< int > verts, Vector< int > &r_offset_data, Vector< int > &r_data)
Definition sculpt.cc:7735
void calc_factors_common_from_orig_data_bmesh(const Depsgraph &depsgraph, const Brush &brush, const Object &object, Span< float3 > positions, Span< float3 > normals, bke::pbvh::BMeshNode &node, Vector< float > &r_factors, Vector< float > &r_distances)
Definition sculpt.cc:6725
MatBase< float, 4, 4 > float4x4
VecBase< float, 4 > float4
VecBase< float, 3 > float3
int grid_area
Definition BKE_ccg.hh:35
blender::Array< blender::float3 > positions