Revision: 28988
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28988
Author:   jwilkins
Date:     2010-05-25 22:21:05 +0200 (Tue, 25 May 2010)

Log Message:
-----------
Fixed syntax error. Added contrast, fill, and scrape brushes.

Modified Paths:
--------------
    branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c

Modified: 
branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c     
2010-05-25 19:50:15 UTC (rev 28987)
+++ branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c     
2010-05-25 20:21:05 UTC (rev 28988)
@@ -559,6 +559,9 @@
        case SCULPT_TOOL_CLAY:
        case SCULPT_TOOL_FLATTEN:
        case SCULPT_TOOL_LAYER:
+        case SCULPT_TOOL_FILL:
+        case SCULPT_TOOL_SCRAPE:
+        case SCULPT_TOOL_CONTRAST:
                return alpha * dir * pressure * flip; /*XXX: not sure why? was 
multiplied by G.vd->grid */;
        case SCULPT_TOOL_SMOOTH:
                return alpha * 4 * pressure;
@@ -1380,7 +1383,7 @@
 
         BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
             if (sculpt_brush_test(&test, vd.co)) {
-                if (plane_point_side(vd.co, area_normal, limit, flip)) {
+                if (plane_point_side(vd.co, area_normal, center, flip)) {
                     float intr[3];
                     float val[3];
 
@@ -1403,6 +1406,148 @@
     }
 }
 
+static void do_contrast_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, 
int totnode)
+{
+    Brush *brush = paint_brush(&sd->paint);
+
+    float bstrength = ss->cache->bstrength;
+
+    float area_normal[3];
+    float center[3];
+
+    int n;
+
+    calc_area_normal(sd, ss, area_normal, nodes, totnode);
+
+    calc_flatten_center(sd, ss, nodes, totnode, center);
+
+    for(n = 0; n < totnode; n++) {
+        PBVHVertexIter  vd;
+        SculptBrushTest test;
+
+        sculpt_undo_push_node(ss, nodes[n]);
+
+        sculpt_brush_test_init(ss, &test);
+
+        BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
+            if(sculpt_brush_test(&test, vd.co)) {
+                float intr[3];
+                float val[3];
+
+                const float fade = bstrength * tex_strength(ss, brush, vd.co, 
test.dist);
+
+                point_plane_project(intr, vd.co, area_normal, center);
+                sub_v3_v3v3(val, intr, vd.co);
+                mul_v3_fl(val, -fade);
+                add_v3_v3(val, vd.co);
+
+                sculpt_clip(sd, ss, vd.co, val);
+
+                if(vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+            }
+        }
+        BLI_pbvh_vertex_iter_end;
+
+        BLI_pbvh_node_mark_update(nodes[n]);
+    }
+}
+
+static void do_fill_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int 
totnode)
+{
+    Brush *brush = paint_brush(&sd->paint);
+
+    float bstrength = ss->cache->bstrength;
+
+    float area_normal[3];
+    float center[3];
+
+    int n;
+    
+    calc_area_normal(sd, ss, area_normal, nodes, totnode);
+
+    calc_flatten_center(sd, ss, nodes, totnode, center);
+
+    for (n = 0; n < totnode; n++) {
+        PBVHVertexIter vd;
+        SculptBrushTest test;
+
+        sculpt_undo_push_node(ss, nodes[n]);
+
+        sculpt_brush_test_init(ss, &test);
+
+        BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
+            if (sculpt_brush_test(&test, vd.co)) {
+                if (plane_point_side(vd.co, area_normal, center, 0)) {
+                    float intr[3];
+                    float val[3];
+
+                    const float fade = bstrength * tex_strength(ss, brush, 
vd.co, test.dist);
+
+                    point_plane_project(intr, vd.co, area_normal, center);
+                    sub_v3_v3v3(val, intr, vd.co);
+                    mul_v3_fl(val, fade);
+                    add_v3_v3(val, vd.co);
+
+                    sculpt_clip(sd, ss, vd.co, val);
+
+                    if (vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+                }
+            }
+        }
+        BLI_pbvh_vertex_iter_end;
+
+        BLI_pbvh_node_mark_update(nodes[n]);
+    }
+}
+
+static void do_scrape_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, 
int totnode)
+{
+    Brush *brush = paint_brush(&sd->paint);
+
+    float bstrength = ss->cache->bstrength;
+
+    float area_normal[3];
+    float center[3];
+
+    int n;
+    
+    calc_area_normal(sd, ss, area_normal, nodes, totnode);
+
+    calc_flatten_center(sd, ss, nodes, totnode, center);
+
+    for (n = 0; n < totnode; n++) {
+        PBVHVertexIter vd;
+        SculptBrushTest test;
+
+        sculpt_undo_push_node(ss, nodes[n]);
+
+        sculpt_brush_test_init(ss, &test);
+
+        BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
+            if (sculpt_brush_test(&test, vd.co)) {
+                if (plane_point_side(vd.co, area_normal, center, 1)) {
+                    float intr[3];
+                    float val[3];
+
+                    const float fade = bstrength * tex_strength(ss, brush, 
vd.co, test.dist);
+
+                    point_plane_project(intr, vd.co, area_normal, center);
+                    sub_v3_v3v3(val, intr, vd.co);
+                    mul_v3_fl(val, fade);
+                    add_v3_v3(val, vd.co);
+
+                    sculpt_clip(sd, ss, vd.co, val);
+
+                    if (vd.mvert) vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+                }
+            }
+        }
+        BLI_pbvh_vertex_iter_end;
+
+        BLI_pbvh_node_mark_update(nodes[n]);
+    }
+}
+
 static void do_brush_action(Sculpt *sd, SculptSession *ss, StrokeCache *cache)
 {
        SculptSearchSphereData data;
@@ -1459,6 +1604,15 @@
                case SCULPT_TOOL_CLAY:
                        do_clay_brush(sd, ss, nodes, totnode);
                        break;
+                case SCULPT_TOOL_FILL:
+                        do_fill_brush(sd, ss, nodes, totnode);
+                        break;
+                case SCULPT_TOOL_SCRAPE:
+                        do_scrape_brush(sd, ss, nodes, totnode);
+                        break;
+                case SCULPT_TOOL_CONTRAST:
+                        do_contrast_brush(sd, ss, nodes, totnode);
+                        break;
                }
        
                /* copy the modified vertices from mesh to the active key */
@@ -1625,7 +1779,15 @@
        case SCULPT_TOOL_LAYER:
                return "Layer Brush"; break;
        case SCULPT_TOOL_FLATTEN:
-                return "Flatten Brush"; break;
+                return "Flatten Brush"; break;
+        case SCULPT_TOOL_CLAY:
+                return "Clay Brush"; break;
+        case SCULPT_TOOL_FILL:
+                return "Fill Brush"; break;
+        case SCULPT_TOOL_SCRAPE:
+                return "Scrape Brush"; break;
+        case SCULPT_TOOL_CONTRAST:
+                return "Constrast Brush"; break;
        default:
                return "Sculpting"; break;
        }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to