Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/sculpt_paint/sculpt_boundary.c
| Show First 20 Lines • Show All 700 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| sub_v3_v3v3(t_orig_co, orig_data.co, boundary->bend.pivot_positions[vd.index]); | sub_v3_v3v3(t_orig_co, orig_data.co, boundary->bend.pivot_positions[vd.index]); | ||||
| rotate_v3_v3v3fl(target_co, | rotate_v3_v3v3fl(target_co, | ||||
| t_orig_co, | t_orig_co, | ||||
| boundary->bend.pivot_rotation_axis[vd.index], | boundary->bend.pivot_rotation_axis[vd.index], | ||||
| angle * boundary->edit_info[vd.index].strength_factor * mask * automask); | angle * boundary->edit_info[vd.index].strength_factor * mask * automask); | ||||
| add_v3_v3(target_co, boundary->bend.pivot_positions[vd.index]); | add_v3_v3(target_co, boundary->bend.pivot_positions[vd.index]); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| static void do_boundary_brush_slide_task_cb_ex(void *__restrict userdata, | static void do_boundary_brush_slide_task_cb_ex(void *__restrict userdata, | ||||
| const int n, | const int n, | ||||
| const TaskParallelTLS *__restrict UNUSED(tls)) | const TaskParallelTLS *__restrict UNUSED(tls)) | ||||
| Show All 29 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | ||||
| madd_v3_v3v3fl(target_co, | madd_v3_v3v3fl(target_co, | ||||
| orig_data.co, | orig_data.co, | ||||
| boundary->slide.directions[vd.index], | boundary->slide.directions[vd.index], | ||||
| boundary->edit_info[vd.index].strength_factor * disp * mask * automask * | boundary->edit_info[vd.index].strength_factor * disp * mask * automask * | ||||
| strength); | strength); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| static void do_boundary_brush_inflate_task_cb_ex(void *__restrict userdata, | static void do_boundary_brush_inflate_task_cb_ex(void *__restrict userdata, | ||||
| const int n, | const int n, | ||||
| const TaskParallelTLS *__restrict UNUSED(tls)) | const TaskParallelTLS *__restrict UNUSED(tls)) | ||||
| Show All 29 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | ||||
| madd_v3_v3v3fl(target_co, | madd_v3_v3v3fl(target_co, | ||||
| orig_data.co, | orig_data.co, | ||||
| orig_data.no, | orig_data.no, | ||||
| boundary->edit_info[vd.index].strength_factor * disp * mask * automask * | boundary->edit_info[vd.index].strength_factor * disp * mask * automask * | ||||
| strength); | strength); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| static void do_boundary_brush_grab_task_cb_ex(void *__restrict userdata, | static void do_boundary_brush_grab_task_cb_ex(void *__restrict userdata, | ||||
| const int n, | const int n, | ||||
| const TaskParallelTLS *__restrict UNUSED(tls)) | const TaskParallelTLS *__restrict UNUSED(tls)) | ||||
| Show All 26 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex); | const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.vertex); | ||||
| float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | ||||
| madd_v3_v3v3fl(target_co, | madd_v3_v3v3fl(target_co, | ||||
| orig_data.co, | orig_data.co, | ||||
| ss->cache->grab_delta_symmetry, | ss->cache->grab_delta_symmetry, | ||||
| boundary->edit_info[vd.index].strength_factor * mask * automask * strength); | boundary->edit_info[vd.index].strength_factor * mask * automask * strength); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| static void do_boundary_brush_twist_task_cb_ex(void *__restrict userdata, | static void do_boundary_brush_twist_task_cb_ex(void *__restrict userdata, | ||||
| const int n, | const int n, | ||||
| const TaskParallelTLS *__restrict UNUSED(tls)) | const TaskParallelTLS *__restrict UNUSED(tls)) | ||||
| Show All 37 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| sub_v3_v3v3(t_orig_co, orig_data.co, boundary->twist.pivot_position); | sub_v3_v3v3(t_orig_co, orig_data.co, boundary->twist.pivot_position); | ||||
| rotate_v3_v3v3fl(target_co, | rotate_v3_v3v3fl(target_co, | ||||
| t_orig_co, | t_orig_co, | ||||
| boundary->twist.rotation_axis, | boundary->twist.rotation_axis, | ||||
| angle * mask * automask * boundary->edit_info[vd.index].strength_factor); | angle * mask * automask * boundary->edit_info[vd.index].strength_factor); | ||||
| add_v3_v3(target_co, boundary->twist.pivot_position); | add_v3_v3(target_co, boundary->twist.pivot_position); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| static void do_boundary_brush_smooth_task_cb_ex(void *__restrict userdata, | static void do_boundary_brush_smooth_task_cb_ex(void *__restrict userdata, | ||||
| const int n, | const int n, | ||||
| const TaskParallelTLS *__restrict UNUSED(tls)) | const TaskParallelTLS *__restrict UNUSED(tls)) | ||||
| ▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) { | ||||
| const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | ||||
| mul_v3_v3fl(avg, coord_accum, 1.0f / total_neighbors); | mul_v3_v3fl(avg, coord_accum, 1.0f / total_neighbors); | ||||
| sub_v3_v3v3(disp, avg, vd.co); | sub_v3_v3v3(disp, avg, vd.co); | ||||
| float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | float *target_co = SCULPT_brush_deform_target_vertex_co_get(ss, brush->deform_target, &vd); | ||||
| madd_v3_v3v3fl( | madd_v3_v3v3fl( | ||||
| target_co, vd.co, disp, boundary->edit_info[vd.index].strength_factor * mask * strength); | target_co, vd.co, disp, boundary->edit_info[vd.index].strength_factor * mask * strength); | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| BKE_pbvh_vert_mark_update(ss->pbvh, vd.vertex); | BKE_pbvh_vert_tag_update_normal(ss->pbvh, vd.vertex); | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| } | } | ||||
| void SCULPT_do_boundary_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | void SCULPT_do_boundary_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) | ||||
| { | { | ||||
| SculptSession *ss = ob->sculpt; | SculptSession *ss = ob->sculpt; | ||||
| ▲ Show 20 Lines • Show All 110 Lines • Show Last 20 Lines | |||||