Fix T53577: Rake sculpt/paint wrong on first step
This commit is contained in:
parent
342a322a93
commit
076616898b
Notes:
blender-bot
2023-02-14 08:39:23 +01:00
Referenced by issue #53683, 2.79a release Referenced by issue #53577, Rake sculpt/paint option is always wrong on first step
|
@ -155,7 +155,7 @@ float paint_grid_paint_mask(const struct GridPaintMask *gpm, unsigned level,
|
|||
unsigned x, unsigned y);
|
||||
|
||||
/* stroke related */
|
||||
void paint_calculate_rake_rotation(struct UnifiedPaintSettings *ups, struct Brush *brush, const float mouse_pos[2]);
|
||||
bool paint_calculate_rake_rotation(struct UnifiedPaintSettings *ups, struct Brush *brush, const float mouse_pos[2]);
|
||||
void paint_update_brush_rake_rotation(struct UnifiedPaintSettings *ups, struct Brush *brush, float rotation);
|
||||
|
||||
void BKE_paint_stroke_get_average(struct Scene *scene, struct Object *ob, float stroke[3]);
|
||||
|
|
|
@ -638,8 +638,9 @@ void paint_update_brush_rake_rotation(UnifiedPaintSettings *ups, Brush *brush, f
|
|||
ups->brush_rotation_sec = 0.0f;
|
||||
}
|
||||
|
||||
void paint_calculate_rake_rotation(UnifiedPaintSettings *ups, Brush *brush, const float mouse_pos[2])
|
||||
bool paint_calculate_rake_rotation(UnifiedPaintSettings *ups, Brush *brush, const float mouse_pos[2])
|
||||
{
|
||||
bool ok = false;
|
||||
if ((brush->mtex.brush_angle_mode & MTEX_ANGLE_RAKE) || (brush->mask_mtex.brush_angle_mode & MTEX_ANGLE_RAKE)) {
|
||||
const float r = RAKE_THRESHHOLD;
|
||||
float rotation;
|
||||
|
@ -655,16 +656,20 @@ void paint_calculate_rake_rotation(UnifiedPaintSettings *ups, Brush *brush, cons
|
|||
ups->last_rake_angle = rotation;
|
||||
|
||||
paint_update_brush_rake_rotation(ups, brush, rotation);
|
||||
ok = true;
|
||||
}
|
||||
/* make sure we reset here to the last rotation to avoid accumulating
|
||||
* values in case a random rotation is also added */
|
||||
else {
|
||||
paint_update_brush_rake_rotation(ups, brush, ups->last_rake_angle);
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
ups->brush_rotation = ups->brush_rotation_sec = 0.0f;
|
||||
ok = true;
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
void BKE_sculptsession_free_deformMats(SculptSession *ss)
|
||||
|
|
|
@ -224,6 +224,9 @@ static bool paint_brush_update(bContext *C,
|
|||
UnifiedPaintSettings *ups = stroke->ups;
|
||||
bool location_sampled = false;
|
||||
bool location_success = false;
|
||||
/* Use to perform all operations except applying the stroke,
|
||||
* needed for operations that require cursor motion (rake). */
|
||||
bool is_dry_run = false;
|
||||
bool do_random = false;
|
||||
bool do_random_mask = false;
|
||||
/* XXX: Use pressure value from first brush step for brushes which don't
|
||||
|
@ -362,7 +365,10 @@ static bool paint_brush_update(bContext *C,
|
|||
}
|
||||
/* curve strokes do their own rake calculation */
|
||||
else if (!(brush->flag & BRUSH_CURVE)) {
|
||||
paint_calculate_rake_rotation(ups, brush, mouse_init);
|
||||
if (!paint_calculate_rake_rotation(ups, brush, mouse_init)) {
|
||||
/* Not enough motion to define an angle. */
|
||||
is_dry_run = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,7 +399,7 @@ static bool paint_brush_update(bContext *C,
|
|||
}
|
||||
}
|
||||
|
||||
return location_success;
|
||||
return location_success && (is_dry_run == false);
|
||||
}
|
||||
|
||||
static bool paint_stroke_use_jitter(ePaintMode mode, Brush *brush, bool invert)
|
||||
|
|
Loading…
Reference in New Issue