[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21064] branches/blender2.5/blender/source /blender/editors/sculpt_paint/sculpt.c: 2.5/Sculpt:

Nicholas Bishop nicholasbishop at gmail.com
Sun Jun 21 19:04:17 CEST 2009


Revision: 21064
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21064
Author:   nicholasbishop
Date:     2009-06-21 19:04:17 +0200 (Sun, 21 Jun 2009)

Log Message:
-----------
2.5/Sculpt:

Some improvements to the layer brush; the displacement is now tied to brush size, like for draw and inflate.

Fixes for layer brush in subtract mode and anchor mode.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c	2009-06-21 17:03:17 UTC (rev 21063)
+++ branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c	2009-06-21 17:04:17 UTC (rev 21064)
@@ -241,7 +241,6 @@
 	float dir= sd->brush->flag & BRUSH_DIR_IN ? -1 : 1;
 	float pressure= 1;
 	float flip= cache->flip ? -1:1;
-	float anchored = sd->brush->flag & BRUSH_ANCHORED ? 25 : 1;
 
 	if(sd->brush->flag & BRUSH_ALPHA_PRESSURE)
 		pressure *= cache->pressure;
@@ -251,6 +250,7 @@
 	case SCULPT_TOOL_INFLATE:
 	case SCULPT_TOOL_CLAY:
 	case SCULPT_TOOL_FLATTEN:
+	case SCULPT_TOOL_LAYER:
 		return alpha * dir * pressure * flip; /*XXX: not sure why? was multiplied by G.vd->grid */;
 	case SCULPT_TOOL_SMOOTH:
 		return alpha * 4 * pressure;
@@ -258,8 +258,6 @@
 		return alpha / 2 * dir * pressure * flip;
 	case SCULPT_TOOL_GRAB:
 		return 1;
-	case SCULPT_TOOL_LAYER:
-		return sd->brush->alpha / 50.0f * dir * pressure * flip * anchored; /*XXX: not sure why? multiplied by G.vd->grid */;
 	default:
 		return 0;
 	}
@@ -474,35 +472,30 @@
 {
 	float area_normal[3];
 	ActiveData *node= active_verts->first;
-	float lim= brush_strength(sd, ss->cache);
+	float lim= ss->cache->radius / 4;
 
-	if(sd->brush->flag & BRUSH_DIR_IN)
+	if(ss->cache->flip)
 		lim = -lim;
 
 	calc_area_normal(sd, area_normal, active_verts);
 
 	while(node){
 		float *disp= &ss->cache->layer_disps[node->Index];
+		float *co= ss->mvert[node->Index].co;
+		float val[3];
 		
-		if((lim > 0 && *disp < lim) ||
-		   (lim < 0 && *disp > lim)) {
-		  	float *co= ss->mvert[node->Index].co;
-			float val[3];
-		  	
-			*disp+= node->Fade;
+		*disp+= node->Fade;
+		
+		/* Don't let the displacement go past the limit */
+		if((lim < 0 && *disp < lim) || (lim > 0 && *disp > lim))
+			*disp = lim;
+		
+		val[0] = ss->cache->mesh_store[node->Index][0]+area_normal[0] * *disp*ss->cache->scale[0];
+		val[1] = ss->cache->mesh_store[node->Index][1]+area_normal[1] * *disp*ss->cache->scale[1];
+		val[2] = ss->cache->mesh_store[node->Index][2]+area_normal[2] * *disp*ss->cache->scale[2];
 
-			if(lim < 0 && *disp < lim)
-				*disp = lim;
-			else if(lim > 0 && *disp > lim)
-					*disp = lim;
+		sculpt_clip(ss->cache, co, val);
 
-			val[0] = ss->cache->mesh_store[node->Index][0]+area_normal[0] * *disp*ss->cache->scale[0];
-			val[1] = ss->cache->mesh_store[node->Index][1]+area_normal[1] * *disp*ss->cache->scale[1];
-			val[2] = ss->cache->mesh_store[node->Index][2]+area_normal[2] * *disp*ss->cache->scale[2];
-			//VecMulf(val, ss->cache->radius);
-			sculpt_clip(ss->cache, co, val);
-		}
-
 		node= node->next;
 	}
 }
@@ -1370,9 +1363,11 @@
 
 	sculpt_update_mesh_elements(C);
 
+	if(sd->brush->sculpt_tool == SCULPT_TOOL_LAYER)
+		cache->layer_disps = MEM_callocN(sizeof(float) * sd->session->totvert, "layer brush displacements");
+
 	/* Make copies of the mesh vertex locations and normals for some tools */
 	if(sd->brush->sculpt_tool == SCULPT_TOOL_LAYER || (sd->brush->flag & BRUSH_ANCHORED)) {
-		cache->layer_disps = MEM_callocN(sizeof(float) * sd->session->totvert, "layer brush displacements");
 		cache->mesh_store= MEM_mallocN(sizeof(float) * 3 * sd->session->totvert, "sculpt mesh vertices copy");
 		for(i = 0; i < sd->session->totvert; ++i)
 			VecCopyf(cache->mesh_store[i], sd->session->mvert[i].co);
@@ -1535,6 +1530,9 @@
 			for(i = 0; i < ss->totface; ++i, fn += 3)
 				VecCopyf(fn, cache->face_norms[i]);
 		}
+
+		if(sd->brush->sculpt_tool == SCULPT_TOOL_LAYER)
+			memset(cache->layer_disps, 0, sizeof(float) * ss->totvert);
 	}
 }
 





More information about the Bf-blender-cvs mailing list