Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/sculpt_paint/sculpt_boundary.c
| Show First 20 Lines • Show All 661 Lines • ▼ Show 20 Lines | static void do_boundary_brush_bend_task_cb_ex(void *__restrict userdata, | ||||
| BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | ||||
| { | { | ||||
| if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | ||||
| SCULPT_orig_vert_data_update(&orig_data, &vd); | SCULPT_orig_vert_data_update(&orig_data, &vd); | ||||
| if (SCULPT_check_vertex_pivot_symmetry( | if (SCULPT_check_vertex_pivot_symmetry( | ||||
| orig_data.co, boundary->initial_vertex_position, symm)) { | orig_data.co, boundary->initial_vertex_position, symm)) { | ||||
| const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | ||||
| const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.index); | |||||
| float t_orig_co[3]; | float t_orig_co[3]; | ||||
| 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); | ||||
| 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); | 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) { | ||||
| vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | ||||
| } | } | ||||
| } | } | ||||
| Show All 22 Lines | static void do_boundary_brush_slide_task_cb_ex(void *__restrict userdata, | ||||
| BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | ||||
| { | { | ||||
| if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | ||||
| SCULPT_orig_vert_data_update(&orig_data, &vd); | SCULPT_orig_vert_data_update(&orig_data, &vd); | ||||
| if (SCULPT_check_vertex_pivot_symmetry( | if (SCULPT_check_vertex_pivot_symmetry( | ||||
| orig_data.co, boundary->initial_vertex_position, symm)) { | orig_data.co, boundary->initial_vertex_position, symm)) { | ||||
| const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | ||||
| const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.index); | |||||
| 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 * strength); | boundary->edit_info[vd.index].strength_factor * disp * mask * automask * | ||||
| strength); | |||||
| } | } | ||||
| } | } | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| Show All 21 Lines | static void do_boundary_brush_inflate_task_cb_ex(void *__restrict userdata, | ||||
| BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | ||||
| { | { | ||||
| if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | ||||
| SCULPT_orig_vert_data_update(&orig_data, &vd); | SCULPT_orig_vert_data_update(&orig_data, &vd); | ||||
| if (SCULPT_check_vertex_pivot_symmetry( | if (SCULPT_check_vertex_pivot_symmetry( | ||||
| orig_data.co, boundary->initial_vertex_position, symm)) { | orig_data.co, boundary->initial_vertex_position, symm)) { | ||||
| const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | ||||
| const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.index); | |||||
| float normal[3]; | float normal[3]; | ||||
| normal_short_to_float_v3(normal, orig_data.no); | normal_short_to_float_v3(normal, orig_data.no); | ||||
| 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, | ||||
| normal, | normal, | ||||
| boundary->edit_info[vd.index].strength_factor * disp * mask * strength); | boundary->edit_info[vd.index].strength_factor * disp * mask * automask * | ||||
| strength); | |||||
| } | } | ||||
| } | } | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| Show All 19 Lines | static void do_boundary_brush_grab_task_cb_ex(void *__restrict userdata, | ||||
| BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | ||||
| { | { | ||||
| if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | ||||
| SCULPT_orig_vert_data_update(&orig_data, &vd); | SCULPT_orig_vert_data_update(&orig_data, &vd); | ||||
| if (SCULPT_check_vertex_pivot_symmetry( | if (SCULPT_check_vertex_pivot_symmetry( | ||||
| orig_data.co, boundary->initial_vertex_position, symm)) { | orig_data.co, boundary->initial_vertex_position, symm)) { | ||||
| const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | ||||
| const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.index); | |||||
| 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 * strength); | boundary->edit_info[vd.index].strength_factor * mask * automask * strength); | ||||
| } | } | ||||
| } | } | ||||
| if (vd.mvert) { | if (vd.mvert) { | ||||
| vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | ||||
| } | } | ||||
| } | } | ||||
| BKE_pbvh_vertex_iter_end; | BKE_pbvh_vertex_iter_end; | ||||
| Show All 27 Lines | static void do_boundary_brush_twist_task_cb_ex(void *__restrict userdata, | ||||
| BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) | ||||
| { | { | ||||
| if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | if (boundary->edit_info[vd.index].num_propagation_steps != -1) { | ||||
| SCULPT_orig_vert_data_update(&orig_data, &vd); | SCULPT_orig_vert_data_update(&orig_data, &vd); | ||||
| if (SCULPT_check_vertex_pivot_symmetry( | if (SCULPT_check_vertex_pivot_symmetry( | ||||
| orig_data.co, boundary->initial_vertex_position, symm)) { | orig_data.co, boundary->initial_vertex_position, symm)) { | ||||
| const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | const float mask = vd.mask ? 1.0f - *vd.mask : 1.0f; | ||||
| const float automask = SCULPT_automasking_factor_get(ss->cache->automasking, ss, vd.index); | |||||
| float t_orig_co[3]; | float t_orig_co[3]; | ||||
| 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); | ||||
| 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 * 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) { | ||||
| vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | vd.mvert->flag |= ME_VERT_PBVH_UPDATE; | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 176 Lines • Show Last 20 Lines | |||||