45enum class Type : int8_t;
97 std::optional<MutableSpan<float3>> eval_mut_;
103 std::optional<Span<float3x3>> deform_imats_;
110 std::optional<ShapeKeyData> shape_key_data_;
130#define SCULPT_RAKE_BRUSH_FACTOR 0.25f
497 bool use_sampled_normal);
545 float grab_delta[3]);
585#define FAKE_NEIGHBOR_NONE -1
664 const float br_co[3],
674 const float pivot[3]);
685 float max_distance = std::numeric_limits<float>::max());
688 float max_distance = std::numeric_limits<float>::max());
691 float max_distance = std::numeric_limits<float>::max());
695 float max_distance = std::numeric_limits<float>::max());
703 const bke::pbvh::Node &node,
711 const std::optional<float3> &ray_direction,
723 const float brush_point[3],
734 float translation[3]);
744 float tilt_strength);
762 const IndexMask &node_mask,
763 MutableSpan<float3> translations);
862 float scale_factor = 1.0);
#define SCULPT_FACE_SET_NONE
A BVH for high poly meshes.
#define ATTR_NONNULL(...)
@ SCULPT_BRUSH_TYPE_DRAW_FACE_SETS
@ SCULPT_BRUSH_TYPE_SMEAR
@ SCULPT_BRUSH_TYPE_PAINT
@ BRUSH_USE_COLOR_AS_DISPLACEMENT
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
BPy_StructRNA * depsgraph
static float normals[][3]
void SCULPT_OT_cloth_filter(wmOperatorType *ot)
void SCULPT_OT_color_filter(wmOperatorType *ot)
void SCULPT_OT_detail_flood_fill(wmOperatorType *ot)
void SCULPT_OT_sample_detail_size(wmOperatorType *ot)
void SCULPT_OT_dynamic_topology_toggle(wmOperatorType *ot)
void SCULPT_OT_dyntopo_detail_size_edit(wmOperatorType *ot)
void modal_keymap(wmKeyConfig *keyconf)
void SCULPT_OT_expand(wmOperatorType *ot)
void SCULPT_OT_face_set_lasso_gesture(wmOperatorType *ot)
void SCULPT_OT_face_set_line_gesture(wmOperatorType *ot)
void SCULPT_OT_face_set_polyline_gesture(wmOperatorType *ot)
void SCULPT_OT_face_sets_init(wmOperatorType *ot)
void SCULPT_OT_face_sets_create(wmOperatorType *ot)
void SCULPT_OT_face_set_change_visibility(wmOperatorType *ot)
void SCULPT_OT_face_sets_randomize_colors(wmOperatorType *ot)
void SCULPT_OT_face_sets_edit(wmOperatorType *ot)
void SCULPT_OT_face_set_box_gesture(wmOperatorType *ot)
void SCULPT_OT_mesh_filter(wmOperatorType *ot)
wmKeyMap * modal_keymap(wmKeyConfig *keyconf)
void SCULPT_OT_mask_filter(wmOperatorType *ot)
void SCULPT_OT_mask_init(wmOperatorType *ot)
void SCULPT_OT_project_line_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_lasso_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_box_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_line_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_polyline_gesture(wmOperatorType *ot)
bool stroke_get_location_bvh(bContext *C, float out[3], const float mval[2], const bool force_original)
std::optional< Span< float > > orig_mask_data_lookup_grids(const Object &object, const bke::pbvh::GridsNode &node)
void calc_smooth_translations(const Depsgraph &depsgraph, const Object &object, const IndexMask &node_mask, const MutableSpan< float3 > translations)
bool node_in_sphere(const bke::pbvh::Node &node, const float3 &location, const float radius_sq, const bool original)
bool node_in_cylinder(const DistRayAABB_Precalc &ray_dist_precalc, const bke::pbvh::Node &node, const float radius_sq, const bool original)
std::optional< Span< int > > orig_face_set_data_lookup_mesh(const Object &object, const bke::pbvh::MeshNode &node)
void vert_random_access_ensure(Object &object)
std::optional< int > nearest_vert_calc_mesh(const bke::pbvh::Tree &pbvh, const Span< float3 > vert_positions, const Span< bool > hide_vert, const float3 &location, const float max_distance, const bool use_original)
Vector< int > find_symm_verts_grids(const Object &object, const int original_vert, const float max_distance)
bool node_fully_masked_or_hidden(const bke::pbvh::Node &node)
float3 tilt_effective_normal_get(const SculptSession &ss, const Brush &brush)
Vector< BMVert *, 64 > BMeshNeighborVerts
std::optional< OrigPositionData > orig_position_data_lookup_grids(const Object &object, const bke::pbvh::GridsNode &node)
void orig_position_data_gather_bmesh(const BMLog &bm_log, const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions, MutableSpan< float3 > normals)
void ensure_valid_pivot(const Object &ob, Paint &paint)
Vector< int > find_symm_verts_mesh(const Depsgraph &depsgraph, const Object &object, const int original_vert, const float max_distance)
bool color_supported_check(const Scene &scene, Object &object, ReportList *reports)
float raycast_init(ViewContext *vc, const float2 &mval, float3 &r_ray_start, float3 &r_ray_end, float3 &r_ray_normal, bool original)
bool brush_type_is_paint(const int tool)
bool cursor_geometry_info_update(bContext *C, CursorGeometryInfo *out, const float2 &mval, const bool use_sampled_normal)
IndexMask gather_nodes(const bke::pbvh::Tree &pbvh, const eBrushFalloffShape falloff_shape, const bool use_original, const float3 &location, const float radius_sq, const std::optional< float3 > &ray_direction, IndexMaskMemory &memory)
void flush_update_done(const bContext *C, Object &ob, const UpdateType update_type)
std::optional< Span< float4 > > orig_color_data_lookup_mesh(const Object &object, const bke::pbvh::MeshNode &node)
Span< float4 > orig_color_data_get_mesh(const Object &object, const bke::pbvh::MeshNode &node)
void SCULPT_OT_brush_stroke(wmOperatorType *ot)
void calc_brush_plane(const Depsgraph &depsgraph, const Brush &brush, Object &ob, const IndexMask &node_mask, float3 &r_area_no, float3 &r_area_co)
Span< BMVert * > vert_neighbors_get_interior_bmesh(BMVert &vert, BMeshNeighborVerts &r_neighbors)
std::optional< float3 > calc_area_normal(const Depsgraph &depsgraph, const Brush &brush, const Object &ob, const IndexMask &node_mask)
Span< BMVert * > vert_neighbors_get_bmesh(BMVert &vert, BMeshNeighborVerts &r_neighbors)
OrigPositionData orig_position_data_get_mesh(const Object &object, const bke::pbvh::MeshNode &node)
bool vertex_is_occluded(const Depsgraph &depsgraph, const Object &object, const float3 &position, bool original)
OrigPositionData orig_position_data_get_grids(const Object &object, const bke::pbvh::GridsNode &node)
void calc_area_center(const Depsgraph &depsgraph, const Brush &brush, const Object &ob, const IndexMask &node_mask, float r_area_co[3])
float object_space_radius_get(const ViewContext &vc, const Paint &paint, const Brush &brush, const float3 &location, const float scale_factor)
void flush_update_step(const bContext *C, const UpdateType update_type)
BLI_INLINE bool brush_type_is_attribute_only(const int tool)
static constexpr int plane_brush_max_rolling_average_num
float brush_plane_offset_get(const Brush &brush, const SculptSession &ss)
std::optional< BMVert * > nearest_vert_calc_bmesh(const bke::pbvh::Tree &pbvh, const float3 &location, const float max_distance, const bool use_original)
std::optional< Span< float > > orig_mask_data_lookup_mesh(const Object &object, const bke::pbvh::MeshNode &node)
std::optional< SubdivCCGCoord > nearest_vert_calc_grids(const bke::pbvh::Tree &pbvh, const SubdivCCG &subdiv_ccg, const float3 &location, const float max_distance, const bool use_original)
std::optional< OrigPositionData > orig_position_data_lookup_mesh_all_verts(const Object &object, const bke::pbvh::MeshNode &node)
void calc_area_normal_and_center(const Depsgraph &depsgraph, const Brush &brush, const Object &ob, const IndexMask &node_mask, float r_area_no[3], float r_area_co[3])
TransformDisplacementMode
std::optional< OrigPositionData > orig_position_data_lookup_mesh(const Object &object, const bke::pbvh::MeshNode &node)
Vector< int > find_symm_verts(const Depsgraph &depsgraph, const Object &object, const int original_vert, const float max_distance)
std::optional< Span< int > > orig_face_set_data_lookup_grids(const Object &object, const bke::pbvh::GridsNode &node)
Span< int > vert_neighbors_get_mesh(const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face, const Span< bool > hide_poly, const int vert, Vector< int > &r_neighbors)
bool brush_uses_vector_displacement(const Brush &brush)
bool brush_type_is_mask(const int tool)
void SCULPT_OT_set_pivot_position(wmOperatorType *ot)
void geometry_preview_lines_update(Depsgraph &depsgraph, Object &object, SculptSession &ss, float radius)
Span< float3 > vert_positions_for_grab_active_get(const Depsgraph &depsgraph, const Object &object)
float3 tilt_apply_to_normal(const Object &object, const float4x4 &view_inverse, const float3 &normal, const float2 &tilt, const float tilt_strength)
Vector< int > find_symm_verts_bmesh(const Object &object, const int original_vert, const float max_distance)
MatBase< float, 4, 4 > float4x4
VecBase< float, 4 > float4
VecBase< float, 2 > float2
VecBase< float, 3 > float3
void sculpt_apply_texture(const SculptSession &ss, const Brush &brush, const float brush_point[3], int thread_id, float *r_value, float r_rgba[4])
bool SCULPT_stroke_is_first_brush_step_of_symmetry_pass(const blender::ed::sculpt_paint::StrokeCache &cache)
void SCULPT_flip_quat_by_symm_area(float quat[4], ePaintSymmetryFlags symm, ePaintSymmetryAreas symmarea, const float pivot[3])
bool SCULPT_brush_cursor_poll(bContext *C)
ePaintSymmetryFlags SCULPT_mesh_symmetry_xyz_get(const Object &object)
const float * SCULPT_brush_frontface_normal_from_falloff_shape(const SculptSession &ss, char falloff_shape)
void SCULPT_stroke_modifiers_check(const bContext *C, Object &ob, const Brush &brush)
blender::float3 SCULPT_flip_v3_by_symm_area(const blender::float3 &vector, ePaintSymmetryFlags symm, ePaintSymmetryAreas symmarea, const blender::float3 &pivot)
bool SCULPT_check_vertex_pivot_symmetry(const float vco[3], const float pco[3], char symm)
bool SCULPT_mode_poll_view3d(bContext *C)
void SCULPT_do_paint_brush_image(const Depsgraph &depsgraph, PaintModeSettings &paint_mode_settings, const Sculpt &sd, Object &ob, const blender::IndexMask &node_mask)
bool SCULPT_mode_poll(bContext *C)
void SCULPT_calc_vertex_displacement(const SculptSession &ss, const Brush &brush, float translation[3])
bool SCULPT_stroke_is_main_symmetry_pass(const blender::ed::sculpt_paint::StrokeCache &cache)
int SCULPT_vertex_count_get(const Object &object)
blender::Span< int > SCULPT_fake_neighbors_ensure(const Depsgraph &depsgraph, Object &ob, float max_dist)
void SCULPT_fake_neighbors_free(Object &ob)
void SCULPT_cache_calc_brushdata_symm(blender::ed::sculpt_paint::StrokeCache &cache, ePaintSymmetryFlags symm, char axis, float angle)
bool SCULPT_is_vertex_inside_brush_radius_symm(const float vertex[3], const float br_co[3], float radius, char symm)
bool SCULPT_use_image_paint_brush(PaintModeSettings &settings, Object &ob)
bool SCULPT_paint_image_canvas_get(PaintModeSettings &paint_mode_settings, Object &ob, Image **r_image, ImageUser **r_image_user) ATTR_NONNULL()
Get the image canvas for painting on the given object.
bool SCULPT_poll(bContext *C)
ePaintSymmetryAreas SCULPT_get_vertex_symm_area(const float co[3])
void SCULPT_cube_tip_init(const Sculpt &sd, const Object &ob, const Brush &brush, float mat[4][4])
bool SCULPT_stroke_is_first_brush_step(const blender::ed::sculpt_paint::StrokeCache &cache)
void sculpt_project_v3_normal_align(const SculptSession &ss, float normal_weight, float grab_delta[3])
void SCULPT_tag_update_overlays(bContext *C)
blender::float3 follow_co
static MatBase identity()
static std::optional< ShapeKeyData > from_object(Object &object)
Vector< MutableSpan< float3 > > dependent_keys
MutableSpan< float3 > active_key_data
Array< float3 > detail_directions
std::optional< math::Quaternion > rake_rotation
std::unique_ptr< pose::IKChain > pose_ik_chain
float3 initial_normal_symm
Array< float > layer_displacement_factor
std::optional< float > density_seed
struct blender::ed::sculpt_paint::StrokeCache::@216032235377206062040134367360200004271263147147 paint_brush
Array< float3 > prev_displacement
struct blender::ed::sculpt_paint::StrokeCache::@177302106234056170131152043023217207016132071266 clay_thumb_brush
float3 gravity_direction_symm
float4x4 brush_local_mat_inv
float3 sculpt_normal_symm
Array< float4 > prev_colors
float4 wet_mix_prev_color
std::unique_ptr< auto_mask::Cache > automasking
struct blender::ed::sculpt_paint::StrokeCache::@341056124057116163146344066210332230262122242125 plane_brush
float dyntopo_pixel_radius
struct blender::ed::sculpt_paint::StrokeCache::@120056277040371114166010206352311170205127263324 mirror_modifier_clip
std::optional< float3 > last_normal
float multiplane_scrape_angle
float3 initial_location_symm
float4x4 stroke_local_mat
float4x4 symm_rot_mat_inv
std::optional< math::Quaternion > rake_rotation_symm
struct blender::ed::sculpt_paint::StrokeCache::@002250273023223321360377071017315321037224215265 displacement_smear
Array< float3 > limit_surface_co
float3 last_location_symm
char saved_mask_brush_tool
ePaintSymmetryFlags mirror_symmetry_pass
Array< float4 > mix_colors
Array< float3 > surface_smooth_laplacian_disp
std::unique_ptr< cloth::SimulationData > cloth_sim
std::array< float, 10 > pressure_stabilizer
std::array< std::unique_ptr< boundary::SculptBoundary >, PAINT_SYMM_AREAS > boundaries
std::optional< blender::float3 > initial_hsv_jitter
float3 orig_grab_location
bool initial_direction_flipped
Brush * saved_active_brush