Blender  V2.93
Classes | Macros | Typedefs | Enumerations | Functions
sculpt.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_dial_2d.h"
#include "BLI_ghash.h"
#include "BLI_gsqueue.h"
#include "BLI_hash.h"
#include "BLI_math.h"
#include "BLI_math_color_blend.h"
#include "BLI_task.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "PIL_time.h"
#include "DNA_brush_types.h"
#include "DNA_customdata_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BKE_brush.h"
#include "BKE_ccg.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_image.h"
#include "BKE_kelvinlet.h"
#include "BKE_key.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_mesh_mirror.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_node.h"
#include "BKE_object.h"
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_pbvh.h"
#include "BKE_pointcache.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_subdiv_ccg.h"
#include "BKE_subsurf.h"
#include "DEG_depsgraph.h"
#include "IMB_colormanagement.h"
#include "WM_api.h"
#include "WM_message.h"
#include "WM_toolsystem.h"
#include "WM_types.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_sculpt.h"
#include "ED_view3d.h"
#include "paint_intern.h"
#include "sculpt_intern.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "bmesh.h"
#include "bmesh_tools.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Classes

struct  NearestVertexTLSData
 
struct  SculptProjectVector
 
struct  AreaNormalCenterTLSData
 
struct  SculptRaycastData
 
struct  SculptFindNearestToRayData
 
struct  ClaySampleData
 
struct  NearestVertexFakeNeighborTLSData
 
struct  SculptTopologyIDFloodFillData
 
struct  MaskByColorContiguousFloodFillData
 

Macros

#define SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY   256
 
#define SCULPT_TILT_SENSITIVITY   0.7f
 
#define PIXEL_INPUT_THRESHHOLD   5
 
#define MASK_BY_COLOR_SLOPE   0.25f
 

Typedefs

typedef struct NearestVertexTLSData NearestVertexTLSData
 
typedef enum StrokeFlags StrokeFlags
 
typedef void(* BrushActionFunc) (Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups)
 
typedef struct NearestVertexFakeNeighborTLSData NearestVertexFakeNeighborTLSData
 
typedef struct SculptTopologyIDFloodFillData SculptTopologyIDFloodFillData
 
typedef struct MaskByColorContiguousFloodFillData MaskByColorContiguousFloodFillData
 

Enumerations

enum  StrokeFlags { CLIP_X = 1 , CLIP_Y = 2 , CLIP_Z = 4 }
 
enum  { SCULPT_TOPOLOGY_ID_NONE , SCULPT_TOPOLOGY_ID_DEFAULT }
 

Functions

void SCULPT_vertex_random_access_ensure (SculptSession *ss)
 
int SCULPT_vertex_count_get (SculptSession *ss)
 
const floatSCULPT_vertex_co_get (SculptSession *ss, int index)
 
const floatSCULPT_vertex_color_get (SculptSession *ss, int index)
 
void SCULPT_vertex_normal_get (SculptSession *ss, int index, float no[3])
 
const floatSCULPT_vertex_persistent_co_get (SculptSession *ss, int index)
 
const floatSCULPT_vertex_co_for_grab_active_get (SculptSession *ss, int index)
 
void SCULPT_vertex_limit_surface_get (SculptSession *ss, int index, float r_co[3])
 
void SCULPT_vertex_persistent_normal_get (SculptSession *ss, int index, float no[3])
 
float SCULPT_vertex_mask_get (SculptSession *ss, int index)
 
int SCULPT_active_vertex_get (SculptSession *ss)
 
const floatSCULPT_active_vertex_co_get (SculptSession *ss)
 
void SCULPT_active_vertex_normal_get (SculptSession *ss, float normal[3])
 
MVertSCULPT_mesh_deformed_mverts_get (SculptSession *ss)
 
floatSCULPT_brush_deform_target_vertex_co_get (SculptSession *ss, const int deform_target, PBVHVertexIter *iter)
 
char SCULPT_mesh_symmetry_xyz_get (Object *object)
 
int SCULPT_active_face_set_get (SculptSession *ss)
 
void SCULPT_vertex_visible_set (SculptSession *ss, int index, bool visible)
 
bool SCULPT_vertex_visible_get (SculptSession *ss, int index)
 
void SCULPT_face_set_visibility_set (SculptSession *ss, int face_set, bool visible)
 
void SCULPT_face_sets_visibility_invert (SculptSession *ss)
 
void SCULPT_face_sets_visibility_all_set (SculptSession *ss, bool visible)
 
bool SCULPT_vertex_any_face_set_visible_get (SculptSession *ss, int index)
 
bool SCULPT_vertex_all_face_sets_visible_get (const SculptSession *ss, int index)
 
void SCULPT_vertex_face_set_set (SculptSession *ss, int index, int face_set)
 
int SCULPT_vertex_face_set_get (SculptSession *ss, int index)
 
bool SCULPT_vertex_has_face_set (SculptSession *ss, int index, int face_set)
 
void SCULPT_visibility_sync_all_face_sets_to_vertices (Object *ob)
 
static void UNUSED_FUNCTION() sculpt_visibility_sync_vertex_to_face_sets (SculptSession *ss, int index)
 
void SCULPT_visibility_sync_all_vertex_to_face_sets (SculptSession *ss)
 
static bool sculpt_check_unique_face_set_in_base_mesh (SculptSession *ss, int index)
 
static bool sculpt_check_unique_face_set_for_edge_in_base_mesh (SculptSession *ss, int v1, int v2)
 
bool SCULPT_vertex_has_unique_face_set (SculptSession *ss, int index)
 
int SCULPT_face_set_next_available_get (SculptSession *ss)
 
static void sculpt_vertex_neighbor_add (SculptVertexNeighborIter *iter, int neighbor_index)
 
static void sculpt_vertex_neighbors_get_bmesh (SculptSession *ss, int index, SculptVertexNeighborIter *iter)
 
static void sculpt_vertex_neighbors_get_faces (SculptSession *ss, int index, SculptVertexNeighborIter *iter)
 
static void sculpt_vertex_neighbors_get_grids (SculptSession *ss, const int index, const bool include_duplicates, SculptVertexNeighborIter *iter)
 
void SCULPT_vertex_neighbors_get (SculptSession *ss, const int index, const bool include_duplicates, SculptVertexNeighborIter *iter)
 
static bool sculpt_check_boundary_vertex_in_base_mesh (const SculptSession *ss, const int index)
 
bool SCULPT_vertex_is_boundary (const SculptSession *ss, const int index)
 
bool SCULPT_stroke_is_main_symmetry_pass (StrokeCache *cache)
 
bool SCULPT_stroke_is_first_brush_step (StrokeCache *cache)
 
bool SCULPT_stroke_is_first_brush_step_of_symmetry_pass (StrokeCache *cache)
 
bool SCULPT_check_vertex_pivot_symmetry (const float vco[3], const float pco[3], const char symm)
 
static void do_nearest_vertex_get_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void nearest_vertex_get_reduce (const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
 
int SCULPT_nearest_vertex_get (Sculpt *sd, Object *ob, const float co[3], float max_distance, bool use_original)
 
bool SCULPT_is_symmetry_iteration_valid (char i, char symm)
 
bool SCULPT_is_vertex_inside_brush_radius_symm (const float vertex[3], const float br_co[3], float radius, char symm)
 
void SCULPT_tag_update_overlays (bContext *C)
 
void SCULPT_floodfill_init (SculptSession *ss, SculptFloodFill *flood)
 
void SCULPT_floodfill_add_initial (SculptFloodFill *flood, int index)
 
void SCULPT_floodfill_add_and_skip_initial (SculptFloodFill *flood, int index)
 
void SCULPT_floodfill_add_initial_with_symmetry (Sculpt *sd, Object *ob, SculptSession *ss, SculptFloodFill *flood, int index, float radius)
 
void SCULPT_floodfill_add_active (Sculpt *sd, Object *ob, SculptSession *ss, SculptFloodFill *flood, float radius)
 
void SCULPT_floodfill_execute (SculptSession *ss, SculptFloodFill *flood, bool(*func)(SculptSession *ss, int from_v, int to_v, bool is_duplicate, void *userdata), void *userdata)
 
void SCULPT_floodfill_free (SculptFloodFill *flood)
 
static bool sculpt_brush_needs_rake_rotation (const Brush *brush)
 
void SCULPT_orig_vert_data_unode_init (SculptOrigVertData *data, Object *ob, SculptUndoNode *unode)
 
void SCULPT_orig_vert_data_init (SculptOrigVertData *data, Object *ob, PBVHNode *node)
 
void SCULPT_orig_vert_data_update (SculptOrigVertData *orig_data, PBVHVertexIter *iter)
 
static void sculpt_rake_data_update (struct SculptRakeData *srd, const float co[3])
 
static void sculpt_rake_rotate (const SculptSession *ss, const float sculpt_co[3], const float v_co[3], float factor, float r_delta[3])
 
static void sculpt_project_v3_normal_align (SculptSession *ss, const float normal_weight, float grab_delta[3])
 
bool SCULPT_stroke_is_dynamic_topology (const SculptSession *ss, const Brush *brush)
 
static void paint_mesh_restore_co_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void paint_mesh_restore_co (Sculpt *sd, Object *ob)
 
static void sculpt_extend_redraw_rect_previous (Object *ob, rcti *rect)
 
bool SCULPT_get_redraw_rect (ARegion *region, RegionView3D *rv3d, Object *ob, rcti *rect)
 
void ED_sculpt_redraw_planes_get (float planes[4][4], ARegion *region, Object *ob)
 
void SCULPT_brush_test_init (SculptSession *ss, SculptBrushTest *test)
 
BLI_INLINE bool sculpt_brush_test_clipping (const SculptBrushTest *test, const float co[3])
 
bool SCULPT_brush_test_sphere (SculptBrushTest *test, const float co[3])
 
bool SCULPT_brush_test_sphere_sq (SculptBrushTest *test, const float co[3])
 
bool SCULPT_brush_test_sphere_fast (const SculptBrushTest *test, const float co[3])
 
bool SCULPT_brush_test_circle_sq (SculptBrushTest *test, const float co[3])
 
bool SCULPT_brush_test_cube (SculptBrushTest *test, const float co[3], const float local[4][4], const float roundness)
 
SculptBrushTestFn SCULPT_brush_test_init_with_falloff_shape (SculptSession *ss, SculptBrushTest *test, char falloff_shape)
 
const floatSCULPT_brush_frontface_normal_from_falloff_shape (SculptSession *ss, char falloff_shape)
 
static float frontface (const Brush *br, const float sculpt_normal[3], const short no[3], const float fno[3])
 
static void flip_v3 (float v[3], const ePaintSymmetryFlags symm)
 
static void flip_qt (float quat[3], const ePaintSymmetryFlags symm)
 
static float calc_overlap (StrokeCache *cache, const char symm, const char axis, const float angle)
 
static float calc_radial_symmetry_feather (Sculpt *sd, StrokeCache *cache, const char symm, const char axis)
 
static float calc_symmetry_feather (Sculpt *sd, StrokeCache *cache)
 
static float brush_strength (const Sculpt *sd, const StrokeCache *cache, const float feather, const UnifiedPaintSettings *ups)
 
float SCULPT_brush_strength_factor (SculptSession *ss, const Brush *br, const float brush_point[3], const float len, const short vno[3], const float fno[3], const float mask, const int vertex_index, const int thread_id)
 
bool SCULPT_search_sphere_cb (PBVHNode *node, void *data_v)
 
bool SCULPT_search_circle_cb (PBVHNode *node, void *data_v)
 
void SCULPT_clip (Sculpt *sd, SculptSession *ss, float co[3], const float val[3])
 
static PBVHNode ** sculpt_pbvh_gather_cursor_update (Object *ob, Sculpt *sd, bool use_original, int *r_totnode)
 
static PBVHNode ** sculpt_pbvh_gather_generic (Object *ob, Sculpt *sd, const Brush *brush, bool use_original, float radius_scale, int *r_totnode)
 
static void calc_sculpt_normal (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3])
 
static void update_sculpt_normal (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void calc_local_y (ViewContext *vc, const float center[3], float y[3])
 
static void calc_brush_local_mat (const Brush *brush, Object *ob, float local_mat[4][4])
 
void SCULPT_tilt_apply_to_normal (float r_normal[3], StrokeCache *cache, const float tilt_strength)
 
void SCULPT_tilt_effective_normal_get (const SculptSession *ss, const Brush *brush, float r_no[3])
 
static void update_brush_local_mat (Sculpt *sd, Object *ob)
 
static void do_topology_rake_bmesh_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void bmesh_topology_rake (Sculpt *sd, Object *ob, PBVHNode **nodes, const int totnode, float bstrength)
 
static void do_mask_brush_draw_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_mask_brush_draw (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_mask_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_draw_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_draw_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_draw_sharp_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_draw_sharp_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_crease_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_crease_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_pinch_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_pinch_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_grab_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_grab_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_elastic_deform_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void do_elastic_deform_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
ePaintSymmetryAreas SCULPT_get_vertex_symm_area (const float co[3])
 
void SCULPT_flip_v3_by_symm_area (float v[3], const ePaintSymmetryFlags symm, const ePaintSymmetryAreas symmarea, const float pivot[3])
 
void SCULPT_flip_quat_by_symm_area (float quat[3], const ePaintSymmetryFlags symm, const ePaintSymmetryAreas symmarea, const float pivot[3])
 
void SCULPT_calc_brush_plane (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3], float r_area_co[3])
 
static void do_nudge_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_nudge_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_snake_hook_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_snake_hook_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_thumb_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_thumb_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_rotate_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_rotate_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_layer_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_layer_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_inflate_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_inflate_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
int SCULPT_plane_trim (const StrokeCache *cache, const Brush *brush, const float val[3])
 
static bool plane_point_side_flip (const float co[3], const float plane[4], const bool flip)
 
int SCULPT_plane_point_side (const float co[3], const float plane[4])
 
float SCULPT_brush_plane_offset_get (Sculpt *sd, SculptSession *ss)
 
static void do_flatten_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_flatten_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_gravity_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_gravity (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float bstrength)
 
void SCULPT_vertcos_to_key (Object *ob, KeyBlock *kb, const float(*vertCos)[3])
 
static void sculpt_topology_update (Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *UNUSED(ups))
 
static void do_brush_action_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void do_brush_action (Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups)
 
static void sculpt_flush_pbvhvert_deform (Object *ob, PBVHVertexIter *vd)
 
static void sculpt_combine_proxies_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void sculpt_combine_proxies (Sculpt *sd, Object *ob)
 
static void sculpt_update_keyblock (Object *ob)
 
static void SCULPT_flush_stroke_deform_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
void SCULPT_flush_stroke_deform (Sculpt *sd, Object *ob, bool is_proxy_used)
 
void SCULPT_cache_calc_brushdata_symm (StrokeCache *cache, const char symm, const char axis, const float angle)
 
static void do_tiled (Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups, BrushActionFunc action)
 
static void do_radial_symmetry (Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups, BrushActionFunc action, const char symm, const int axis, const float UNUSED(feather))
 
static void sculpt_fix_noise_tear (Sculpt *sd, Object *ob)
 
static void do_symmetrical_brush_actions (Sculpt *sd, Object *ob, BrushActionFunc action, UnifiedPaintSettings *ups)
 
static void sculpt_update_tex (const Scene *scene, Sculpt *sd, SculptSession *ss)
 
bool SCULPT_mode_poll (bContext *C)
 
bool SCULPT_vertex_colors_poll (bContext *C)
 
bool SCULPT_mode_poll_view3d (bContext *C)
 
bool SCULPT_poll_view3d (bContext *C)
 
bool SCULPT_poll (bContext *C)
 
static const char * sculpt_tool_name (Sculpt *sd)
 
void SCULPT_cache_free (StrokeCache *cache)
 
static void sculpt_init_mirror_clipping (Object *ob, SculptSession *ss)
 
static void sculpt_update_cache_invariants (bContext *C, Sculpt *sd, SculptSession *ss, wmOperator *op, const float mouse[2])
 
static float sculpt_brush_dynamic_size_get (Brush *brush, StrokeCache *cache, float initial_size)
 
static bool sculpt_needs_delta_from_anchored_origin (Brush *brush)
 
static bool sculpt_needs_delta_for_tip_orientation (Brush *brush)
 
static void sculpt_update_brush_delta (UnifiedPaintSettings *ups, Object *ob, Brush *brush)
 
static void sculpt_update_cache_paint_variants (StrokeCache *cache, const Brush *brush)
 
static void sculpt_update_cache_variants (bContext *C, Sculpt *sd, Object *ob, PointerRNA *ptr)
 
static bool sculpt_needs_connectivity_info (const Sculpt *sd, const Brush *brush, SculptSession *ss, int stroke_mode)
 
void SCULPT_stroke_modifiers_check (const bContext *C, Object *ob, const Brush *brush)
 
static void sculpt_raycast_cb (PBVHNode *node, void *data_v, float *tmin)
 
static void sculpt_find_nearest_to_ray_cb (PBVHNode *node, void *data_v, float *tmin)
 
float SCULPT_raycast_init (ViewContext *vc, const float mouse[2], float ray_start[3], float ray_end[3], float ray_normal[3], bool original)
 
bool SCULPT_cursor_geometry_info_update (bContext *C, SculptCursorGeometryInfo *out, const float mouse[2], bool use_sampled_normal)
 
bool SCULPT_stroke_get_location (bContext *C, float out[3], const float mouse[2])
 
static void sculpt_brush_init_tex (const Scene *scene, Sculpt *sd, SculptSession *ss)
 
static void sculpt_brush_stroke_init (bContext *C, wmOperator *op)
 
static void sculpt_restore_mesh (Sculpt *sd, Object *ob)
 
void SCULPT_update_object_bounding_box (Object *ob)
 
void SCULPT_flush_update_step (bContext *C, SculptUpdateType update_flags)
 
void SCULPT_flush_update_done (const bContext *C, Object *ob, SculptUpdateType update_flags)
 
static bool over_mesh (bContext *C, struct wmOperator *UNUSED(op), float x, float y)
 
static bool sculpt_stroke_test_start (bContext *C, struct wmOperator *op, const float mouse[2])
 
static void sculpt_stroke_update_step (bContext *C, struct PaintStroke *UNUSED(stroke), PointerRNA *itemptr)
 
static void sculpt_brush_exit_tex (Sculpt *sd)
 
static void sculpt_stroke_done (const bContext *C, struct PaintStroke *UNUSED(stroke))
 
static int sculpt_brush_stroke_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static int sculpt_brush_stroke_exec (bContext *C, wmOperator *op)
 
static void sculpt_brush_stroke_cancel (bContext *C, wmOperator *op)
 
static void SCULPT_OT_brush_stroke (wmOperatorType *ot)
 
static int sculpt_set_persistent_base_exec (bContext *C, wmOperator *UNUSED(op))
 
static void SCULPT_OT_set_persistent_base (wmOperatorType *ot)
 
static int sculpt_optimize_exec (bContext *C, wmOperator *UNUSED(op))
 
static void SCULPT_OT_optimize (wmOperatorType *ot)
 
static bool sculpt_no_multires_poll (bContext *C)
 
static int sculpt_symmetrize_exec (bContext *C, wmOperator *op)
 
static void SCULPT_OT_symmetrize (wmOperatorType *ot)
 
static void sculpt_init_session (Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
 
void ED_object_sculptmode_enter_ex (Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob, const bool force_dyntopo, ReportList *reports)
 
void ED_object_sculptmode_enter (struct bContext *C, Depsgraph *depsgraph, ReportList *reports)
 
void ED_object_sculptmode_exit_ex (Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
 
void ED_object_sculptmode_exit (bContext *C, Depsgraph *depsgraph)
 
static int sculpt_mode_toggle_exec (bContext *C, wmOperator *op)
 
static void SCULPT_OT_sculptmode_toggle (wmOperatorType *ot)
 
void SCULPT_geometry_preview_lines_update (bContext *C, SculptSession *ss, float radius)
 
static int vertex_to_loop_colors_exec (bContext *C, wmOperator *UNUSED(op))
 
static void SCULPT_OT_vertex_to_loop_colors (wmOperatorType *ot)
 
static int loop_to_vertex_colors_exec (bContext *C, wmOperator *UNUSED(op))
 
static void SCULPT_OT_loop_to_vertex_colors (wmOperatorType *ot)
 
static int sculpt_sample_color_invoke (bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(e))
 
static void SCULPT_OT_sample_color (wmOperatorType *ot)
 
static int SCULPT_vertex_get_connected_component (SculptSession *ss, int index)
 
static void SCULPT_fake_neighbor_init (SculptSession *ss, const float max_dist)
 
static void SCULPT_fake_neighbor_add (SculptSession *ss, int v_index_a, int v_index_b)
 
static void sculpt_pose_fake_neighbors_free (SculptSession *ss)
 
static void do_fake_neighbor_search_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void fake_neighbor_search_reduce (const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
 
static int SCULPT_fake_neighbor_search (Sculpt *sd, Object *ob, const int index, float max_distance)
 
static bool SCULPT_connected_components_floodfill_cb (SculptSession *ss, int from_v, int to_v, bool UNUSED(is_duplicate), void *userdata)
 
void SCULPT_connected_components_ensure (Object *ob)
 
void SCULPT_boundary_info_ensure (Object *object)
 
void SCULPT_fake_neighbors_ensure (Sculpt *sd, Object *ob, const float max_dist)
 
void SCULPT_fake_neighbors_enable (Object *ob)
 
void SCULPT_fake_neighbors_disable (Object *ob)
 
void SCULPT_fake_neighbors_free (Object *ob)
 
static float sculpt_mask_by_color_delta_get (const float *color_a, const float *color_b, const float threshold, const bool invert)
 
static float sculpt_mask_by_color_final_mask_get (const float current_mask, const float new_mask, const bool invert, const bool preserve_mask)
 
static void do_mask_by_color_contiguous_update_nodes_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static bool sculpt_mask_by_color_contiguous_floodfill_cb (SculptSession *ss, int from_v, int to_v, bool is_duplicate, void *userdata)
 
static void sculpt_mask_by_color_contiguous (Object *object, const int vertex, const float threshold, const bool invert, const bool preserve_mask)
 
static void do_mask_by_color_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void sculpt_mask_by_color_full_mesh (Object *object, const int vertex, const float threshold, const bool invert, const bool preserve_mask)
 
static int sculpt_mask_by_color_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static void SCULPT_OT_mask_by_color (wmOperatorType *ot)
 
void ED_operatortypes_sculpt (void)
 
Tool Capabilities

Avoid duplicate checks, internal logic only, share logic with rna_def_sculpt_capabilities where possible.

static bool sculpt_tool_needs_original (const char sculpt_tool)
 
static bool sculpt_tool_is_proxy_used (const char sculpt_tool)
 
static bool sculpt_brush_use_topology_rake (const SculptSession *ss, const Brush *brush)
 
static int sculpt_brush_needs_normal (const SculptSession *ss, const Brush *brush)
 
Sculpt Multires Displacement Eraser Brush
static void do_displacement_eraser_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_displacement_eraser_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
Sculpt Multires Displacement Smear Brush
static void do_displacement_smear_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_displacement_smear_store_prev_disp_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void do_displacement_smear_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
Sculpt Topology Brush
static void do_topology_slide_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
void SCULPT_relax_vertex (SculptSession *ss, PBVHVertexIter *vd, float factor, bool filter_boundary_face_sets, float *r_final_pos)
 
static void do_topology_relax_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_slide_relax_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void calc_sculpt_plane (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3], float r_area_co[3])
 
Sculpt Clay Thumb Brush
static void do_clay_thumb_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static float sculpt_clay_thumb_get_stabilized_pressure (StrokeCache *cache)
 
static void do_clay_thumb_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 

SculptProjectVector

Fast-path for project_plane_v3_v3v3

typedef struct SculptProjectVector SculptProjectVector
 
static void sculpt_project_v3_cache_init (SculptProjectVector *spvc, const float plane[3])
 
static void sculpt_project_v3 (const SculptProjectVector *spvc, const float vec[3], float r_vec[3])
 

Calculate Normal and Center

Calculate geometry surrounding the brush center. (optionally using original coordinates).

Functions are:

Note
These are all very similar, when changing one, check others.
typedef struct AreaNormalCenterTLSData AreaNormalCenterTLSData
 
static void calc_area_normal_and_center_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void calc_area_normal_and_center_reduce (const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
 
static void calc_area_center (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_co[3])
 
void SCULPT_calc_area_normal (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3])
 
bool SCULPT_pbvh_calc_area_normal (const Brush *brush, Object *ob, PBVHNode **nodes, int totnode, bool use_threading, float r_area_no[3])
 
static void calc_area_normal_and_center (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3], float r_area_co[3])
 

Sculpt Clay Brush

typedef struct ClaySampleData ClaySampleData
 
static void calc_clay_surface_task_cb (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void calc_clay_surface_reduce (const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
 
static void do_clay_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_clay_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_clay_strips_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_clay_strips_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_fill_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_fill_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 
static void do_scrape_brush_task_cb_ex (void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
 
static void do_scrape_brush (Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
 

Macro Definition Documentation

◆ MASK_BY_COLOR_SLOPE

#define MASK_BY_COLOR_SLOPE   0.25f

sculpt_mask_by_color_delta_get returns values in the (0,1) range that are used to generate the mask based on the difference between two colors (the active color and the color of any other vertex). Ideally, a threshold of 0 should mask only the colors that are equal to the active color and threshold of 1 should mask all colors. In order to avoid artifacts and produce softer falloffs in the mask, the MASK_BY_COLOR_SLOPE defines the size of the transition values between masked and unmasked vertices. The smaller this value is, the sharper the generated mask is going to be.

Definition at line 9128 of file sculpt.c.

◆ PIXEL_INPUT_THRESHHOLD

#define PIXEL_INPUT_THRESHHOLD   5

◆ SCULPT_TILT_SENSITIVITY

#define SCULPT_TILT_SENSITIVITY   0.7f

Definition at line 2848 of file sculpt.c.

◆ SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY

#define SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY   256

Definition at line 722 of file sculpt.c.

Typedef Documentation

◆ AreaNormalCenterTLSData

◆ BrushActionFunc

typedef void(* BrushActionFunc) (Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings *ups)

Definition at line 6448 of file sculpt.c.

◆ ClaySampleData

◆ MaskByColorContiguousFloodFillData

◆ NearestVertexFakeNeighborTLSData

◆ NearestVertexTLSData

◆ SculptProjectVector

◆ SculptTopologyIDFloodFillData

◆ StrokeFlags

typedef enum StrokeFlags StrokeFlags

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SCULPT_TOPOLOGY_ID_NONE 
SCULPT_TOPOLOGY_ID_DEFAULT 

Definition at line 8866 of file sculpt.c.

◆ StrokeFlags

Enumerator
CLIP_X 
CLIP_Y 
CLIP_Z 

Definition at line 1267 of file sculpt.c.

Function Documentation

◆ bmesh_topology_rake()

static void bmesh_topology_rake ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
const int  totnode,
float  bstrength 
)
static

◆ brush_strength()

static float brush_strength ( const Sculpt sd,
const StrokeCache cache,
const float  feather,
const UnifiedPaintSettings ups 
)
static

Return modified brush strength. Includes the direction of the brush, positive values pull vertices, negative values push. Uses tablet pressure and a special multiplier found experimentally to scale the strength factor.

Definition at line 2312 of file sculpt.c.

References alpha, BKE_brush_alpha_get(), BKE_brush_use_alpha_pressure(), BKE_paint_brush(), BLI_assert, BRUSH_CLOTH_DEFORM_EXPAND, BRUSH_CLOTH_DEFORM_GRAB, BRUSH_CLOTH_DEFORM_SNAKE_HOOK, BRUSH_DIR_IN, BRUSH_INVERT_TO_SCRAPE_FILL, BRUSH_MASK_DRAW, BRUSH_MASK_SMOOTH, Brush::cloth_deform_type, Brush::flag, invert(), StrokeCache::invert, Brush::mask_tool, UnifiedPaintSettings::overlap_factor, Sculpt::paint, StrokeCache::pen_flip, pow4f(), powf, StrokeCache::pressure, scene, ViewContext::scene, Brush::sculpt_tool, SCULPT_TOOL_BLOB, SCULPT_TOOL_BOUNDARY, SCULPT_TOOL_CLAY, SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_CLAY_THUMB, SCULPT_TOOL_CLOTH, SCULPT_TOOL_CREASE, SCULPT_TOOL_DISPLACEMENT_ERASER, SCULPT_TOOL_DISPLACEMENT_SMEAR, SCULPT_TOOL_DRAW, SCULPT_TOOL_DRAW_FACE_SETS, SCULPT_TOOL_DRAW_SHARP, SCULPT_TOOL_ELASTIC_DEFORM, SCULPT_TOOL_FILL, SCULPT_TOOL_FLATTEN, SCULPT_TOOL_GRAB, SCULPT_TOOL_INFLATE, SCULPT_TOOL_LAYER, SCULPT_TOOL_MASK, SCULPT_TOOL_MULTIPLANE_SCRAPE, SCULPT_TOOL_NUDGE, SCULPT_TOOL_PAINT, SCULPT_TOOL_PINCH, SCULPT_TOOL_POSE, SCULPT_TOOL_ROTATE, SCULPT_TOOL_SCRAPE, SCULPT_TOOL_SLIDE_RELAX, SCULPT_TOOL_SMEAR, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_SNAKE_HOOK, SCULPT_TOOL_THUMB, and StrokeCache::vc.

Referenced by do_symmetrical_brush_actions(), do_vpaint_brush_blur_task_cb_ex(), do_vpaint_brush_draw_task_cb_ex(), do_vpaint_brush_smear_task_cb_ex(), do_wpaint_brush_blur_task_cb_ex(), do_wpaint_brush_draw_task_cb_ex(), and do_wpaint_brush_smear_task_cb_ex().

◆ calc_area_center()

static void calc_area_center ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  r_area_co[3] 
)
static

◆ calc_area_normal_and_center()

static void calc_area_normal_and_center ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  r_area_no[3],
float  r_area_co[3] 
)
static

◆ calc_area_normal_and_center_reduce()

static void calc_area_normal_and_center_reduce ( const void *__restrict   UNUSEDuserdata,
void *__restrict  chunk_join,
void *__restrict  chunk 
)
static

◆ calc_area_normal_and_center_task_cb()

static void calc_area_normal_and_center_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ calc_brush_local_mat()

static void calc_brush_local_mat ( const Brush brush,
Object ob,
float  local_mat[4][4] 
)
static

◆ calc_clay_surface_reduce()

static void calc_clay_surface_reduce ( const void *__restrict   UNUSEDuserdata,
void *__restrict  chunk_join,
void *__restrict  chunk 
)
static

Definition at line 5040 of file sculpt.c.

References MIN2, and ClaySampleData::plane_dist.

Referenced by do_clay_brush().

◆ calc_clay_surface_task_cb()

static void calc_clay_surface_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ calc_local_y()

static void calc_local_y ( ViewContext vc,
const float  center[3],
float  y[3] 
)
static

◆ calc_overlap()

static float calc_overlap ( StrokeCache cache,
const char  symm,
const char  axis,
const float  angle 
)
static

◆ calc_radial_symmetry_feather()

static float calc_radial_symmetry_feather ( Sculpt sd,
StrokeCache cache,
const char  symm,
const char  axis 
)
static

Definition at line 1879 of file sculpt.c.

References angle(), calc_overlap(), M_PI, and Sculpt::radial_symm.

Referenced by calc_symmetry_feather().

◆ calc_sculpt_normal()

static void calc_sculpt_normal ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  r_area_no[3] 
)
static

◆ calc_sculpt_plane()

static void calc_sculpt_plane ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  r_area_no[3],
float  r_area_co[3] 
)
static

◆ calc_symmetry_feather()

static float calc_symmetry_feather ( Sculpt sd,
StrokeCache cache 
)
static

◆ do_brush_action()

static void do_brush_action ( Sculpt sd,
Object ob,
Brush brush,
UnifiedPaintSettings ups 
)
static

Definition at line 5906 of file sculpt.c.

References add_v3_v3(), StrokeCache::alt_smooth, StrokeCache::automasking, Brush::autosmooth_factor, UnifiedPaintSettings::average_stroke_accum, UnifiedPaintSettings::average_stroke_counter, BKE_pbvh_parallel_range_settings(), BKE_pbvh_search_gather(), BKE_pbvh_type(), BLI_assert, BLI_task_parallel_range(), bmesh_topology_rake(), BRUSH_ANCHORED, BRUSH_DEFORM_TARGET_CLOTH_SIM, BRUSH_DIR_IN, BRUSH_INVERSE_SMOOTH_PRESSURE, BRUSH_INVERT_TO_SCRAPE_FILL, MTex::brush_map_mode, BRUSH_ORIGINAL_NORMAL, BRUSH_SMOOTH_DEFORM_LAPLACIAN, BRUSH_SMOOTH_DEFORM_SURFACE, SculptSession::cache, StrokeCache::cloth_sim, copy_v3_v3(), Brush::deform_target, do_brush_action_task_cb(), do_clay_brush(), do_clay_strips_brush(), do_clay_thumb_brush(), do_crease_brush(), do_displacement_eraser_brush(), do_displacement_smear_brush(), do_draw_brush(), do_draw_sharp_brush(), do_elastic_deform_brush(), do_fill_brush(), do_flatten_brush(), do_grab_brush(), do_gravity(), do_inflate_brush(), do_layer_brush(), do_mask_brush(), do_nudge_brush(), do_pinch_brush(), do_rotate_brush(), do_scrape_brush(), do_slide_relax_brush(), do_snake_hook_brush(), do_thumb_brush(), ELEM, Brush::falloff_shape, Brush::flag, Sculpt::gravity_factor, invert(), StrokeCache::invert, UnifiedPaintSettings::last_stroke_valid, StrokeCache::location, MEM_callocN, MEM_SAFE_FREE, Brush::mtex, MTEX_MAP_MODE_AREA, mul_m4_v3(), NULL, Object::obmat, StrokeCache::original, StrokeCache::paint_face_set, PAINT_FALLOFF_SHAPE_SPHERE, SculptSession::pbvh, PBVH_BMESH, PBVH_FACES, StrokeCache::pen_flip, StrokeCache::pressure, Object::sculpt, SCULPT_active_face_set_get(), SCULPT_automasking_cache_init(), sculpt_brush_needs_normal(), sculpt_brush_use_topology_rake(), SCULPT_cloth_brush_affected_nodes_gather(), SCULPT_cloth_brush_do_simulation_step(), SCULPT_cloth_brush_ensure_nodes_constraints(), SCULPT_cloth_brush_simulation_create(), SCULPT_cloth_brush_simulation_init(), SCULPT_cloth_brush_store_simulation_state(), SCULPT_cloth_sim_activate_nodes(), SCULPT_do_boundary_brush(), SCULPT_do_cloth_brush(), SCULPT_do_draw_face_sets_brush(), SCULPT_do_multiplane_scrape_brush(), SCULPT_do_paint_brush(), SCULPT_do_pose_brush(), SCULPT_do_smear_brush(), SCULPT_do_smooth_brush(), SCULPT_do_surface_smooth_brush(), SCULPT_face_set_next_available_get(), SCULPT_is_automasking_enabled(), sculpt_pbvh_gather_generic(), SCULPT_pose_brush_init(), SCULPT_smooth(), SCULPT_stroke_is_first_brush_step(), SCULPT_stroke_is_main_symmetry_pass(), Brush::sculpt_tool, SCULPT_TOOL_BLOB, SCULPT_TOOL_BOUNDARY, SCULPT_TOOL_CLAY, SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_CLAY_THUMB, SCULPT_TOOL_CLOTH, SCULPT_TOOL_CREASE, SCULPT_TOOL_DISPLACEMENT_ERASER, SCULPT_TOOL_DISPLACEMENT_SMEAR, SCULPT_TOOL_DRAW, SCULPT_TOOL_DRAW_FACE_SETS, SCULPT_TOOL_DRAW_SHARP, SCULPT_TOOL_ELASTIC_DEFORM, SCULPT_TOOL_FILL, SCULPT_TOOL_FLATTEN, SCULPT_TOOL_GRAB, SCULPT_TOOL_INFLATE, SCULPT_TOOL_LAYER, SCULPT_TOOL_MASK, SCULPT_TOOL_MULTIPLANE_SCRAPE, SCULPT_tool_needs_all_pbvh_nodes(), sculpt_tool_needs_original(), SCULPT_TOOL_NUDGE, SCULPT_TOOL_PAINT, SCULPT_TOOL_PINCH, SCULPT_TOOL_POSE, SCULPT_TOOL_ROTATE, SCULPT_TOOL_SCRAPE, SCULPT_TOOL_SLIDE_RELAX, SCULPT_TOOL_SMEAR, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_SNAKE_HOOK, SCULPT_TOOL_THUMB, SCULPT_UNDO_FACE_SETS, SCULPT_undo_push_node(), SCULPT_vertex_count_get(), SculptThreadedTaskData::sd, Brush::smooth_deform_type, StrokeCache::supports_gravity, StrokeCache::surface_smooth_laplacian_disp, Brush::topology_rake_factor, StrokeCache::true_location, type, update_brush_local_mat(), and update_sculpt_normal().

Referenced by sculpt_stroke_update_step().

◆ do_brush_action_task_cb()

static void do_brush_action_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ do_clay_brush()

static void do_clay_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_clay_brush_task_cb_ex()

static void do_clay_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_clay_strips_brush()

static void do_clay_strips_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_clay_strips_brush_task_cb_ex()

static void do_clay_strips_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_clay_thumb_brush()

static void do_clay_thumb_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_clay_thumb_brush_task_cb_ex()

static void do_clay_thumb_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_crease_brush()

static void do_crease_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_crease_brush_task_cb_ex()

static void do_crease_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_displacement_eraser_brush()

static void do_displacement_eraser_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_displacement_eraser_brush_task_cb_ex()

static void do_displacement_eraser_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_displacement_smear_brush()

static void do_displacement_smear_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_displacement_smear_brush_task_cb_ex()

static void do_displacement_smear_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_displacement_smear_store_prev_disp_task_cb_ex()

static void do_displacement_smear_store_prev_disp_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ do_draw_brush()

static void do_draw_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_draw_brush_task_cb_ex()

static void do_draw_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_draw_sharp_brush()

static void do_draw_sharp_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_draw_sharp_brush_task_cb_ex()

static void do_draw_sharp_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_elastic_deform_brush()

static void do_elastic_deform_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_elastic_deform_brush_task_cb_ex()

static void do_elastic_deform_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ do_fake_neighbor_search_task_cb()

static void do_fake_neighbor_search_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_fill_brush()

static void do_fill_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_fill_brush_task_cb_ex()

static void do_fill_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_flatten_brush()

static void do_flatten_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_flatten_brush_task_cb_ex()

static void do_flatten_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_grab_brush()

static void do_grab_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_grab_brush_task_cb_ex()

static void do_grab_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_gravity()

static void do_gravity ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  bstrength 
)
static

◆ do_gravity_task_cb_ex()

static void do_gravity_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_inflate_brush()

static void do_inflate_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_inflate_brush_task_cb_ex()

static void do_inflate_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_layer_brush()

static void do_layer_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_layer_brush_task_cb_ex()

static void do_layer_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_mask_brush()

static void do_mask_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_mask_brush_draw()

static void do_mask_brush_draw ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_mask_brush_draw_task_cb_ex()

static void do_mask_brush_draw_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_mask_by_color_contiguous_update_nodes_cb()

static void do_mask_by_color_contiguous_update_nodes_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ do_mask_by_color_task_cb()

static void do_mask_by_color_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ do_nearest_vertex_get_task_cb()

static void do_nearest_vertex_get_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_nudge_brush()

static void do_nudge_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_nudge_brush_task_cb_ex()

static void do_nudge_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_pinch_brush()

static void do_pinch_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_pinch_brush_task_cb_ex()

static void do_pinch_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_radial_symmetry()

static void do_radial_symmetry ( Sculpt sd,
Object ob,
Brush brush,
UnifiedPaintSettings ups,
BrushActionFunc  action,
const char  symm,
const int  axis,
const float   UNUSEDfeather 
)
static

◆ do_rotate_brush()

static void do_rotate_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_rotate_brush_task_cb_ex()

static void do_rotate_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_scrape_brush()

static void do_scrape_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_scrape_brush_task_cb_ex()

static void do_scrape_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_slide_relax_brush()

static void do_slide_relax_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_snake_hook_brush()

static void do_snake_hook_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_snake_hook_brush_task_cb_ex()

static void do_snake_hook_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_symmetrical_brush_actions()

static void do_symmetrical_brush_actions ( Sculpt sd,
Object ob,
BrushActionFunc  action,
UnifiedPaintSettings ups 
)
static

◆ do_thumb_brush()

static void do_thumb_brush ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ do_thumb_brush_task_cb_ex()

static void do_thumb_brush_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_tiled()

static void do_tiled ( Sculpt sd,
Object ob,
Brush brush,
UnifiedPaintSettings ups,
BrushActionFunc  action 
)
static

◆ do_topology_rake_bmesh_task_cb_ex()

static void do_topology_rake_bmesh_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_topology_relax_task_cb_ex()

static void do_topology_relax_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ do_topology_slide_task_cb_ex()

static void do_topology_slide_task_cb_ex ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict  tls 
)
static

◆ ED_object_sculptmode_enter()

void ED_object_sculptmode_enter ( struct bContext C,
Depsgraph depsgraph,
ReportList reports 
)

◆ ED_object_sculptmode_enter_ex()

void ED_object_sculptmode_enter_ex ( Main bmain,
Depsgraph depsgraph,
Scene scene,
Object ob,
const bool  force_dyntopo,
ReportList reports 
)

◆ ED_object_sculptmode_exit()

void ED_object_sculptmode_exit ( bContext C,
Depsgraph depsgraph 
)

◆ ED_object_sculptmode_exit_ex()

void ED_object_sculptmode_exit_ex ( Main bmain,
Depsgraph depsgraph,
Scene scene,
Object ob 
)

◆ ED_operatortypes_sculpt()

void ED_operatortypes_sculpt ( void  )

◆ ED_sculpt_redraw_planes_get()

void ED_sculpt_redraw_planes_get ( float  planes[4][4],
ARegion region,
Object ob 
)

◆ fake_neighbor_search_reduce()

static void fake_neighbor_search_reduce ( const void *__restrict   UNUSEDuserdata,
void *__restrict  chunk_join,
void *__restrict  chunk 
)
static

◆ flip_qt()

static void flip_qt ( float  quat[3],
const ePaintSymmetryFlags  symm 
)
static

Definition at line 1853 of file sculpt.c.

References flip_qt_qt().

Referenced by SCULPT_flip_quat_by_symm_area().

◆ flip_v3()

static void flip_v3 ( float  v[3],
const ePaintSymmetryFlags  symm 
)
static

◆ frontface()

static float frontface ( const Brush br,
const float  sculpt_normal[3],
const short  no[3],
const float  fno[3] 
)
static

◆ loop_to_vertex_colors_exec()

static int loop_to_vertex_colors_exec ( bContext C,
wmOperator UNUSEDop 
)
static

◆ nearest_vertex_get_reduce()

static void nearest_vertex_get_reduce ( const void *__restrict   UNUSEDuserdata,
void *__restrict  chunk_join,
void *__restrict  chunk 
)
static

◆ over_mesh()

static bool over_mesh ( bContext C,
struct wmOperator UNUSEDop,
float  x,
float  y 
)
static

Definition at line 7892 of file sculpt.c.

References C, SCULPT_stroke_get_location(), x, and y.

Referenced by sculpt_brush_stroke_invoke(), and sculpt_stroke_test_start().

◆ paint_mesh_restore_co()

static void paint_mesh_restore_co ( Sculpt sd,
Object ob 
)
static

Disable multi-threading when dynamic-topology is enabled. Otherwise, new entries might be inserted by SCULPT_undo_push_node() into the GHash used internally by BM_log_original_vert_co() by a different thread. See T33787.

Definition at line 1518 of file sculpt.c.

References BKE_paint_brush(), BKE_pbvh_node_color_buffer_free(), BKE_pbvh_parallel_range_settings(), BKE_pbvh_search_gather(), BLI_task_parallel_range(), SculptSession::bm, data, MEM_SAFE_FREE, NULL, Sculpt::paint, paint_mesh_restore_co_task_cb(), SculptSession::pbvh, and Object::sculpt.

Referenced by sculpt_brush_stroke_cancel(), and sculpt_restore_mesh().

◆ paint_mesh_restore_co_task_cb()

static void paint_mesh_restore_co_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ plane_point_side_flip()

static bool plane_point_side_flip ( const float  co[3],
const float  plane[4],
const bool  flip 
)
static

Definition at line 4866 of file sculpt.c.

References plane_point_side_v3().

Referenced by do_clay_strips_brush_task_cb_ex().

◆ SCULPT_active_face_set_get()

int SCULPT_active_face_set_get ( SculptSession ss)

◆ SCULPT_active_vertex_co_get()

const float* SCULPT_active_vertex_co_get ( SculptSession ss)

◆ SCULPT_active_vertex_get()

int SCULPT_active_vertex_get ( SculptSession ss)

◆ SCULPT_active_vertex_normal_get()

void SCULPT_active_vertex_normal_get ( SculptSession ss,
float  normal[3] 
)

Definition at line 290 of file sculpt.c.

References normal, SCULPT_active_vertex_get(), and SCULPT_vertex_normal_get().

Referenced by sculpt_mask_expand_invoke().

◆ SCULPT_boundary_info_ensure()

void SCULPT_boundary_info_ensure ( Object object)

◆ SCULPT_brush_deform_target_vertex_co_get()

float* SCULPT_brush_deform_target_vertex_co_get ( SculptSession ss,
const int  deform_target,
PBVHVertexIter iter 
)

◆ sculpt_brush_dynamic_size_get()

static float sculpt_brush_dynamic_size_get ( Brush brush,
StrokeCache cache,
float  initial_size 
)
static

◆ sculpt_brush_exit_tex()

static void sculpt_brush_exit_tex ( Sculpt sd)
static

◆ SCULPT_brush_frontface_normal_from_falloff_shape()

const float* SCULPT_brush_frontface_normal_from_falloff_shape ( SculptSession ss,
char  falloff_shape 
)

◆ sculpt_brush_init_tex()

static void sculpt_brush_init_tex ( const Scene scene,
Sculpt sd,
SculptSession ss 
)
static

◆ sculpt_brush_needs_normal()

static int sculpt_brush_needs_normal ( const SculptSession ss,
const Brush brush 
)
static

◆ sculpt_brush_needs_rake_rotation()

static bool sculpt_brush_needs_rake_rotation ( const Brush brush)
static

Definition at line 1262 of file sculpt.c.

References Brush::rake_factor, Brush::sculpt_tool, and SCULPT_TOOL_HAS_RAKE.

Referenced by sculpt_update_brush_delta().

◆ SCULPT_brush_plane_offset_get()

float SCULPT_brush_plane_offset_get ( Sculpt sd,
SculptSession ss 
)

◆ SCULPT_brush_strength_factor()

float SCULPT_brush_strength_factor ( SculptSession ss,
const Brush br,
const float  brush_point[3],
const float  len,
const short  vno[3],
const float  fno[3],
const float  mask,
const int  vertex_index,
const int  thread_id 
)

Definition at line 2463 of file sculpt.c.

References StrokeCache::automasking, BKE_brush_curve_strength(), BKE_brush_sample_tex_3d(), StrokeCache::brush_local_mat, MTex::brush_map_mode, SculptSession::cache, ED_view3d_project_float_v2_m4(), flip_v3_v3(), frontface(), StrokeCache::hardness, len, mask(), StrokeCache::mirror_symmetry_pass, Brush::mtex, MTEX_MAP_MODE_3D, MTEX_MAP_MODE_AREA, mul_m4_v3(), MTex::ofs, StrokeCache::paint_brush, paint_get_tex_pixel(), StrokeCache::plane_offset, StrokeCache::projection_mat, StrokeCache::radial_symmetry_pass, StrokeCache::radius, ViewContext::region, scene, ViewContext::scene, SCULPT_automasking_factor_get(), MTex::size, sub_v3_v3v3(), StrokeCache::symm_rot_mat_inv, MTex::tex, SculptSession::tex_pool, SculptSession::texcache, Brush::texture_sample_bias, StrokeCache::vc, StrokeCache::view_normal, x, and y.

Referenced by calc_multiplane_scrape_surface_task_cb(), do_clay_brush_task_cb_ex(), do_clay_strips_brush_task_cb_ex(), do_clay_thumb_brush_task_cb_ex(), do_cloth_brush_apply_forces_task_cb_ex(), do_color_smooth_task_cb_exec(), do_crease_brush_task_cb_ex(), do_displacement_eraser_brush_task_cb_ex(), do_displacement_smear_brush_task_cb_ex(), do_draw_brush_task_cb_ex(), do_draw_face_sets_brush_task_cb_ex(), do_draw_sharp_brush_task_cb_ex(), do_enhance_details_brush_task_cb_ex(), do_fill_brush_task_cb_ex(), do_flatten_brush_task_cb_ex(), do_grab_brush_task_cb_ex(), do_gravity_task_cb_ex(), do_inflate_brush_task_cb_ex(), do_layer_brush_task_cb_ex(), do_mask_brush_draw_task_cb_ex(), do_multiplane_scrape_brush_task_cb_ex(), do_nudge_brush_task_cb_ex(), do_paint_brush_task_cb_ex(), do_pinch_brush_task_cb_ex(), do_relax_face_sets_brush_task_cb_ex(), do_rotate_brush_task_cb_ex(), do_scrape_brush_task_cb_ex(), do_smear_brush_task_cb_exec(), do_smooth_brush_task_cb_ex(), do_snake_hook_brush_task_cb_ex(), do_thumb_brush_task_cb_ex(), do_topology_rake_bmesh_task_cb_ex(), do_topology_relax_task_cb_ex(), do_topology_slide_task_cb_ex(), SCULPT_do_surface_smooth_brush_displace_task_cb_ex(), and SCULPT_do_surface_smooth_brush_laplacian_task_cb_ex().

◆ sculpt_brush_stroke_cancel()

static void sculpt_brush_stroke_cancel ( bContext C,
wmOperator op 
)
static

◆ sculpt_brush_stroke_exec()

static int sculpt_brush_stroke_exec ( bContext C,
wmOperator op 
)
static

◆ sculpt_brush_stroke_init()

static void sculpt_brush_stroke_init ( bContext C,
wmOperator op 
)
static

◆ sculpt_brush_stroke_invoke()

static int sculpt_brush_stroke_invoke ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ SCULPT_brush_test_circle_sq()

bool SCULPT_brush_test_circle_sq ( SculptBrushTest test,
const float  co[3] 
)

◆ sculpt_brush_test_clipping()

BLI_INLINE bool sculpt_brush_test_clipping ( const SculptBrushTest test,
const float  co[3] 
)

◆ SCULPT_brush_test_cube()

bool SCULPT_brush_test_cube ( SculptBrushTest test,
const float  co[3],
const float  local[4][4],
const float  roundness 
)

◆ SCULPT_brush_test_init()

void SCULPT_brush_test_init ( SculptSession ss,
SculptBrushTest test 
)

◆ SCULPT_brush_test_init_with_falloff_shape()

SculptBrushTestFn SCULPT_brush_test_init_with_falloff_shape ( SculptSession ss,
SculptBrushTest test,
char  falloff_shape 
)

Definition at line 1770 of file sculpt.c.

References SculptSession::cache, SculptBrushTest::location, PAINT_FALLOFF_SHAPE_SPHERE, plane_from_point_normal_v3(), SculptBrushTest::plane_view, SCULPT_brush_test_circle_sq(), SCULPT_brush_test_init(), SCULPT_brush_test_sphere_sq(), and StrokeCache::view_normal.

Referenced by calc_area_normal_and_center_task_cb(), calc_clay_surface_task_cb(), calc_multiplane_scrape_surface_task_cb(), do_clay_brush_task_cb_ex(), do_clay_thumb_brush_task_cb_ex(), do_cloth_brush_apply_forces_task_cb_ex(), do_color_smooth_task_cb_exec(), do_crease_brush_task_cb_ex(), do_displacement_eraser_brush_task_cb_ex(), do_displacement_smear_brush_task_cb_ex(), do_draw_brush_task_cb_ex(), do_draw_face_sets_brush_task_cb_ex(), do_draw_sharp_brush_task_cb_ex(), do_enhance_details_brush_task_cb_ex(), do_fill_brush_task_cb_ex(), do_flatten_brush_task_cb_ex(), do_grab_brush_task_cb_ex(), do_gravity_task_cb_ex(), do_inflate_brush_task_cb_ex(), do_layer_brush_task_cb_ex(), do_mask_brush_draw_task_cb_ex(), do_multiplane_scrape_brush_task_cb_ex(), do_nudge_brush_task_cb_ex(), do_paint_brush_task_cb_ex(), do_pinch_brush_task_cb_ex(), do_relax_face_sets_brush_task_cb_ex(), do_rotate_brush_task_cb_ex(), do_sample_wet_paint_task_cb(), do_scrape_brush_task_cb_ex(), do_smear_brush_task_cb_exec(), do_smooth_brush_task_cb_ex(), do_snake_hook_brush_task_cb_ex(), do_thumb_brush_task_cb_ex(), do_topology_rake_bmesh_task_cb_ex(), do_topology_relax_task_cb_ex(), do_topology_slide_task_cb_ex(), do_vpaint_brush_blur_task_cb_ex(), do_vpaint_brush_calc_average_color_cb_ex(), do_vpaint_brush_draw_task_cb_ex(), do_vpaint_brush_smear_task_cb_ex(), do_wpaint_brush_blur_task_cb_ex(), do_wpaint_brush_calc_average_weight_cb_ex(), do_wpaint_brush_draw_task_cb_ex(), do_wpaint_brush_smear_task_cb_ex(), SCULPT_do_surface_smooth_brush_displace_task_cb_ex(), and SCULPT_do_surface_smooth_brush_laplacian_task_cb_ex().

◆ SCULPT_brush_test_sphere()

bool SCULPT_brush_test_sphere ( SculptBrushTest test,
const float  co[3] 
)

◆ SCULPT_brush_test_sphere_fast()

bool SCULPT_brush_test_sphere_fast ( const SculptBrushTest test,
const float  co[3] 
)

◆ SCULPT_brush_test_sphere_sq()

bool SCULPT_brush_test_sphere_sq ( SculptBrushTest test,
const float  co[3] 
)

◆ sculpt_brush_use_topology_rake()

static bool sculpt_brush_use_topology_rake ( const SculptSession ss,
const Brush brush 
)
static

◆ SCULPT_cache_calc_brushdata_symm()

void SCULPT_cache_calc_brushdata_symm ( StrokeCache cache,
const char  symm,
const char  axis,
const float  angle 
)

◆ SCULPT_cache_free()

void SCULPT_cache_free ( StrokeCache cache)

◆ SCULPT_calc_area_normal()

void SCULPT_calc_area_normal ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  r_area_no[3] 
)

◆ SCULPT_calc_brush_plane()

void SCULPT_calc_brush_plane ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode,
float  r_area_no[3],
float  r_area_co[3] 
)

◆ sculpt_check_boundary_vertex_in_base_mesh()

static bool sculpt_check_boundary_vertex_in_base_mesh ( const SculptSession ss,
const int  index 
)
static

◆ sculpt_check_unique_face_set_for_edge_in_base_mesh()

static bool sculpt_check_unique_face_set_for_edge_in_base_mesh ( SculptSession ss,
int  v1,
int  v2 
)
static

Checks if the face sets of the adjacent faces to the edge between v1 and v2 in the base mesh are equal.

Definition at line 641 of file sculpt.c.

References abs(), MeshElemMap::count, SculptSession::face_sets, MeshElemMap::indices, l, MPoly::loopstart, SculptSession::mloop, SculptSession::mpoly, SculptSession::pmap, MPoly::totloop, MLoop::v, v1, and v2.

Referenced by SCULPT_vertex_has_unique_face_set().

◆ sculpt_check_unique_face_set_in_base_mesh()

static bool sculpt_check_unique_face_set_in_base_mesh ( SculptSession ss,
int  index 
)
static

◆ SCULPT_check_vertex_pivot_symmetry()

bool SCULPT_check_vertex_pivot_symmetry ( const float  vco[3],
const float  pco[3],
const char  symm 
)

◆ sculpt_clay_thumb_get_stabilized_pressure()

static float sculpt_clay_thumb_get_stabilized_pressure ( StrokeCache cache)
static

◆ SCULPT_clip()

void SCULPT_clip ( Sculpt sd,
SculptSession ss,
float  co[3],
const float  val[3] 
)

◆ sculpt_combine_proxies()

static void sculpt_combine_proxies ( Sculpt sd,
Object ob 
)
static

◆ sculpt_combine_proxies_task_cb()

static void sculpt_combine_proxies_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ SCULPT_connected_components_ensure()

void SCULPT_connected_components_ensure ( Object ob)

◆ SCULPT_connected_components_floodfill_cb()

static bool SCULPT_connected_components_floodfill_cb ( SculptSession ss,
int  from_v,
int  to_v,
bool   UNUSEDis_duplicate,
void *  userdata 
)
static

◆ SCULPT_cursor_geometry_info_update()

bool SCULPT_cursor_geometry_info_update ( bContext C,
SculptCursorGeometryInfo out,
const float  mouse[2],
bool  use_sampled_normal 
)

Definition at line 7452 of file sculpt.c.

References SculptRaycastData::active_face_grid_index, SculptSession::active_face_index, SculptSession::active_grid_index, SculptCursorGeometryInfo::active_vertex_co, SculptSession::active_vertex_index, SculptRaycastData::active_vertex_index, add_v3_v3(), BKE_brush_size_get(), BKE_brush_unprojected_radius_get(), BKE_brush_use_locked_size(), BKE_paint_brush(), BKE_paint_get_active_from_context(), BKE_pbvh_raycast(), BKE_pbvh_type(), C, copy_m3_m4(), copy_v3_v3(), CTX_data_depsgraph_pointer(), CTX_data_scene(), SculptSession::cursor_location, SculptSession::cursor_normal, SculptSession::cursor_radius, SculptSession::cursor_sampled_normal, SculptSession::cursor_view_normal, depsgraph, SculptRaycastData::depth, ED_view3d_viewcontext_init(), SculptRaycastData::face_normal, SculptRaycastData::hit, Object::imat, invert_m4_m4(), SculptRaycastData::isect_precalc, isect_ray_tri_watertight_v3_precalc(), SculptCursorGeometryInfo::location, MEM_SAFE_FREE, mul_m3_v3(), mul_v3_fl(), SculptCursorGeometryInfo::normal, normalize_v3_v3(), ViewContext::obact, Object::obmat, SculptRaycastData::original, paint_calc_object_space_radius(), SculptSession::pbvh, PBVH_BMESH, PBVH_FACES, PBVH_GRIDS, SculptSession::rv3d, ViewContext::rv3d, scene, Object::sculpt, ToolSettings::sculpt, SCULPT_active_vertex_co_get(), SCULPT_pbvh_calc_area_normal(), sculpt_pbvh_gather_cursor_update(), sculpt_raycast_cb(), SCULPT_raycast_init(), SCULPT_stroke_modifiers_check(), SCULPT_vertex_random_access_ensure(), Scene::toolsettings, SculptSession::v3d, ViewContext::v3d, RegionView3D::viewinv, and zero_v3().

Referenced by ED_sculpt_face_sets_active_update_and_get(), paint_cursor_sculpt_session_update_and_init(), sample_detail_voxel(), sculpt_cloth_filter_invoke(), sculpt_color_filter_invoke(), sculpt_expand_target_vertex_update_and_get(), sculpt_face_set_edit_invoke(), sculpt_face_sets_change_visibility_invoke(), sculpt_mask_by_color_invoke(), sculpt_mask_expand_invoke(), sculpt_mask_expand_modal(), sculpt_mesh_filter_invoke(), sculpt_trim_gesture_box_invoke(), and sculpt_trim_gesture_lasso_invoke().

◆ sculpt_extend_redraw_rect_previous()

static void sculpt_extend_redraw_rect_previous ( Object ob,
rcti rect 
)
static

◆ SCULPT_face_set_next_available_get()

int SCULPT_face_set_next_available_get ( SculptSession ss)

◆ SCULPT_face_set_visibility_set()

void SCULPT_face_set_visibility_set ( SculptSession ss,
int  face_set,
bool  visible 
)

◆ SCULPT_face_sets_visibility_all_set()

void SCULPT_face_sets_visibility_all_set ( SculptSession ss,
bool  visible 
)

◆ SCULPT_face_sets_visibility_invert()

void SCULPT_face_sets_visibility_invert ( SculptSession ss)

◆ SCULPT_fake_neighbor_add()

static void SCULPT_fake_neighbor_add ( SculptSession ss,
int  v_index_a,
int  v_index_b 
)
static

◆ SCULPT_fake_neighbor_init()

static void SCULPT_fake_neighbor_init ( SculptSession ss,
const float  max_dist 
)
static

◆ SCULPT_fake_neighbor_search()

static int SCULPT_fake_neighbor_search ( Sculpt sd,
Object ob,
const int  index,
float  max_distance 
)
static

◆ SCULPT_fake_neighbors_disable()

void SCULPT_fake_neighbors_disable ( Object ob)

◆ SCULPT_fake_neighbors_enable()

void SCULPT_fake_neighbors_enable ( Object ob)

◆ SCULPT_fake_neighbors_ensure()

void SCULPT_fake_neighbors_ensure ( Sculpt sd,
Object ob,
const float  max_dist 
)

◆ SCULPT_fake_neighbors_free()

void SCULPT_fake_neighbors_free ( Object ob)

Definition at line 9113 of file sculpt.c.

References Object::sculpt, and sculpt_pose_fake_neighbors_free().

Referenced by SCULPT_flush_update_done().

◆ sculpt_find_nearest_to_ray_cb()

static void sculpt_find_nearest_to_ray_cb ( PBVHNode node,
void *  data_v,
float tmin 
)
static

◆ sculpt_fix_noise_tear()

static void sculpt_fix_noise_tear ( Sculpt sd,
Object ob 
)
static

Noise texture gives different values for the same input coord; this can tear a multi-resolution mesh during sculpting so do a stitch in this case.

Definition at line 6533 of file sculpt.c.

References SculptSession::active, BKE_paint_brush(), Brush::mtex, SculptSession::multires, multires_stitch_grids(), Sculpt::paint, Object::sculpt, MTex::tex, TEX_NOISE, and Tex::type.

Referenced by sculpt_stroke_update_step().

◆ SCULPT_flip_quat_by_symm_area()

void SCULPT_flip_quat_by_symm_area ( float  quat[3],
const ePaintSymmetryFlags  symm,
const ePaintSymmetryAreas  symmarea,
const float  pivot[3] 
)

Definition at line 4209 of file sculpt.c.

References flip_qt().

Referenced by SCULPT_do_pose_brush(), and sculpt_transform_matrices_init().

◆ SCULPT_flip_v3_by_symm_area()

void SCULPT_flip_v3_by_symm_area ( float  v[3],
const ePaintSymmetryFlags  symm,
const ePaintSymmetryAreas  symmarea,
const float  pivot[3] 
)

◆ SCULPT_floodfill_add_active()

void SCULPT_floodfill_add_active ( Sculpt sd,
Object ob,
SculptSession ss,
SculptFloodFill flood,
float  radius 
)

◆ SCULPT_floodfill_add_and_skip_initial()

void SCULPT_floodfill_add_and_skip_initial ( SculptFloodFill flood,
int  index 
)

◆ SCULPT_floodfill_add_initial()

void SCULPT_floodfill_add_initial ( SculptFloodFill flood,
int  index 
)

◆ SCULPT_floodfill_add_initial_with_symmetry()

void SCULPT_floodfill_add_initial_with_symmetry ( Sculpt sd,
Object ob,
SculptSession ss,
SculptFloodFill flood,
int  index,
float  radius 
)

◆ SCULPT_floodfill_execute()

void SCULPT_floodfill_execute ( SculptSession ss,
SculptFloodFill flood,
bool(*)(SculptSession *ss, int from_v, int to_v, bool is_duplicate, void *userdata)  func,
void *  userdata 
)

◆ SCULPT_floodfill_free()

void SCULPT_floodfill_free ( SculptFloodFill flood)

◆ SCULPT_floodfill_init()

void SCULPT_floodfill_init ( SculptSession ss,
SculptFloodFill flood 
)

◆ sculpt_flush_pbvhvert_deform()

static void sculpt_flush_pbvhvert_deform ( Object ob,
PBVHVertexIter vd 
)
static

◆ SCULPT_flush_stroke_deform()

void SCULPT_flush_stroke_deform ( Sculpt sd,
Object ob,
bool  is_proxy_used 
)

◆ SCULPT_flush_stroke_deform_task_cb()

static void SCULPT_flush_stroke_deform_task_cb ( void *__restrict  userdata,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ SCULPT_flush_update_done()

void SCULPT_flush_update_done ( const bContext C,
Object ob,
SculptUpdateType  update_flags 
)

◆ SCULPT_flush_update_step()

void SCULPT_flush_update_step ( bContext C,
SculptUpdateType  update_flags 
)

◆ SCULPT_geometry_preview_lines_update()

void SCULPT_geometry_preview_lines_update ( bContext C,
SculptSession ss,
float  radius 
)

◆ SCULPT_get_redraw_rect()

bool SCULPT_get_redraw_rect ( ARegion region,
RegionView3D rv3d,
Object ob,
rcti rect 
)

◆ SCULPT_get_vertex_symm_area()

ePaintSymmetryAreas SCULPT_get_vertex_symm_area ( const float  co[3])

◆ sculpt_init_mirror_clipping()

static void sculpt_init_mirror_clipping ( Object ob,
SculptSession ss 
)
static

◆ sculpt_init_session()

static void sculpt_init_session ( Main bmain,
Depsgraph depsgraph,
Scene scene,
Object ob 
)
static

◆ SCULPT_is_symmetry_iteration_valid()

bool SCULPT_is_symmetry_iteration_valid ( char  i,
char  symm 
)

◆ SCULPT_is_vertex_inside_brush_radius_symm()

bool SCULPT_is_vertex_inside_brush_radius_symm ( const float  vertex[3],
const float  br_co[3],
float  radius,
char  symm 
)

Definition at line 1048 of file sculpt.c.

References flip_v3_v3(), len_squared_v3v3(), and SCULPT_is_symmetry_iteration_valid().

Referenced by automask_floodfill_cb().

◆ sculpt_mask_by_color_contiguous()

static void sculpt_mask_by_color_contiguous ( Object object,
const int  vertex,
const float  threshold,
const bool  invert,
const bool  preserve_mask 
)
static

◆ sculpt_mask_by_color_contiguous_floodfill_cb()

static bool sculpt_mask_by_color_contiguous_floodfill_cb ( SculptSession ss,
int  from_v,
int  to_v,
bool  is_duplicate,
void *  userdata 
)
static

◆ sculpt_mask_by_color_delta_get()

static float sculpt_mask_by_color_delta_get ( const float color_a,
const float color_b,
const float  threshold,
const bool  invert 
)
static

◆ sculpt_mask_by_color_final_mask_get()

static float sculpt_mask_by_color_final_mask_get ( const float  current_mask,
const float  new_mask,
const bool  invert,
const bool  preserve_mask 
)
static

Definition at line 9155 of file sculpt.c.

References invert(), max_ff(), and min_ff().

Referenced by do_mask_by_color_contiguous_update_nodes_cb(), and do_mask_by_color_task_cb().

◆ sculpt_mask_by_color_full_mesh()

static void sculpt_mask_by_color_full_mesh ( Object object,
const int  vertex,
const float  threshold,
const bool  invert,
const bool  preserve_mask 
)
static

◆ sculpt_mask_by_color_invoke()

static int sculpt_mask_by_color_invoke ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ SCULPT_mesh_deformed_mverts_get()

MVert* SCULPT_mesh_deformed_mverts_get ( SculptSession ss)

◆ SCULPT_mesh_symmetry_xyz_get()

char SCULPT_mesh_symmetry_xyz_get ( Object object)

◆ SCULPT_mode_poll()

bool SCULPT_mode_poll ( bContext C)

◆ SCULPT_mode_poll_view3d()

bool SCULPT_mode_poll_view3d ( bContext C)

◆ sculpt_mode_toggle_exec()

static int sculpt_mode_toggle_exec ( bContext C,
wmOperator op 
)
static

◆ SCULPT_nearest_vertex_get()

int SCULPT_nearest_vertex_get ( Sculpt sd,
Object ob,
const float  co[3],
float  max_distance,
bool  use_original 
)

◆ sculpt_needs_connectivity_info()

static bool sculpt_needs_connectivity_info ( const Sculpt sd,
const Brush brush,
SculptSession ss,
int  stroke_mode 
)
static

◆ sculpt_needs_delta_for_tip_orientation()

static bool sculpt_needs_delta_for_tip_orientation ( Brush brush)
static

◆ sculpt_needs_delta_from_anchored_origin()

static bool sculpt_needs_delta_from_anchored_origin ( Brush brush)
static

◆ sculpt_no_multires_poll()

static bool sculpt_no_multires_poll ( bContext C)
static

◆ sculpt_optimize_exec()

static int sculpt_optimize_exec ( bContext C,
wmOperator UNUSEDop 
)
static

◆ SCULPT_orig_vert_data_init()

void SCULPT_orig_vert_data_init ( SculptOrigVertData data,
Object ob,
PBVHNode node 
)

◆ SCULPT_orig_vert_data_unode_init()

void SCULPT_orig_vert_data_unode_init ( SculptOrigVertData data,
Object ob,
SculptUndoNode unode 
)

Initialize a SculptOrigVertData for accessing original vertex data; handles BMesh, Mesh, and multi-resolution.

Definition at line 1277 of file sculpt.c.

References SculptSession::bm, bm, SculptSession::bm_log, data, and Object::sculpt.

Referenced by paint_mesh_restore_co_task_cb(), and SCULPT_orig_vert_data_init().

◆ SCULPT_orig_vert_data_update()

void SCULPT_orig_vert_data_update ( SculptOrigVertData orig_data,
PBVHVertexIter iter 
)

◆ SCULPT_OT_brush_stroke()

static void SCULPT_OT_brush_stroke ( wmOperatorType ot)
static

◆ SCULPT_OT_loop_to_vertex_colors()

static void SCULPT_OT_loop_to_vertex_colors ( wmOperatorType ot)
static

◆ SCULPT_OT_mask_by_color()

static void SCULPT_OT_mask_by_color ( wmOperatorType ot)
static

◆ SCULPT_OT_optimize()

static void SCULPT_OT_optimize ( wmOperatorType ot)
static

◆ SCULPT_OT_sample_color()

static void SCULPT_OT_sample_color ( wmOperatorType ot)
static

◆ SCULPT_OT_sculptmode_toggle()

static void SCULPT_OT_sculptmode_toggle ( wmOperatorType ot)
static

◆ SCULPT_OT_set_persistent_base()

static void SCULPT_OT_set_persistent_base ( wmOperatorType ot)
static

◆ SCULPT_OT_symmetrize()

static void SCULPT_OT_symmetrize ( wmOperatorType ot)
static

◆ SCULPT_OT_vertex_to_loop_colors()

static void SCULPT_OT_vertex_to_loop_colors ( wmOperatorType ot)
static

◆ SCULPT_pbvh_calc_area_normal()

bool SCULPT_pbvh_calc_area_normal ( const Brush brush,
Object ob,
PBVHNode **  nodes,
int  totnode,
bool  use_threading,
float  r_area_no[3] 
)

◆ sculpt_pbvh_gather_cursor_update()

static PBVHNode** sculpt_pbvh_gather_cursor_update ( Object ob,
Sculpt sd,
bool  use_original,
int *  r_totnode 
)
static

◆ sculpt_pbvh_gather_generic()

static PBVHNode** sculpt_pbvh_gather_generic ( Object ob,
Sculpt sd,
const Brush brush,
bool  use_original,
float  radius_scale,
int *  r_totnode 
)
static

◆ SCULPT_plane_point_side()

int SCULPT_plane_point_side ( const float  co[3],
const float  plane[4] 
)

◆ SCULPT_plane_trim()

int SCULPT_plane_trim ( const StrokeCache cache,
const Brush brush,
const float  val[3] 
)

◆ SCULPT_poll()

bool SCULPT_poll ( bContext C)

Definition at line 6625 of file sculpt.c.

References C, paint_poll(), and SCULPT_mode_poll().

Referenced by SCULPT_OT_brush_stroke(), and SCULPT_poll_view3d().

◆ SCULPT_poll_view3d()

bool SCULPT_poll_view3d ( bContext C)

Definition at line 6620 of file sculpt.c.

References C, CTX_wm_region_view3d(), and SCULPT_poll().

◆ sculpt_pose_fake_neighbors_free()

static void sculpt_pose_fake_neighbors_free ( SculptSession ss)
static

◆ sculpt_project_v3()

static void sculpt_project_v3 ( const SculptProjectVector spvc,
const float  vec[3],
float  r_vec[3] 
)
static

◆ sculpt_project_v3_cache_init()

static void sculpt_project_v3_cache_init ( SculptProjectVector spvc,
const float  plane[3] 
)
static

◆ sculpt_project_v3_normal_align()

static void sculpt_project_v3_normal_align ( SculptSession ss,
const float  normal_weight,
float  grab_delta[3] 
)
static

Align the grab delta to the brush normal.

Parameters
grab_deltaTypically from ss->cache->grab_delta_symmetry.

Definition at line 1376 of file sculpt.c.

References SculptSession::cache, dot_v3v3(), fabsf, madd_v3_v3fl(), mul_v3_fl(), project_plane_v3_v3v3(), StrokeCache::sculpt_normal_symm, and StrokeCache::view_normal.

Referenced by do_elastic_deform_brush(), do_grab_brush(), and do_snake_hook_brush().

◆ sculpt_rake_data_update()

static void sculpt_rake_data_update ( struct SculptRakeData srd,
const float  co[3] 
)
static

◆ sculpt_rake_rotate()

static void sculpt_rake_rotate ( const SculptSession ss,
const float  sculpt_co[3],
const float  v_co[3],
float  factor,
float  r_delta[3] 
)
static

◆ sculpt_raycast_cb()

static void sculpt_raycast_cb ( PBVHNode node,
void *  data_v,
float tmin 
)
static

◆ SCULPT_raycast_init()

float SCULPT_raycast_init ( ViewContext vc,
const float  mouse[2],
float  ray_start[3],
float  ray_end[3],
float  ray_normal[3],
bool  original 
)

◆ SCULPT_relax_vertex()

void SCULPT_relax_vertex ( SculptSession ss,
PBVHVertexIter vd,
float  factor,
bool  filter_boundary_face_sets,
float r_final_pos 
)

◆ sculpt_restore_mesh()

static void sculpt_restore_mesh ( Sculpt sd,
Object ob 
)
static

◆ sculpt_sample_color_invoke()

static int sculpt_sample_color_invoke ( bContext C,
wmOperator UNUSEDop,
const wmEvent UNUSED
)
static

◆ SCULPT_search_circle_cb()

bool SCULPT_search_circle_cb ( PBVHNode node,
void *  data_v 
)

◆ SCULPT_search_sphere_cb()

bool SCULPT_search_sphere_cb ( PBVHNode node,
void *  data_v 
)

◆ sculpt_set_persistent_base_exec()

static int sculpt_set_persistent_base_exec ( bContext C,
wmOperator UNUSEDop 
)
static

◆ sculpt_stroke_done()

static void sculpt_stroke_done ( const bContext C,
struct PaintStroke UNUSEDstroke 
)
static

◆ SCULPT_stroke_get_location()

bool SCULPT_stroke_get_location ( bContext C,
float  out[3],
const float  mouse[2] 
)

◆ SCULPT_stroke_is_dynamic_topology()

bool SCULPT_stroke_is_dynamic_topology ( const SculptSession ss,
const Brush brush 
)

◆ SCULPT_stroke_is_first_brush_step()

bool SCULPT_stroke_is_first_brush_step ( StrokeCache cache)

Return true only once per stroke on the first symmetry pass, regardless of the symmetry passes enabled.

This should be used for functionality that needs to be computed once per stroke of a particular tool (allocating memory, updating random seeds...).

Definition at line 926 of file sculpt.c.

References StrokeCache::first_time, StrokeCache::mirror_symmetry_pass, StrokeCache::radial_symmetry_pass, and StrokeCache::tile_pass.

Referenced by do_brush_action(), SCULPT_do_cloth_brush(), SCULPT_do_paint_brush(), SCULPT_do_smear_brush(), and SCULPT_enhance_details_brush().

◆ SCULPT_stroke_is_first_brush_step_of_symmetry_pass()

bool SCULPT_stroke_is_first_brush_step_of_symmetry_pass ( StrokeCache cache)

◆ SCULPT_stroke_is_main_symmetry_pass()

bool SCULPT_stroke_is_main_symmetry_pass ( StrokeCache cache)

Returns true when the step belongs to the stroke that is directly performed by the brush and not by one of the symmetry passes.

Definition at line 913 of file sculpt.c.

References StrokeCache::mirror_symmetry_pass, StrokeCache::radial_symmetry_pass, and StrokeCache::tile_pass.

Referenced by calc_sculpt_plane(), do_brush_action(), do_clay_thumb_brush(), and SCULPT_calc_brush_plane().

◆ SCULPT_stroke_modifiers_check()

void SCULPT_stroke_modifiers_check ( const bContext C,
Object ob,
const Brush brush 
)

◆ sculpt_stroke_test_start()

static bool sculpt_stroke_test_start ( bContext C,
struct wmOperator op,
const float  mouse[2] 
)
static

◆ sculpt_stroke_update_step()

static void sculpt_stroke_update_step ( bContext C,
struct PaintStroke UNUSEDstroke,
PointerRNA itemptr 
)
static

◆ sculpt_symmetrize_exec()

static int sculpt_symmetrize_exec ( bContext C,
wmOperator op 
)
static

◆ SCULPT_tag_update_overlays()

void SCULPT_tag_update_overlays ( bContext C)

◆ SCULPT_tilt_apply_to_normal()

void SCULPT_tilt_apply_to_normal ( float  r_normal[3],
StrokeCache cache,
const float  tilt_strength 
)

◆ SCULPT_tilt_effective_normal_get()

void SCULPT_tilt_effective_normal_get ( const SculptSession ss,
const Brush brush,
float  r_no[3] 
)

◆ sculpt_tool_is_proxy_used()

static bool sculpt_tool_is_proxy_used ( const char  sculpt_tool)
static

◆ sculpt_tool_name()

static const char* sculpt_tool_name ( Sculpt sd)
static

◆ sculpt_tool_needs_original()

static bool sculpt_tool_needs_original ( const char  sculpt_tool)
static

◆ sculpt_topology_update()

static void sculpt_topology_update ( Sculpt sd,
Object ob,
Brush brush,
UnifiedPaintSettings UNUSEDups 
)
static

◆ sculpt_update_brush_delta()

static void sculpt_update_brush_delta ( UnifiedPaintSettings ups,
Object ob,
Brush brush 
)
static

Definition at line 7001 of file sculpt.c.

References add_v3_v3(), UnifiedPaintSettings::anchored_initial_mouse, StrokeCache::anchored_location, UnifiedPaintSettings::anchored_size, angle(), axis_angle_normalized_to_quat(), BRUSH_ANCHORED, BRUSH_CLOTH_DEFORM_SNAKE_HOOK, BRUSH_GRAB_ACTIVE_VERTEX, SculptSession::cache, Brush::cloth_deform_type, copy_v2_v2(), copy_v3_v3(), UnifiedPaintSettings::draw_anchored, ED_view3d_win_to_3d(), ELEM, eps, Brush::falloff_shape, Brush::flag, SculptRakeData::follow_co, SculptRakeData::follow_dist, StrokeCache::grab_delta, StrokeCache::initial_mouse, invert_m4_m4(), StrokeCache::is_rake_rotation_valid, is_zero_v3(), len_squared_v3v3(), StrokeCache::mouse_event, mul_mat3_m4_v3(), mul_v3_m4v3(), normalize_v3(), Object::obmat, StrokeCache::old_grab_location, StrokeCache::orig_grab_location, PAINT_FALLOFF_SHAPE_TUBE, UnifiedPaintSettings::pixel_radius, project_plane_v3_v3v3(), quat_to_axis_angle(), StrokeCache::radius, StrokeCache::rake_data, Brush::rake_factor, StrokeCache::rake_rotation, ViewContext::region, rotation_between_vecs_to_quat(), Object::sculpt, SCULPT_active_vertex_get(), sculpt_brush_needs_rake_rotation(), sculpt_brush_use_topology_rake(), SCULPT_is_cloth_deform_brush(), sculpt_needs_delta_for_tip_orientation(), sculpt_needs_delta_from_anchored_origin(), SCULPT_RAKE_BRUSH_FACTOR, sculpt_rake_data_update(), SCULPT_stroke_is_first_brush_step_of_symmetry_pass(), Brush::sculpt_tool, SCULPT_TOOL_BOUNDARY, SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_CLAY_THUMB, SCULPT_TOOL_CLOTH, SCULPT_TOOL_ELASTIC_DEFORM, SCULPT_TOOL_GRAB, SCULPT_TOOL_MULTIPLANE_SCRAPE, SCULPT_TOOL_NUDGE, SCULPT_TOOL_PAINT, SCULPT_TOOL_PINCH, SCULPT_TOOL_POSE, SCULPT_TOOL_SNAKE_HOOK, SCULPT_TOOL_THUMB, SCULPT_vertex_co_for_grab_active_get(), sqrtf, square_f(), sub_v3_v3(), sub_v3_v3v3(), StrokeCache::true_location, StrokeCache::true_view_normal, v1, v2, ViewContext::v3d, StrokeCache::vc, and zero_v3().

Referenced by sculpt_update_cache_variants().

◆ sculpt_update_cache_invariants()

static void sculpt_update_cache_invariants ( bContext C,
Sculpt sd,
SculptSession ss,
wmOperator op,
const float  mouse[2] 
)
static

Definition at line 6775 of file sculpt.c.

References StrokeCache::alt_smooth, BKE_brush_size_get(), BKE_brush_size_set(), BKE_curvemapping_init(), BKE_libblock_find_name(), BKE_paint_brush(), BKE_paint_brush_set(), BLI_dial_init(), BLI_strncpy(), StrokeCache::brush, BRUSH_ACCUMULATE, BRUSH_ANCHORED, BRUSH_MASK_SMOOTH, BRUSH_STROKE_INVERT, BRUSH_STROKE_SMOOTH, C, SculptSession::cache, copy_m3_m4(), copy_v2_v2(), copy_v3_v3(), CTX_data_active_object(), CTX_data_main(), CTX_data_scene(), CTX_data_tool_settings(), SculptSession::cursor_location, SculptSession::cursor_normal, Brush::curve, wmOperator::customdata, StrokeCache::dial, UnifiedPaintSettings::draw_inverted, ED_view3d_ob_project_mat_get(), ELEM, fabsf, StrokeCache::first_time, StrokeCache::flag, Brush::flag, Sculpt::gravity_factor, Sculpt::gravity_object, Brush::id, ID_BR, Object::imat, StrokeCache::initial_location, StrokeCache::initial_mouse, StrokeCache::initial_normal, StrokeCache::invert, invert_m4_m4(), Brush::mask_tool, max_ff(), MEM_callocN, StrokeCache::mouse, StrokeCache::mouse_event, mul_m3_v3(), ID::name, StrokeCache::normal_weight, Brush::normal_weight, normalize_v3(), normalize_v3_v3(), Object::obmat, StrokeCache::original, Sculpt::paint, paint_stroke_view_context(), PIXEL_INPUT_THRESHHOLD, Brush::plane_trim, StrokeCache::plane_trim_squared, StrokeCache::projection_mat, wmOperator::ptr, RNA_enum_get(), ViewContext::rv3d, StrokeCache::saved_active_brush_name, StrokeCache::saved_mask_brush_tool, StrokeCache::saved_smooth_size, StrokeCache::scale, Object::scale, scene, sculpt_init_mirror_clipping(), Brush::sculpt_tool, SCULPT_TOOL_DISPLACEMENT_ERASER, SCULPT_TOOL_DISPLACEMENT_SMEAR, SCULPT_TOOL_DRAW_FACE_SETS, SCULPT_TOOL_DRAW_SHARP, SCULPT_TOOL_HAS_ACCUMULATE, SCULPT_TOOL_HAS_NORMAL_WEIGHT, SCULPT_TOOL_MASK, SCULPT_TOOL_PAINT, SCULPT_TOOL_ROTATE, SCULPT_TOOL_SIMPLIFY, SCULPT_TOOL_SLIDE_RELAX, SCULPT_TOOL_SMEAR, SCULPT_TOOL_SMOOTH, size(), StrokeCache::supports_gravity, UnifiedPaintSettings::tex_mouse, StrokeCache::true_gravity_direction, StrokeCache::true_initial_location, StrokeCache::true_initial_normal, StrokeCache::true_view_normal, ToolSettings::unified_paint_settings, StrokeCache::vc, RegionView3D::viewinv, and zero_v2().

Referenced by sculpt_stroke_test_start().

◆ sculpt_update_cache_paint_variants()

static void sculpt_update_cache_paint_variants ( StrokeCache cache,
const Brush brush 
)
static

◆ sculpt_update_cache_variants()

static void sculpt_update_cache_variants ( bContext C,
Sculpt sd,
Object ob,
PointerRNA ptr 
)
static

Definition at line 7203 of file sculpt.c.

References UnifiedPaintSettings::anchored_initial_mouse, StrokeCache::anchored_location, UnifiedPaintSettings::anchored_size, BKE_brush_size_get(), BKE_brush_unprojected_radius_get(), BKE_brush_unprojected_radius_set(), BKE_brush_use_locked_size(), BKE_brush_use_size_pressure(), BKE_paint_brush(), BLI_dial_angle(), BRUSH_ANCHORED, BRUSH_EDGE_TO_EDGE, UnifiedPaintSettings::brush_rotation, StrokeCache::bstrength, C, SculptSession::cache, StrokeCache::clay_pressure_stabilizer, StrokeCache::clay_pressure_stabilizer_index, copy_v2_v2(), copy_v3_v3(), CTX_data_scene(), StrokeCache::dial, UnifiedPaintSettings::draw_anchored, StrokeCache::dyntopo_pixel_radius, StrokeCache::first_time, Brush::flag, StrokeCache::initial_mouse, UnifiedPaintSettings::initial_pixel_radius, StrokeCache::initial_radius, StrokeCache::iteration_count, StrokeCache::mouse, StrokeCache::mouse_event, Sculpt::paint, paint_calc_object_space_radius(), PAINT_MODE_SCULPT, paint_supports_dynamic_size(), StrokeCache::pen_flip, UnifiedPaintSettings::pixel_radius, StrokeCache::pressure, ptr, StrokeCache::radius, StrokeCache::radius_squared, RNA_boolean_get(), RNA_float_get(), RNA_float_get_array(), scene, Object::sculpt, sculpt_brush_dynamic_size_get(), SCULPT_CLAY_STABILIZER_LEN, SCULPT_is_cloth_deform_brush(), SCULPT_stroke_is_first_brush_step_of_symmetry_pass(), Brush::sculpt_tool, SCULPT_TOOL_CLAY_THUMB, SCULPT_TOOL_ROTATE, SCULPT_TOOL_SNAKE_HOOK, sculpt_update_brush_delta(), sculpt_update_cache_paint_variants(), StrokeCache::special_rotation, Scene::toolsettings, StrokeCache::true_location, ToolSettings::unified_paint_settings, StrokeCache::vc, StrokeCache::vertex_rotation, StrokeCache::x_tilt, and StrokeCache::y_tilt.

Referenced by sculpt_stroke_update_step().

◆ sculpt_update_keyblock()

static void sculpt_update_keyblock ( Object ob)
static

◆ SCULPT_update_object_bounding_box()

void SCULPT_update_object_bounding_box ( Object ob)

◆ sculpt_update_tex()

static void sculpt_update_tex ( const Scene scene,
Sculpt sd,
SculptSession ss 
)
static

◆ SCULPT_vertcos_to_key()

void SCULPT_vertcos_to_key ( Object ob,
KeyBlock kb,
const float(*)  vertCos[3] 
)

◆ SCULPT_vertex_all_face_sets_visible_get()

bool SCULPT_vertex_all_face_sets_visible_get ( const SculptSession ss,
int  index 
)

◆ SCULPT_vertex_any_face_set_visible_get()

bool SCULPT_vertex_any_face_set_visible_get ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_co_for_grab_active_get()

const float* SCULPT_vertex_co_for_grab_active_get ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_co_get()

const float* SCULPT_vertex_co_get ( SculptSession ss,
int  index 
)

Definition at line 134 of file sculpt.c.

References BKE_pbvh_get_bmesh(), BKE_pbvh_get_grid_key(), BKE_pbvh_get_grids(), BKE_pbvh_get_verts(), BKE_pbvh_type(), BM_vert_at_index(), CCG_elem_co(), CCG_elem_offset(), BMVert::co, MVert::co, SculptSession::deform_modifiers_active, CCGKey::grid_area, SculptSession::mvert, NULL, SculptSession::pbvh, PBVH_BMESH, PBVH_FACES, PBVH_GRIDS, and SculptSession::shapekey_active.

Referenced by automask_floodfill_cb(), boundary_floodfill_cb(), boundary_initial_vertex_floodfill_cb(), cloth_brush_add_length_constraint(), do_boundary_brush_smooth_task_cb_ex(), do_displacement_smear_brush(), do_displacement_smear_store_prev_disp_task_cb_ex(), do_smear_brush_task_cb_exec(), do_topology_slide_task_cb_ex(), dyntopo_detail_size_sample_from_surface(), mesh_filter_enhance_details_init_directions(), mesh_filter_sharpen_init(), mesh_filter_task_cb(), neighbor_dirty_mask(), paint_cursor_draw_3d_view_brush_cursor_inactive(), paint_cursor_preview_boundary_data_pivot_draw(), pose_face_sets_floodfill_cb(), pose_ik_chain_init_face_sets(), pose_ik_chain_init_face_sets_fk(), pose_topology_floodfill_cb(), sample_detail_voxel(), SCULPT_active_vertex_co_get(), sculpt_boundary_bend_data_init(), SCULPT_boundary_edges_preview_draw(), sculpt_boundary_edit_data_init(), sculpt_boundary_indices_init(), SCULPT_boundary_pivot_line_preview_draw(), sculpt_boundary_slide_data_init(), sculpt_boundary_twist_data_init(), SCULPT_cloth_brush_simulation_init(), SCULPT_cloth_brush_store_simulation_state(), sculpt_cloth_filter_modal(), SCULPT_enhance_details_brush(), sculpt_expand_falloff_value_vertex_get(), sculpt_expand_get_vertex_index_for_symmetry_pass(), sculpt_expand_reposition_pivot(), sculpt_expand_spherical_falloff_create(), SCULPT_fake_neighbor_search(), SCULPT_floodfill_add_initial_with_symmetry(), SCULPT_geodesic_fallback_create(), SCULPT_geodesic_from_vertex_and_symm(), sculpt_gesture_trim_calculate_depth(), SCULPT_neighbor_coords_average(), SCULPT_neighbor_coords_average_interior(), SCULPT_relax_vertex(), sculpt_set_persistent_base_exec(), SCULPT_vertex_co_for_grab_active_get(), SCULPT_vertex_limit_surface_get(), and SCULPT_vertex_persistent_co_get().

◆ SCULPT_vertex_color_get()

const float* SCULPT_vertex_color_get ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_colors_poll()

bool SCULPT_vertex_colors_poll ( bContext C)

◆ SCULPT_vertex_count_get()

int SCULPT_vertex_count_get ( SculptSession ss)

Definition at line 120 of file sculpt.c.

References BKE_pbvh_get_bmesh(), BKE_pbvh_get_grid_num_vertices(), BKE_pbvh_type(), BM_mesh_elem_count(), BM_VERT, SculptSession::pbvh, PBVH_BMESH, PBVH_FACES, PBVH_GRIDS, and SculptSession::totvert.

Referenced by cloth_brush_apply_brush_foces(), do_brush_action(), do_displacement_smear_brush(), do_layer_brush(), mesh_filter_enhance_details_init_directions(), mesh_filter_init_limit_surface_co(), mesh_filter_sharpen_init(), mesh_filter_surface_smooth_init(), pose_ik_chain_init_face_sets(), pose_ik_chain_init_face_sets_fk(), pose_ik_chain_init_topology(), SCULPT_automasking_cache_init(), SCULPT_boundary_automasking_init(), sculpt_boundary_bend_data_init(), sculpt_boundary_edit_data_init(), sculpt_boundary_falloff_factor_init(), sculpt_boundary_get_closest_boundary_vertex(), sculpt_boundary_indices_init(), sculpt_boundary_slide_data_init(), SCULPT_cloth_brush_simulation_create(), SCULPT_cloth_brush_simulation_init(), SCULPT_cloth_brush_store_simulation_state(), sculpt_cloth_filter_modal(), SCULPT_connected_components_ensure(), SCULPT_do_smear_brush(), SCULPT_enhance_details_brush(), sculpt_expand_bitmap_from_enabled(), sculpt_expand_boundary_from_enabled(), sculpt_expand_boundary_topology_falloff_create(), sculpt_expand_diagonals_falloff_create(), sculpt_expand_geodesics_from_state_boundary(), sculpt_expand_initialize_from_face_set_boundary(), sculpt_expand_invoke(), sculpt_expand_modal(), sculpt_expand_normal_falloff_create(), sculpt_expand_original_state_store(), sculpt_expand_reposition_pivot(), sculpt_expand_spherical_falloff_create(), sculpt_expand_topology_falloff_create(), sculpt_expand_topology_from_state_boundary(), sculpt_expand_update_max_vert_falloff_value(), sculpt_face_set_create_exec(), sculpt_face_set_edit_fair_face_set(), sculpt_face_sets_automasking_init(), sculpt_face_sets_change_visibility_exec(), SCULPT_fake_neighbor_init(), SCULPT_fake_neighbors_ensure(), SCULPT_floodfill_init(), SCULPT_geometry_preview_lines_update(), sculpt_gesture_trim_calculate_depth(), sculpt_mask_by_color_contiguous(), sculpt_mask_expand_invoke(), sculpt_mask_filter_exec(), sculpt_pose_grow_pose_factor(), sculpt_set_persistent_base_exec(), and SCULPT_topology_automasking_init().

◆ SCULPT_vertex_face_set_get()

int SCULPT_vertex_face_set_get ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_face_set_set()

void SCULPT_vertex_face_set_set ( SculptSession ss,
int  index,
int  face_set 
)

◆ SCULPT_vertex_get_connected_component()

static int SCULPT_vertex_get_connected_component ( SculptSession ss,
int  index 
)
static

◆ SCULPT_vertex_has_face_set()

bool SCULPT_vertex_has_face_set ( SculptSession ss,
int  index,
int  face_set 
)

◆ SCULPT_vertex_has_unique_face_set()

bool SCULPT_vertex_has_unique_face_set ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_is_boundary()

bool SCULPT_vertex_is_boundary ( const SculptSession ss,
const int  index 
)

◆ SCULPT_vertex_limit_surface_get()

void SCULPT_vertex_limit_surface_get ( SculptSession ss,
int  index,
float  r_co[3] 
)

◆ SCULPT_vertex_mask_get()

float SCULPT_vertex_mask_get ( SculptSession ss,
int  index 
)

◆ sculpt_vertex_neighbor_add()

static void sculpt_vertex_neighbor_add ( SculptVertexNeighborIter iter,
int  neighbor_index 
)
static

◆ SCULPT_vertex_neighbors_get()

void SCULPT_vertex_neighbors_get ( SculptSession ss,
const int  index,
const bool  include_duplicates,
SculptVertexNeighborIter iter 
)

◆ sculpt_vertex_neighbors_get_bmesh()

static void sculpt_vertex_neighbors_get_bmesh ( SculptSession ss,
int  index,
SculptVertexNeighborIter iter 
)
static

◆ sculpt_vertex_neighbors_get_faces()

static void sculpt_vertex_neighbors_get_faces ( SculptSession ss,
int  index,
SculptVertexNeighborIter iter 
)
static

◆ sculpt_vertex_neighbors_get_grids()

static void sculpt_vertex_neighbors_get_grids ( SculptSession ss,
const int  index,
const bool  include_duplicates,
SculptVertexNeighborIter iter 
)
static

◆ SCULPT_vertex_normal_get()

void SCULPT_vertex_normal_get ( SculptSession ss,
int  index,
float  no[3] 
)

◆ SCULPT_vertex_persistent_co_get()

const float* SCULPT_vertex_persistent_co_get ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_persistent_normal_get()

void SCULPT_vertex_persistent_normal_get ( SculptSession ss,
int  index,
float  no[3] 
)

◆ SCULPT_vertex_random_access_ensure()

void SCULPT_vertex_random_access_ensure ( SculptSession ss)

◆ SCULPT_vertex_visible_get()

bool SCULPT_vertex_visible_get ( SculptSession ss,
int  index 
)

◆ SCULPT_vertex_visible_set()

void SCULPT_vertex_visible_set ( SculptSession ss,
int  index,
bool  visible 
)

◆ SCULPT_visibility_sync_all_face_sets_to_vertices()

void SCULPT_visibility_sync_all_face_sets_to_vertices ( Object ob)

◆ SCULPT_visibility_sync_all_vertex_to_face_sets()

void SCULPT_visibility_sync_all_vertex_to_face_sets ( SculptSession ss)

◆ sculpt_visibility_sync_vertex_to_face_sets()

static void UNUSED_FUNCTION() sculpt_visibility_sync_vertex_to_face_sets ( SculptSession ss,
int  index 
)
static

◆ update_brush_local_mat()

static void update_brush_local_mat ( Sculpt sd,
Object ob 
)
static

◆ update_sculpt_normal()

static void update_sculpt_normal ( Sculpt sd,
Object ob,
PBVHNode **  nodes,
int  totnode 
)
static

◆ vertex_to_loop_colors_exec()

static int vertex_to_loop_colors_exec ( bContext C,
wmOperator UNUSEDop 
)
static