24inline namespace draw_face_sets_cc {
45 corner_verts.
slice(faces[face_indices[i]]));
59 corner_verts.
slice(faces[face_indices[i]]));
70 const Span<int> corner_verts = mesh.corner_verts();
77 const Span<int> face_verts = corner_verts.
slice(faces[face_indices[i]]);
80 for (
const int vert : face_verts) {
83 r_factors[i] = 1.0f -
sum * inv_size;
93 if (span[face_indices[i]]) {
109 face_sets[face_indices[i]] = face_set_id;
117 const float strength,
118 const int face_set_id,
127 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
129 const Span<int> corner_verts = mesh.corner_verts();
133 calc_face_centers(faces, corner_verts, positions_eval, face_indices, face_centers);
137 calc_face_normals(faces, corner_verts, positions_eval, face_indices, face_normals);
158 const Span<int> corner_verts = mesh.corner_verts();
181 *
static_cast<Mesh *
>(
object.data));
187 const Span<int> face_indices = nodes[i].faces();
228 const float strength,
229 const int face_set_id,
279 *
static_cast<Mesh *
>(
object.data));
317 if (mask_offset == -1) {
329 }
while ((l_iter = l_iter->
next) != f->l_first);
330 r_factors[i] = 1.0f -
sum *
math::rcp(
float(total_verts));
344 centers[i] = face_center;
365 const float strength,
366 const int face_set_id,
int CustomData_get_offset_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
const Brush * BKE_paint_brush_for_read(const Paint *paint)
const blender::Set< BMFace *, 0 > & BKE_pbvh_bmesh_node_faces(blender::bke::pbvh::BMeshNode *node)
int BKE_subdiv_ccg_grid_to_face_index(const SubdivCCG &subdiv_ccg, const int grid_index)
CCGKey BKE_subdiv_ccg_key_top_level(const SubdivCCG &subdiv_ccg)
#define BM_ELEM_CD_GET_FLOAT(ele, offset)
#define BM_ELEM_CD_SET_INT(ele, offset, f)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_flag_test(ele, hflag)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_face_calc_center_median(const BMFace *f, float r_cent[3])
static T sum(const btAlignedObjectArray< T > &items)
constexpr int64_t size() const
constexpr void fill(const T &value) const
constexpr Span slice(int64_t start, int64_t size) const
constexpr int64_t size() const
constexpr IndexRange index_range() const
void resize(const int64_t new_size)
Span< NodeT > nodes() const
void tag_face_sets_changed(const IndexMask &node_mask)
void foreach_index(Fn &&fn) const
const Depsgraph * depsgraph
float3 face_normal_calc(Span< float3 > vert_positions, Span< int > face_verts)
float3 face_center_calc(Span< float3 > vert_positions, Span< int > face_verts)
pbvh::Tree * pbvh_get(Object &object)
Span< float3 > vert_positions_eval(const Depsgraph &depsgraph, const Object &object_orig)
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_face_factors(const Depsgraph &depsgraph, const Object &object, OffsetIndices< int > faces, Span< int > corner_verts, const Cache &cache, const bke::pbvh::MeshNode &node, Span< int > face_indices, MutableSpan< float > factors)
constexpr float FACE_SET_BRUSH_MIN_FADE
static void calc_face_centers(const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< float3 > vert_positions, const Span< int > face_indices, const MutableSpan< float3 > positions)
static void calc_face_normals(const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< float3 > vert_positions, const Span< int > face_indices, const MutableSpan< float3 > normals)
static void calc_bmesh(Object &object, const Brush &brush, const float strength, const int face_set_id, bke::pbvh::BMeshNode &node, BMeshLocalData &tls, const int cd_offset)
static void do_draw_face_sets_brush_bmesh(const Depsgraph &depsgraph, Object &object, const Brush &brush, const IndexMask &node_mask)
static BLI_NOINLINE void apply_face_set(const int face_set_id, const Span< int > face_indices, const Span< float > factors, const MutableSpan< int > face_sets)
static void do_draw_face_sets_brush_mesh(const Depsgraph &depsgraph, Object &object, const Brush &brush, const IndexMask &node_mask)
static BLI_NOINLINE void fill_factor_from_hide_and_mask(const Mesh &mesh, const Span< int > face_indices, const MutableSpan< float > r_factors)
static BLI_NOINLINE void calc_face_indices_grids(const SubdivCCG &subdiv_ccg, const Span< int > grids, const MutableSpan< int > face_indices)
static void calc_grids(const Depsgraph &depsgraph, Object &object, const Brush &brush, const float strength, const int face_set_id, const bke::pbvh::GridsNode &node, GridLocalData &tls, const MutableSpan< int > face_sets)
static void calc_faces(const Depsgraph &depsgraph, Object &object, const Brush &brush, const float strength, const int face_set_id, Span< float3 > positions_eval, const bke::pbvh::MeshNode &node, const Span< int > face_indices, MeshLocalData &tls, const MutableSpan< int > face_sets)
static void do_draw_face_sets_brush_grids(const Depsgraph &depsgraph, Object &object, const Brush &brush, const IndexMask &node_mask)
int ensure_face_sets_bmesh(Object &object)
bke::SpanAttributeWriter< int > ensure_face_sets_mesh(Mesh &mesh)
void push_nodes(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const Type type)
MutableSpan< float3 > gather_grids_positions(const SubdivCCG &subdiv_ccg, const Span< int > grids, Vector< 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 do_draw_face_sets_brush(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
void calc_front_face(const float3 &view_normal, Span< float3 > normals, MutableSpan< float > factors)
void calc_brush_texture_factors(const SculptSession &ss, const Brush &brush, Span< float3 > vert_positions, Span< int > vert_indices, MutableSpan< float > factors)
blender::ed::sculpt_paint::StrokeCache * cache
MutableVArraySpan< T > span
std::unique_ptr< auto_mask::Cache > automasking
Vector< float > distances
Vector< float3 > positions
Vector< float > distances
Vector< float3 > positions
Vector< int > face_indices
Vector< float > distances
Vector< float3 > positions