Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2013-09-16 06:24:41 +0400
committerAntony Riakiotakis <kalast@gmail.com>2013-09-16 06:24:41 +0400
commit43bd8c2b28d06953b64ed6d1e72cead9e42463a0 (patch)
treef892e882719adebdfd2fe9a563b7408f0bd69690 /source/blender/editors/sculpt_paint
parentabb37f4152ea8945fdffdc956acdd3002e54db2d (diff)
Undo the front-facing only commit for clay strips brushes, it adds an
attenuation that should really be optional. There's also a minor performance penalty and all this only for one problematic case. In case the tool flattens two surfaces, users can manually set the front face only option. A better non-attenuating way to cull such vertices can be added later. Also flatten brush should calculate the flatten plane from the original vertices or the flattening will not converge for planes offsets different than zero. Reported by Michalis Zissiou, thanks!
Diffstat (limited to 'source/blender/editors/sculpt_paint')
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index a7d851d7a67..d07f447b2fa 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -318,8 +318,6 @@ typedef struct StrokeCache {
float plane_trim_squared;
rcti previous_r; /* previous redraw rectangle */
-
- bool frontface; /* use front face */
} StrokeCache;
/************** Access to original unmodified vertex data *************/
@@ -671,10 +669,10 @@ static int sculpt_brush_test_cube(SculptBrushTest *test, float co[3], float loca
}
}
-static float frontface(bool ff, const float sculpt_normal[3],
+static float frontface(Brush *br, const float sculpt_normal[3],
const short no[3], const float fno[3])
{
- if (ff) {
+ if (br->flag & BRUSH_FRONTFACE) {
float dot;
if (no) {
@@ -1011,7 +1009,7 @@ static float tex_strength(SculptSession *ss, Brush *br,
/* Falloff curve */
avg *= BKE_brush_curve_strength(br, len, cache->radius);
- avg *= frontface(cache->frontface, sculpt_normal, vno, fno);
+ avg *= frontface(br, sculpt_normal, vno, fno);
/* Paint mask */
avg *= 1.0f - mask;
@@ -1289,13 +1287,13 @@ static void update_brush_local_mat(Sculpt *sd, Object *ob)
/* Test whether the StrokeCache.sculpt_normal needs update in
* do_brush_action() */
-static int brush_needs_sculpt_normal(const Brush *brush, SculptSession *ss)
+static int brush_needs_sculpt_normal(const Brush *brush)
{
return ((ELEM(brush->sculpt_tool,
SCULPT_TOOL_GRAB,
SCULPT_TOOL_SNAKE_HOOK) &&
((brush->normal_weight > 0) ||
- ss->cache->frontface)) ||
+ (brush->flag & BRUSH_FRONTFACE))) ||
ELEM7(brush->sculpt_tool,
SCULPT_TOOL_BLOB,
@@ -3139,7 +3137,7 @@ static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush)
BKE_pbvh_node_mark_update(nodes[n]);
}
- if (brush_needs_sculpt_normal(brush, ss))
+ if (brush_needs_sculpt_normal(brush))
update_sculpt_normal(sd, ob, nodes, totnode);
if (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA)
@@ -3905,10 +3903,10 @@ static void sculpt_update_cache_invariants(bContext *C, Sculpt *sd, SculptSessio
cache->original = 1;
}
- if (ELEM8(brush->sculpt_tool,
+ if (ELEM9(brush->sculpt_tool,
SCULPT_TOOL_DRAW, SCULPT_TOOL_CREASE, SCULPT_TOOL_BLOB,
SCULPT_TOOL_LAYER, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY,
- SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_ROTATE))
+ SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_ROTATE, SCULPT_TOOL_FLATTEN))
{
if (!(brush->flag & BRUSH_ACCUMULATE)) {
cache->original = 1;
@@ -3922,9 +3920,6 @@ static void sculpt_update_cache_invariants(bContext *C, Sculpt *sd, SculptSessio
cache->previous_vertex_rotation = 0;
cache->init_dir_set = false;
- cache->frontface = ((brush->flag & BRUSH_FRONTFACE) != 0) ||
- BKE_sculpt_brush_frontface_only(brush);
-
sculpt_omp_start(sd, ss);
}