Cleanup: Clang format
This commit is contained in:
parent
c365e0c6b6
commit
a56fb568ed
|
@ -6512,141 +6512,139 @@ static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSe
|
|||
SCULPT_pose_brush_init(sd, ob, ss, brush);
|
||||
}
|
||||
|
||||
if (brush->deform_target == BRUSH_DEFORM_TARGET_CLOTH_SIM) {
|
||||
if (!ss->cache->cloth_sim) {
|
||||
ss->cache->cloth_sim = SCULPT_cloth_brush_simulation_create(
|
||||
ss, 1.0f, 1.0f, 0.0f, false, true);
|
||||
SCULPT_cloth_brush_simulation_init(ss, ss->cache->cloth_sim);
|
||||
}
|
||||
SCULPT_cloth_brush_store_simulation_state(ss, ss->cache->cloth_sim);
|
||||
SCULPT_cloth_brush_ensure_nodes_constraints(
|
||||
sd, ob, nodes, totnode, ss->cache->cloth_sim, ss->cache->location, FLT_MAX);
|
||||
if (brush->deform_target == BRUSH_DEFORM_TARGET_CLOTH_SIM) {
|
||||
if (!ss->cache->cloth_sim) {
|
||||
ss->cache->cloth_sim = SCULPT_cloth_brush_simulation_create(
|
||||
ss, 1.0f, 1.0f, 0.0f, false, true);
|
||||
SCULPT_cloth_brush_simulation_init(ss, ss->cache->cloth_sim);
|
||||
}
|
||||
SCULPT_cloth_brush_store_simulation_state(ss, ss->cache->cloth_sim);
|
||||
SCULPT_cloth_brush_ensure_nodes_constraints(
|
||||
sd, ob, nodes, totnode, ss->cache->cloth_sim, ss->cache->location, FLT_MAX);
|
||||
}
|
||||
|
||||
bool invert = ss->cache->pen_flip || ss->cache->invert || brush->flag & BRUSH_DIR_IN;
|
||||
|
||||
bool invert = ss->cache->pen_flip || ss->cache->invert || brush->flag & BRUSH_DIR_IN;
|
||||
|
||||
|
||||
/* Apply one type of brush action. */
|
||||
switch (brush->sculpt_tool) {
|
||||
case SCULPT_TOOL_DRAW:
|
||||
do_draw_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SMOOTH:
|
||||
if (brush->smooth_deform_type == BRUSH_SMOOTH_DEFORM_LAPLACIAN) {
|
||||
SCULPT_do_smooth_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else if (brush->smooth_deform_type == BRUSH_SMOOTH_DEFORM_SURFACE) {
|
||||
SCULPT_do_surface_smooth_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else if (brush->smooth_deform_type == BRUSH_SMOOTH_DEFORM_DIRECTIONAL) {
|
||||
SCULPT_do_directional_smooth_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
break;
|
||||
case SCULPT_TOOL_CREASE:
|
||||
do_crease_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_BLOB:
|
||||
do_crease_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_PINCH:
|
||||
do_pinch_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_INFLATE:
|
||||
do_inflate_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_GRAB:
|
||||
do_grab_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_ROTATE:
|
||||
do_rotate_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SNAKE_HOOK:
|
||||
do_snake_hook_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_NUDGE:
|
||||
do_nudge_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_THUMB:
|
||||
do_thumb_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_LAYER:
|
||||
do_layer_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_FLATTEN:
|
||||
do_flatten_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY:
|
||||
do_clay_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY_STRIPS:
|
||||
do_clay_strips_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_MULTIPLANE_SCRAPE:
|
||||
SCULPT_do_multiplane_scrape_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY_THUMB:
|
||||
do_clay_thumb_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_FILL:
|
||||
if (invert && brush->flag & BRUSH_INVERT_TO_SCRAPE_FILL) {
|
||||
do_scrape_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else {
|
||||
do_fill_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
break;
|
||||
case SCULPT_TOOL_SCRAPE:
|
||||
if (invert && brush->flag & BRUSH_INVERT_TO_SCRAPE_FILL) {
|
||||
do_fill_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else {
|
||||
do_scrape_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
break;
|
||||
case SCULPT_TOOL_MASK:
|
||||
do_mask_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_POSE:
|
||||
SCULPT_do_pose_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DRAW_SHARP:
|
||||
do_draw_sharp_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_ELASTIC_DEFORM:
|
||||
do_elastic_deform_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SLIDE_RELAX:
|
||||
do_slide_relax_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_BOUNDARY:
|
||||
SCULPT_do_boundary_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLOTH:
|
||||
SCULPT_do_cloth_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DRAW_FACE_SETS:
|
||||
SCULPT_do_draw_face_sets_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DISPLACEMENT_ERASER:
|
||||
do_displacement_eraser_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DISPLACEMENT_SMEAR:
|
||||
do_displacement_smear_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_PAINT:
|
||||
SCULPT_do_paint_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SMEAR:
|
||||
SCULPT_do_smear_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_FAIRING:
|
||||
do_fairing_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SCENE_PROJECT:
|
||||
do_scene_project_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
}
|
||||
/* Apply one type of brush action. */
|
||||
switch (brush->sculpt_tool) {
|
||||
case SCULPT_TOOL_DRAW:
|
||||
do_draw_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SMOOTH:
|
||||
if (brush->smooth_deform_type == BRUSH_SMOOTH_DEFORM_LAPLACIAN) {
|
||||
SCULPT_do_smooth_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else if (brush->smooth_deform_type == BRUSH_SMOOTH_DEFORM_SURFACE) {
|
||||
SCULPT_do_surface_smooth_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else if (brush->smooth_deform_type == BRUSH_SMOOTH_DEFORM_DIRECTIONAL) {
|
||||
SCULPT_do_directional_smooth_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
break;
|
||||
case SCULPT_TOOL_CREASE:
|
||||
do_crease_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_BLOB:
|
||||
do_crease_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_PINCH:
|
||||
do_pinch_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_INFLATE:
|
||||
do_inflate_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_GRAB:
|
||||
do_grab_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_ROTATE:
|
||||
do_rotate_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SNAKE_HOOK:
|
||||
do_snake_hook_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_NUDGE:
|
||||
do_nudge_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_THUMB:
|
||||
do_thumb_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_LAYER:
|
||||
do_layer_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_FLATTEN:
|
||||
do_flatten_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY:
|
||||
do_clay_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY_STRIPS:
|
||||
do_clay_strips_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_MULTIPLANE_SCRAPE:
|
||||
SCULPT_do_multiplane_scrape_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY_THUMB:
|
||||
do_clay_thumb_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_FILL:
|
||||
if (invert && brush->flag & BRUSH_INVERT_TO_SCRAPE_FILL) {
|
||||
do_scrape_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else {
|
||||
do_fill_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
break;
|
||||
case SCULPT_TOOL_SCRAPE:
|
||||
if (invert && brush->flag & BRUSH_INVERT_TO_SCRAPE_FILL) {
|
||||
do_fill_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
else {
|
||||
do_scrape_brush(sd, ob, nodes, totnode);
|
||||
}
|
||||
break;
|
||||
case SCULPT_TOOL_MASK:
|
||||
do_mask_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_POSE:
|
||||
SCULPT_do_pose_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DRAW_SHARP:
|
||||
do_draw_sharp_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_ELASTIC_DEFORM:
|
||||
do_elastic_deform_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SLIDE_RELAX:
|
||||
do_slide_relax_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_BOUNDARY:
|
||||
SCULPT_do_boundary_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_CLOTH:
|
||||
SCULPT_do_cloth_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DRAW_FACE_SETS:
|
||||
SCULPT_do_draw_face_sets_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DISPLACEMENT_ERASER:
|
||||
do_displacement_eraser_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_DISPLACEMENT_SMEAR:
|
||||
do_displacement_smear_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_PAINT:
|
||||
SCULPT_do_paint_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SMEAR:
|
||||
SCULPT_do_smear_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_FAIRING:
|
||||
do_fairing_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
case SCULPT_TOOL_SCENE_PROJECT:
|
||||
do_scene_project_brush(sd, ob, nodes, totnode);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ELEM(brush->sculpt_tool, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_MASK) &&
|
||||
brush->autosmooth_factor > 0) {
|
||||
|
@ -6783,25 +6781,25 @@ static void sculpt_combine_proxies(Sculpt *sd, Object *ob)
|
|||
|
||||
BKE_pbvh_gather_proxies(ss->pbvh, &nodes, &totnode);
|
||||
|
||||
const bool use_orco = ELEM(brush->sculpt_tool,
|
||||
SCULPT_TOOL_GRAB,
|
||||
SCULPT_TOOL_ROTATE,
|
||||
SCULPT_TOOL_THUMB,
|
||||
SCULPT_TOOL_BOUNDARY,
|
||||
SCULPT_TOOL_ELASTIC_DEFORM,
|
||||
const bool use_orco = ELEM(brush->sculpt_tool,
|
||||
SCULPT_TOOL_GRAB,
|
||||
SCULPT_TOOL_ROTATE,
|
||||
SCULPT_TOOL_THUMB,
|
||||
SCULPT_TOOL_BOUNDARY,
|
||||
SCULPT_TOOL_ELASTIC_DEFORM,
|
||||
|
||||
SCULPT_TOOL_POSE);
|
||||
SculptThreadedTaskData data = {
|
||||
.sd = sd,
|
||||
.ob = ob,
|
||||
.brush = brush,
|
||||
.nodes = nodes,
|
||||
.use_proxies_orco = use_orco,
|
||||
};
|
||||
SCULPT_TOOL_POSE);
|
||||
SculptThreadedTaskData data = {
|
||||
.sd = sd,
|
||||
.ob = ob,
|
||||
.brush = brush,
|
||||
.nodes = nodes,
|
||||
.use_proxies_orco = use_orco,
|
||||
};
|
||||
|
||||
TaskParallelSettings settings;
|
||||
BKE_pbvh_parallel_range_settings(&settings, true, totnode);
|
||||
BLI_task_parallel_range(0, totnode, &data, sculpt_combine_proxies_task_cb, &settings);
|
||||
TaskParallelSettings settings;
|
||||
BKE_pbvh_parallel_range_settings(&settings, true, totnode);
|
||||
BLI_task_parallel_range(0, totnode, &data, sculpt_combine_proxies_task_cb, &settings);
|
||||
MEM_SAFE_FREE(nodes);
|
||||
}
|
||||
|
||||
|
@ -7909,36 +7907,34 @@ static void sculpt_raycast_cb(PBVHNode *node, void *data_v, float *tmin)
|
|||
if (BKE_pbvh_type(srd->ss->pbvh) == PBVH_BMESH) {
|
||||
use_origco = true;
|
||||
}
|
||||
else {
|
||||
/* Intersect with coordinates from before we started stroke. */
|
||||
SculptUndoNode *unode = SCULPT_undo_get_node(node);
|
||||
origco = (unode) ? unode->co : NULL;
|
||||
use_origco = origco ? true : false;
|
||||
}
|
||||
else {
|
||||
/* Intersect with coordinates from before we started stroke. */
|
||||
SculptUndoNode *unode = SCULPT_undo_get_node(node);
|
||||
origco = (unode) ? unode->co : NULL;
|
||||
use_origco = origco ? true : false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (BKE_pbvh_node_raycast(srd->ss->pbvh,
|
||||
node,
|
||||
origco,
|
||||
use_origco,
|
||||
srd->ray_start,
|
||||
srd->ray_normal,
|
||||
&srd->isect_precalc,
|
||||
&srd->hit_count,
|
||||
&srd->depth,
|
||||
&srd->back_depth,
|
||||
&srd->active_vertex_index,
|
||||
&srd->active_face_grid_index,
|
||||
srd->face_normal)) {
|
||||
srd->hit = true;
|
||||
*tmin = srd->depth;
|
||||
}
|
||||
|
||||
if (srd->hit_count >= 2) {
|
||||
srd->back_hit = true;
|
||||
}
|
||||
if (BKE_pbvh_node_raycast(srd->ss->pbvh,
|
||||
node,
|
||||
origco,
|
||||
use_origco,
|
||||
srd->ray_start,
|
||||
srd->ray_normal,
|
||||
&srd->isect_precalc,
|
||||
&srd->hit_count,
|
||||
&srd->depth,
|
||||
&srd->back_depth,
|
||||
&srd->active_vertex_index,
|
||||
&srd->active_face_grid_index,
|
||||
srd->face_normal)) {
|
||||
srd->hit = true;
|
||||
*tmin = srd->depth;
|
||||
}
|
||||
|
||||
if (srd->hit_count >= 2) {
|
||||
srd->back_hit = true;
|
||||
}
|
||||
}
|
||||
|
||||
static void sculpt_find_nearest_to_ray_cb(PBVHNode *node, void *data_v, float *tmin)
|
||||
|
|
|
@ -567,9 +567,9 @@ static void do_cloth_brush_apply_forces_task_cb_ex(void *__restrict userdata,
|
|||
|
||||
/* When using the plane falloff mode the falloff is not constrained by the brush radius. */
|
||||
/* Brushes that use elastic deformation are also not constrained by radius. */
|
||||
if (!sculpt_brush_test_sq_fn(&test, current_vertex_location) && !use_falloff_plane && !use_elastic_drag)
|
||||
{
|
||||
continue;
|
||||
if (!sculpt_brush_test_sq_fn(&test, current_vertex_location) && !use_falloff_plane &&
|
||||
!use_elastic_drag) {
|
||||
continue;
|
||||
}
|
||||
|
||||
float dist = sqrtf(test.dist);
|
||||
|
@ -598,85 +598,85 @@ static void do_cloth_brush_apply_forces_task_cb_ex(void *__restrict userdata,
|
|||
copy_v3_v3(normal, vd.fno);
|
||||
}
|
||||
|
||||
switch (brush->cloth_deform_type) {
|
||||
case BRUSH_CLOTH_DEFORM_DRAG:
|
||||
sub_v3_v3v3(brush_disp, ss->cache->location, ss->cache->last_location);
|
||||
normalize_v3(brush_disp);
|
||||
mul_v3_v3fl(force, brush_disp, fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_PUSH:
|
||||
/* Invert the fade to push inwards. */
|
||||
mul_v3_v3fl(force, offset, -fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_GRAB:
|
||||
madd_v3_v3v3fl(cloth_sim->deformation_pos[vd.index],
|
||||
cloth_sim->init_pos[vd.index],
|
||||
ss->cache->grab_delta_symmetry,
|
||||
fade);
|
||||
if (use_falloff_plane) {
|
||||
cloth_sim->deformation_strength[vd.index] = clamp_f(fade, 0.0f, 1.0f);
|
||||
}
|
||||
else {
|
||||
cloth_sim->deformation_strength[vd.index] = 1.0f;
|
||||
}
|
||||
zero_v3(force);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_SNAKE_HOOK:
|
||||
copy_v3_v3(cloth_sim->deformation_pos[vd.index], cloth_sim->pos[vd.index]);
|
||||
madd_v3_v3fl(cloth_sim->deformation_pos[vd.index], ss->cache->grab_delta_symmetry, fade);
|
||||
cloth_sim->deformation_strength[vd.index] = fade;
|
||||
zero_v3(force);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_PINCH_POINT:
|
||||
if (use_falloff_plane) {
|
||||
float distance = dist_signed_to_plane_v3(vd.co, deform_plane);
|
||||
copy_v3_v3(brush_disp, plane_normal);
|
||||
mul_v3_fl(brush_disp, -distance);
|
||||
}
|
||||
else {
|
||||
sub_v3_v3v3(brush_disp, ss->cache->location, vd.co);
|
||||
}
|
||||
normalize_v3(brush_disp);
|
||||
mul_v3_v3fl(force, brush_disp, fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_PINCH_PERPENDICULAR: {
|
||||
float disp_center[3];
|
||||
float x_disp[3];
|
||||
float z_disp[3];
|
||||
sub_v3_v3v3(disp_center, ss->cache->location, vd.co);
|
||||
normalize_v3(disp_center);
|
||||
mul_v3_v3fl(x_disp, x_object_space, dot_v3v3(disp_center, x_object_space));
|
||||
mul_v3_v3fl(z_disp, z_object_space, dot_v3v3(disp_center, z_object_space));
|
||||
add_v3_v3v3(disp_center, x_disp, z_disp);
|
||||
mul_v3_v3fl(force, disp_center, fade);
|
||||
} break;
|
||||
case BRUSH_CLOTH_DEFORM_INFLATE:
|
||||
mul_v3_v3fl(force, normal, fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_EXPAND:
|
||||
cloth_sim->length_constraint_tweak[vd.index] += fade * 0.1f;
|
||||
zero_v3(force);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_ELASTIC_DRAG: {
|
||||
float final_disp[3];
|
||||
sub_v3_v3v3(brush_disp, ss->cache->location, ss->cache->last_location);
|
||||
mul_v3_v3fl(final_disp, brush_disp, ss->cache->bstrength);
|
||||
float location[3];
|
||||
if (use_falloff_plane) {
|
||||
closest_to_plane_v3(location, deform_plane, vd.co);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(location, ss->cache->location);
|
||||
}
|
||||
BKE_kelvinlet_grab_triscale(final_disp, ¶ms, vd.co, location, brush_disp);
|
||||
mul_v3_fl(final_disp, 20.0f * (1.0f - fade));
|
||||
add_v3_v3(cloth_sim->pos[vd.index], final_disp);
|
||||
zero_v3(force);
|
||||
}
|
||||
|
||||
switch (brush->cloth_deform_type) {
|
||||
case BRUSH_CLOTH_DEFORM_DRAG:
|
||||
sub_v3_v3v3(brush_disp, ss->cache->location, ss->cache->last_location);
|
||||
normalize_v3(brush_disp);
|
||||
mul_v3_v3fl(force, brush_disp, fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_PUSH:
|
||||
/* Invert the fade to push inwards. */
|
||||
mul_v3_v3fl(force, offset, -fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_GRAB:
|
||||
madd_v3_v3v3fl(cloth_sim->deformation_pos[vd.index],
|
||||
cloth_sim->init_pos[vd.index],
|
||||
ss->cache->grab_delta_symmetry,
|
||||
fade);
|
||||
if (use_falloff_plane) {
|
||||
cloth_sim->deformation_strength[vd.index] = clamp_f(fade, 0.0f, 1.0f);
|
||||
}
|
||||
else {
|
||||
cloth_sim->deformation_strength[vd.index] = 1.0f;
|
||||
}
|
||||
zero_v3(force);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_SNAKE_HOOK:
|
||||
copy_v3_v3(cloth_sim->deformation_pos[vd.index], cloth_sim->pos[vd.index]);
|
||||
madd_v3_v3fl(cloth_sim->deformation_pos[vd.index], ss->cache->grab_delta_symmetry, fade);
|
||||
cloth_sim->deformation_strength[vd.index] = fade;
|
||||
zero_v3(force);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_PINCH_POINT:
|
||||
if (use_falloff_plane) {
|
||||
float distance = dist_signed_to_plane_v3(vd.co, deform_plane);
|
||||
copy_v3_v3(brush_disp, plane_normal);
|
||||
mul_v3_fl(brush_disp, -distance);
|
||||
}
|
||||
else {
|
||||
sub_v3_v3v3(brush_disp, ss->cache->location, vd.co);
|
||||
}
|
||||
normalize_v3(brush_disp);
|
||||
mul_v3_v3fl(force, brush_disp, fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_PINCH_PERPENDICULAR: {
|
||||
float disp_center[3];
|
||||
float x_disp[3];
|
||||
float z_disp[3];
|
||||
sub_v3_v3v3(disp_center, ss->cache->location, vd.co);
|
||||
normalize_v3(disp_center);
|
||||
mul_v3_v3fl(x_disp, x_object_space, dot_v3v3(disp_center, x_object_space));
|
||||
mul_v3_v3fl(z_disp, z_object_space, dot_v3v3(disp_center, z_object_space));
|
||||
add_v3_v3v3(disp_center, x_disp, z_disp);
|
||||
mul_v3_v3fl(force, disp_center, fade);
|
||||
} break;
|
||||
case BRUSH_CLOTH_DEFORM_INFLATE:
|
||||
mul_v3_v3fl(force, normal, fade);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_EXPAND:
|
||||
cloth_sim->length_constraint_tweak[vd.index] += fade * 0.1f;
|
||||
zero_v3(force);
|
||||
break;
|
||||
case BRUSH_CLOTH_DEFORM_ELASTIC_DRAG: {
|
||||
float final_disp[3];
|
||||
sub_v3_v3v3(brush_disp, ss->cache->location, ss->cache->last_location);
|
||||
mul_v3_v3fl(final_disp, brush_disp, ss->cache->bstrength);
|
||||
float location[3];
|
||||
if (use_falloff_plane) {
|
||||
closest_to_plane_v3(location, deform_plane, vd.co);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(location, ss->cache->location);
|
||||
}
|
||||
BKE_kelvinlet_grab_triscale(final_disp, ¶ms, vd.co, location, brush_disp);
|
||||
mul_v3_fl(final_disp, 20.0f * (1.0f - fade));
|
||||
add_v3_v3(cloth_sim->pos[vd.index], final_disp);
|
||||
zero_v3(force);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
cloth_brush_apply_force_to_vertex(ss, ss->cache->cloth_sim, force, vd.index);
|
||||
}
|
||||
BKE_pbvh_vertex_iter_end;
|
||||
|
@ -865,19 +865,19 @@ static void do_cloth_brush_solve_simulation_task_cb_ex(
|
|||
const float mask_v = (1.0f - (vd.mask ? *vd.mask : 0.0f)) *
|
||||
SCULPT_automasking_factor_get(automasking, ss, vd.index);
|
||||
|
||||
/* Prevents the vertices from sliding without creating folds when all vertices and forces are
|
||||
* in the same plane. */
|
||||
float noise[3];
|
||||
cloth_simulation_noise_get(noise, ss, vd.index, 0.000001f);
|
||||
add_v3_v3(cloth_sim->pos[i], noise);
|
||||
/* Prevents the vertices from sliding without creating folds when all vertices and forces are
|
||||
* in the same plane. */
|
||||
float noise[3];
|
||||
cloth_simulation_noise_get(noise, ss, vd.index, 0.000001f);
|
||||
add_v3_v3(cloth_sim->pos[i], noise);
|
||||
|
||||
if (USE_SOLVER_RIPPLE_CONSTRAINT) {
|
||||
cloth_brush_constraint_pos_to_line(cloth_sim, i);
|
||||
}
|
||||
if (USE_SOLVER_RIPPLE_CONSTRAINT) {
|
||||
cloth_brush_constraint_pos_to_line(cloth_sim, i);
|
||||
}
|
||||
|
||||
if (cloth_sim->collider_list != NULL) {
|
||||
cloth_brush_solve_collision(data->ob, cloth_sim, i);
|
||||
}
|
||||
if (cloth_sim->collider_list != NULL) {
|
||||
cloth_brush_solve_collision(data->ob, cloth_sim, i);
|
||||
}
|
||||
|
||||
if (cloth_sim->collider_list != NULL) {
|
||||
cloth_brush_solve_collision(data->ob, cloth_sim, i);
|
||||
|
|
Loading…
Reference in New Issue