74 if (!sculpt_brush_test_sq_fn(&test, vd.
co)) {
93 if (local_co[0] > 0.0f) {
108 void *__restrict chunk_join,
109 void *__restrict chunk)
132 float(*scrape_planes)[4] =
data->multiplane_scrape_planes;
134 float angle =
data->multiplane_scrape_angle;
144 ss, &test,
data->brush->falloff_shape);
149 if (!sculpt_brush_test_sq_fn(&test, vd.
co)) {
158 if (local_co[0] > 0.0f) {
176 if (local_co[0] > 0.0f) {
219 const float displace = -radius *
offset;
296 float sampled_plane_normals[2][3];
297 float sampled_plane_co[2][3];
298 float sampled_cv[2][3];
305 mid_v3_v3v3(mid_co, sampled_plane_co[0], sampled_plane_co[1]);
313 float sampled_angle =
angle_v3v3(sampled_plane_normals[0], sampled_plane_normals[1]);
320 if (
dot_v3v3(sampled_cv[0], sampled_cv[1]) < 0.0f) {
321 sampled_angle = -sampled_angle;
327 sampled_angle = 0.0f;
359 float plane_no_rot[3];
360 const float y_axis[3] = {0.0f, 1.0f, 0.0f};
386 const float outline_col[3],
387 const float outline_alpha)
393 float local_mat_inv[4][4];
403 const float p[3] = {0.0f, 0.0f, ss->
cache->
radius};
404 const float y_axis[3] = {0.0f, 1.0f, 0.0f};
407 const float area_center[3] = {0.0f, 0.0f, 0.0f};
typedef float(TangentPoint)[2]
General operations, lookup, etc. for blender objects.
struct Brush * BKE_paint_brush(struct Paint *paint)
A BVH for high poly meshes.
#define BKE_pbvh_vertex_iter_begin(pbvh, node, vi, mode)
#define BKE_pbvh_vertex_iter_end
void BKE_pbvh_vert_tag_update_normal(PBVH *pbvh, int index)
PBVHProxyNode * BKE_pbvh_node_add_proxy(PBVH *pbvh, PBVHNode *node)
void BKE_pbvh_parallel_range_settings(struct TaskParallelSettings *settings, bool use_threading, int totnode)
MINLINE float interpf(float a, float b, float t)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
void closest_to_plane_normalized_v3(float r_close[3], const float plane[4], const float pt[3])
bool invert_m4(float R[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3])
void normalize_m4(float R[4][4]) ATTR_NONNULL()
void rotate_v3_v3v3fl(float r[3], const float p[3], const float axis[3], float angle)
float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
int BLI_task_parallel_thread_id(const TaskParallelTLS *tls)
@ BRUSH_MULTIPLANE_SCRAPE_PLANES_PREVIEW
@ BRUSH_MULTIPLANE_SCRAPE_DYNAMIC
Object is a sort of wrapper for general info.
#define GPU_matrix_mul(x)
Read Guarded memory(de)allocation.
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
IconTextureDrawCall normal
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
thread_local int thread_id
CCL_NAMESPACE_BEGIN ccl_device float fade(float t)
int SCULPT_plane_point_side(const float co[3], const float plane[4])
SculptBrushTestFn SCULPT_brush_test_init_with_falloff_shape(SculptSession *ss, SculptBrushTest *test, char falloff_shape)
float SCULPT_brush_strength_factor(SculptSession *ss, const Brush *br, const float brush_point[3], const float len, const float vno[3], const float fno[3], const float mask, const int vertex_index, const int thread_id)
float SCULPT_brush_plane_offset_get(Sculpt *sd, SculptSession *ss)
bool SCULPT_stroke_is_first_brush_step_of_symmetry_pass(StrokeCache *cache)
int SCULPT_plane_trim(const StrokeCache *cache, const Brush *brush, const float val[3])
void SCULPT_calc_brush_plane(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3], float r_area_co[3])
void SCULPT_calc_area_normal(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, float r_area_no[3])
bool(* SculptBrushTestFn)(SculptBrushTest *test, const float co[3])
void SCULPT_multiplane_scrape_preview_draw(const uint gpuattr, Brush *brush, SculptSession *ss, const float outline_col[3], const float outline_alpha)
static void do_multiplane_scrape_brush_task_cb_ex(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
static void calc_multiplane_scrape_surface_reduce(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
struct MultiplaneScrapeSampleData MultiplaneScrapeSampleData
void SCULPT_do_multiplane_scrape_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
static void calc_multiplane_scrape_surface_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict tls)
float multiplane_scrape_angle
float normal_radius_factor
struct SculptSession * sculpt
struct StrokeCache * cache
float multiplane_scrape_angle
float grab_delta_symmetry[3]
float stroke_local_mat[4][4]
TaskParallelReduceFunc func_reduce
size_t userdata_chunk_size