Undo the front-facing only commit for clay strips brushes, it adds an
authorAntony Riakiotakis <kalast@gmail.com>
Mon, 16 Sep 2013 02:24:41 +0000 (02:24 +0000)
committerAntony Riakiotakis <kalast@gmail.com>
Mon, 16 Sep 2013 02:24:41 +0000 (02:24 +0000)
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!

release/scripts/startup/bl_ui/space_view3d_toolbar.py
source/blender/blenkernel/BKE_brush.h
source/blender/blenkernel/intern/brush.c
source/blender/editors/sculpt_paint/sculpt.c
source/blender/makesrna/intern/rna_brush.c

index ee7191f466266b864871ccbed1032478a2fe2364..d01df81030753824ec4fc84e97addbb5caa47fc6 100644 (file)
@@ -642,10 +642,9 @@ class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel):
                 row.prop(brush, "height", slider=True, text="Height")
 
             # use_frontface
-            if capabilities.has_frontface:
-                col.separator()
-                row = col.row()
-                row.prop(brush, "use_frontface", text="Front Faces Only")
+            col.separator()
+            row = col.row()
+            row.prop(brush, "use_frontface", text="Front Faces Only")
 
             # direction
             col.separator()
index ea2aa9c8bd39ec4918df0e6ef95a1f24049bbb12..b4c5f47cf25ac2d8396756fbac991f01cf2cb167 100644 (file)
@@ -111,8 +111,5 @@ void BKE_brush_scale_size(int *BKE_brush_size_get,
 /* debugging only */
 void BKE_brush_debug_print_state(struct Brush *br);
 
-/* sculpt */
-bool BKE_sculpt_brush_frontface_only(struct Brush *);
-
 #endif
 
index 7864216f39e42f9a2365fb443d3ff5c3e1c790b2..790c1f09ff087327022aaf3d6364a4d66807f0a5 100644 (file)
@@ -1048,8 +1048,3 @@ struct ImBuf *BKE_brush_gen_radial_control_imbuf(Brush *br, bool secondary)
 
        return im;
 }
-
-bool BKE_sculpt_brush_frontface_only(struct Brush *br)
-{
-       return br->sculpt_tool == SCULPT_TOOL_CLAY_STRIPS;
-}
index a7d851d7a677c0007733d4f93b50465ff2ebf5b7..d07f447b2fa0c6adb997e0eedba257507552b933 100644 (file)
@@ -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);
 }
 
index 78a1e7aa368cae2bf79b72af310d9badec9938f5..405d38e9683060fcd24666c3e98f0a0fc34bc518 100644 (file)
@@ -237,12 +237,6 @@ static int rna_SculptToolCapabilities_has_strength_get(PointerRNA *ptr)
        return !ELEM(br->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_SNAKE_HOOK);
 }
 
-static int rna_SculptToolCapabilities_has_frontface_get(PointerRNA *ptr)
-{
-       Brush *br = (Brush *)ptr->data;
-       return !BKE_sculpt_brush_frontface_only(br);
-}
-
 static int rna_BrushCapabilities_has_texture_angle_get(PointerRNA *ptr)
 {
        Brush *br = (Brush *)ptr->data;
@@ -562,7 +556,6 @@ static void rna_def_sculpt_capabilities(BlenderRNA *brna)
        SCULPT_TOOL_CAPABILITY(has_smooth_stroke, "Has Smooth Stroke");
        SCULPT_TOOL_CAPABILITY(has_space_attenuation, "Has Space Attenuation");
        SCULPT_TOOL_CAPABILITY(has_strength, "Has Strength");
-       SCULPT_TOOL_CAPABILITY(has_frontface, "Has Front Facing");
 
 #undef SCULPT_CAPABILITY
 }