[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31052] branches/soc-2010-jwilkins: == Gravity Tool ==

Jason Wilkins Jason.A.Wilkins at gmail.com
Thu Aug 5 02:06:12 CEST 2010


Revision: 31052
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31052
Author:   jwilkins
Date:     2010-08-05 02:06:05 +0200 (Thu, 05 Aug 2010)

Log Message:
-----------
== Gravity Tool ==
preliminary gravity tool

Modified Paths:
--------------
    branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py
    branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/paint_stroke.c
    branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c
    branches/soc-2010-jwilkins/source/blender/makesdna/DNA_brush_types.h
    branches/soc-2010-jwilkins/source/blender/makesrna/intern/rna_brush.c

Modified: branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py	2010-08-04 19:35:27 UTC (rev 31051)
+++ branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py	2010-08-05 00:06:05 UTC (rev 31052)
@@ -651,7 +651,7 @@
             col.separator()
             col.row().prop(brush, "direction", expand=True)
 
-            if brush.sculpt_tool in ('DRAW', 'CREASE', 'BLOB', 'INFLATE', 'LAYER', 'CLAY', 'CLAY_STRIP'):
+            if brush.sculpt_tool in ('DRAW', 'GRAVITY', 'CREASE', 'BLOB', 'INFLATE', 'LAYER', 'CLAY', 'CLAY_STRIP'):
                 col.separator()
 
                 col.prop(brush, "use_accumulate")
@@ -1080,7 +1080,7 @@
         col = layout.column();
 
         if context.sculpt_object and context.tool_settings.sculpt:
-            if brush.sculpt_tool in ('DRAW', 'INFLATE', 'CLAY', 'CLAY_STRIPS', 'PINCH', 'CREASE', 'BLOB', 'FLATTEN', 'FILL', 'SCRAPE'):
+            if brush.sculpt_tool in ('DRAW', 'GRAVITY', 'INFLATE', 'CLAY', 'CLAY_STRIPS', 'PINCH', 'CREASE', 'BLOB', 'FLATTEN', 'FILL', 'SCRAPE'):
                 col.prop(brush, "add_col", text="Add Color")
                 col.prop(brush, "sub_col", text="Subtract Color")
             else:

Modified: branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/paint_stroke.c	2010-08-04 19:35:27 UTC (rev 31051)
+++ branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/paint_stroke.c	2010-08-05 00:06:05 UTC (rev 31052)
@@ -1301,7 +1301,7 @@
 
 		sign = flip * ((brush->flag & BRUSH_DIR_IN)? -1 : 1);
 
-		if (sign < 0 && ELEM4(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH))
+		if (sign < 0 && ELEM5(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_GRAVITY, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH))
 			col = brush->sub_col;
 		else
 			col = brush->add_col;

Modified: branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c	2010-08-04 19:35:27 UTC (rev 31051)
+++ branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/sculpt.c	2010-08-05 00:06:05 UTC (rev 31052)
@@ -658,6 +658,7 @@
 		case SCULPT_TOOL_CLAY:
 		case SCULPT_TOOL_CLAY_STRIPS:
 		case SCULPT_TOOL_DRAW:
+		case SCULPT_TOOL_GRAVITY:
 		case SCULPT_TOOL_LAYER:
 			return alpha * flip * pressure * overlap * feather;
 
@@ -1411,6 +1412,60 @@
 	}
 }
 
+static void do_gravity_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode)
+{
+	Brush *brush = paint_brush(&sd->paint);
+	float offset[3], an[3];
+	float bstrength= ss->cache->bstrength;
+	int n;
+	float gravity[3];
+
+	gravity[0]= gravity[1]= 0;
+	gravity[2]= -ss->cache->radius / 2;
+
+	calc_sculpt_normal(sd, ss, an, nodes, totnode, brush->sculpt_plane_range);
+
+	set_brush_local_mat(sd, ss, brush, NULL, 0, an);
+
+	set_adaptive_space_factor(sd, ss, NULL, 0, an);
+
+	/* offset with as much as possible factored in already */
+	mul_v3_v3fl(offset, gravity, ss->cache->radius);
+	mul_v3_v3(offset, ss->cache->scale);
+	mul_v3_fl(offset, bstrength);
+
+	/* threaded loop over nodes */
+	#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
+	for(n=0; n<totnode; n++) {
+		PBVHVertexIter vd;
+		SculptBrushTest test;
+		float (*proxy)[3];
+		short (*origno)[3];
+		SculptUndoNode *unode;
+
+		unode=  sculpt_undo_push_node(ss, nodes[n]);
+		origno= unode->no;
+
+		proxy= BLI_pbvh_node_add_proxy(ss->pbvh, nodes[n])->co;
+
+		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(sculpt_brush_test_cyl(&test, vd.co, ss->cache->location, an)) {
+				/* offset vertex */
+				float fade = tex_strength(ss, brush, vd.co, test.dist)*frontface(brush, ss->cache->frontface_start, ss->cache->frontface_range, an, origno[vd.i]);
+
+				mul_v3_v3fl(proxy[vd.i], offset, fade);
+
+				if(vd.mvert)
+					vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+			}
+		}
+		BLI_pbvh_vertex_iter_end;
+	}
+}
+
 static void do_crease_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode)
 {
 	Brush *brush = paint_brush(&sd->paint);
@@ -2671,6 +2726,9 @@
 		case SCULPT_TOOL_DRAW:
 			do_draw_brush(sd, ss, nodes, totnode);
 			break;
+		case SCULPT_TOOL_GRAVITY:
+			do_gravity_brush(sd, ss, nodes, totnode);
+			break;
 		case SCULPT_TOOL_SMOOTH:
 			do_smooth_brush(sd, ss, nodes, totnode);
 			break;
@@ -2786,6 +2844,7 @@
 			break;
 
 		case SCULPT_TOOL_DRAW:
+		case SCULPT_TOOL_GRAVITY:
 		case SCULPT_TOOL_CLAY:
 		case SCULPT_TOOL_CLAY_STRIPS:
 		case SCULPT_TOOL_CREASE:
@@ -3009,6 +3068,8 @@
 	switch(brush->sculpt_tool) {
 	case SCULPT_TOOL_DRAW:
 		return "Draw Brush"; break;
+	case SCULPT_TOOL_GRAVITY:
+		return "Gravity Brush"; break;
 	case SCULPT_TOOL_SMOOTH:
 		return "Smooth Brush"; break;
 	case SCULPT_TOOL_CREASE:
@@ -3222,7 +3283,7 @@
 		cache->original = 1;
 	}
 
-	if(ELEM7(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))
+	if(ELEM8(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_GRAVITY,  SCULPT_TOOL_CREASE, SCULPT_TOOL_BLOB, SCULPT_TOOL_LAYER, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_CLAY_STRIPS))
 		if(!(brush->flag & BRUSH_ACCUMULATE))
 			cache->original = 1;
 

Modified: branches/soc-2010-jwilkins/source/blender/makesdna/DNA_brush_types.h
===================================================================
--- branches/soc-2010-jwilkins/source/blender/makesdna/DNA_brush_types.h	2010-08-04 19:35:27 UTC (rev 31051)
+++ branches/soc-2010-jwilkins/source/blender/makesdna/DNA_brush_types.h	2010-08-05 00:06:05 UTC (rev 31052)
@@ -133,24 +133,25 @@
 #define BRUSH_SYMMETRY_FEATHER (1<<29)
 
 /* Brush.sculpt_tool */
-#define SCULPT_TOOL_DRAW        1
-#define SCULPT_TOOL_SMOOTH      2
-#define SCULPT_TOOL_PINCH       3
-#define SCULPT_TOOL_INFLATE     4
-#define SCULPT_TOOL_GRAB        5
-#define SCULPT_TOOL_LAYER       6
-#define SCULPT_TOOL_FLATTEN     7
-#define SCULPT_TOOL_CLAY        8
-#define SCULPT_TOOL_FILL        9
-#define SCULPT_TOOL_SCRAPE     10
-#define SCULPT_TOOL_NUDGE      11
-#define SCULPT_TOOL_THUMB      12
-#define SCULPT_TOOL_SNAKE_HOOK 13
-#define SCULPT_TOOL_ROTATE     14
-//#define SCULPT_TOOL_WAX        15 // XXX: reuse this slot later
-#define SCULPT_TOOL_CREASE     16
-#define SCULPT_TOOL_BLOB       17
+#define SCULPT_TOOL_DRAW         1
+#define SCULPT_TOOL_SMOOTH       2
+#define SCULPT_TOOL_PINCH        3
+#define SCULPT_TOOL_INFLATE      4
+#define SCULPT_TOOL_GRAB         5
+#define SCULPT_TOOL_LAYER        6
+#define SCULPT_TOOL_FLATTEN      7
+#define SCULPT_TOOL_CLAY         8
+#define SCULPT_TOOL_FILL         9
+#define SCULPT_TOOL_SCRAPE      10
+#define SCULPT_TOOL_NUDGE       11
+#define SCULPT_TOOL_THUMB       12
+#define SCULPT_TOOL_SNAKE_HOOK  13
+#define SCULPT_TOOL_ROTATE      14
+//#define SCULPT_TOOL_WAX         15 // XXX: reuse this slot later
+#define SCULPT_TOOL_CREASE      16
+#define SCULPT_TOOL_BLOB        17
 #define SCULPT_TOOL_CLAY_STRIPS 18
+#define SCULPT_TOOL_GRAVITY     19
 
 /* ImagePaintSettings.tool */
 #define PAINT_TOOL_DRAW		0

Modified: branches/soc-2010-jwilkins/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/makesrna/intern/rna_brush.c	2010-08-04 19:35:27 UTC (rev 31051)
+++ branches/soc-2010-jwilkins/source/blender/makesrna/intern/rna_brush.c	2010-08-05 00:06:05 UTC (rev 31052)
@@ -56,6 +56,7 @@
 	{SCULPT_TOOL_CLAY_STRIPS, "CLAY_STRIPS", ICON_BRUSH_CLAY, "Clay Strips", ""},
 	{SCULPT_TOOL_CREASE, "CREASE",ICON_BRUSH_CREASE, "Crease", ""},
 	{SCULPT_TOOL_DRAW, "DRAW", ICON_BRUSH_SCULPT_DRAW, "Draw", ""},
+	{SCULPT_TOOL_GRAVITY, "GRAVITY", ICON_BRUSH_SCULPT_DRAW, "Gravity", ""},
 	{SCULPT_TOOL_FILL, "FILL", ICON_BRUSH_FILL, "Fill", ""},
 	{SCULPT_TOOL_FLATTEN, "FLATTEN", ICON_BRUSH_FLATTEN, "Flatten", ""},
 	{SCULPT_TOOL_GRAB, "GRAB", ICON_BRUSH_GRAB, "Grab", ""},





More information about the Bf-blender-cvs mailing list