[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23441] trunk/blender/source/blender: brush curve - use clamped values (0-1) for everything except sculpt which can have positive and negative values.

Campbell Barton ideasman42 at gmail.com
Thu Sep 24 03:32:24 CEST 2009


Revision: 23441
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23441
Author:   campbellbarton
Date:     2009-09-24 03:32:23 +0200 (Thu, 24 Sep 2009)

Log Message:
-----------
brush curve - use clamped values (0-1) for everything except sculpt which can have positive and negative values.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_brush.h
    trunk/blender/source/blender/blenkernel/intern/brush.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c

Modified: trunk/blender/source/blender/blenkernel/BKE_brush.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_brush.h	2009-09-23 21:46:29 UTC (rev 23440)
+++ trunk/blender/source/blender/blenkernel/BKE_brush.h	2009-09-24 01:32:23 UTC (rev 23441)
@@ -60,7 +60,8 @@
 	BRUSH_PRESET_MAX
 } BrushCurvePreset;
 void brush_curve_preset(struct Brush *b, BrushCurvePreset preset);
-float brush_curve_strength(struct Brush *br, float p, const float len);
+float brush_curve_strength_clamp(struct Brush *br, float p, const float len);
+float brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */
 
 /* sampling */
 void brush_sample_tex(struct Brush *brush, float *xy, float *rgba);

Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c	2009-09-23 21:46:29 UTC (rev 23440)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c	2009-09-24 01:32:23 UTC (rev 23441)
@@ -442,7 +442,7 @@
 					dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
 
 					VECCOPY(dstf, brush->rgb);
-					dstf[3]= brush->alpha*brush_curve_strength(brush, dist, maxsize);
+					dstf[3]= brush->alpha*brush_curve_strength_clamp(brush, dist, maxsize);
 				}
 				else if (texfall == 1) {
 					brush_sample_tex(brush, xy, dstf);
@@ -455,7 +455,7 @@
 					dstf[0] = rgba[0]*brush->rgb[0];
 					dstf[1] = rgba[1]*brush->rgb[1];
 					dstf[2] = rgba[2]*brush->rgb[2];
-					dstf[3] = rgba[3]*brush->alpha*brush_curve_strength(brush, dist, maxsize);
+					dstf[3] = rgba[3]*brush->alpha*brush_curve_strength_clamp(brush, dist, maxsize);
 				}
 			}
 		}
@@ -494,7 +494,7 @@
 					dst[0] = FTOCHAR(rgba[0]*brush->rgb[0]);
 					dst[1] = FTOCHAR(rgba[1]*brush->rgb[1]);
 					dst[2] = FTOCHAR(rgba[2]*brush->rgb[2]);
-					dst[3] = FTOCHAR(rgba[3]*brush->alpha*brush_curve_strength(brush, dist, maxsize));
+					dst[3] = FTOCHAR(rgba[3]*brush->alpha*brush_curve_strength_clamp(brush, dist, maxsize));
 				}
 			}
 		}
@@ -952,12 +952,23 @@
 }
 
 /* Uses the brush curve control to find a strength value between 0 and 1 */
+float brush_curve_strength_clamp(Brush *br, float p, const float len)
+{
+	if(p >= len)	p= 1.0f;
+	else			p= p/len;
+
+	p= curvemapping_evaluateF(br->curve, 0, p);
+	if(p < 0.0)			p= 0.0f;
+	else if(p > 1.0f)	p= 1.0f;
+	return p;
+}
+/* same as above but can return negative values if the curve enables
+ * used for sculpt only */
 float brush_curve_strength(Brush *br, float p, const float len)
 {
-	float f;
-	if(p > len) p= len;
-	f= curvemapping_evaluateF(br->curve, 0, p/len);
-	return (f > 0.0f) ? f:0.0f;
+	if(p >= len)	p= 1.0f;
+	else			p= p/len;
+	return curvemapping_evaluateF(br->curve, 0, p);
 }
 
 /* TODO: should probably be unified with BrushPainter stuff? */
@@ -1024,7 +1035,7 @@
 	for(i=0; i<side; ++i) {
 		for(j=0; j<side; ++j) {
 			float magn= sqrt(pow(i - half, 2) + pow(j - half, 2));
-			im->rect_float[i*side + j]= brush_curve_strength(br, magn, half);
+			im->rect_float[i*side + j]= brush_curve_strength_clamp(br, magn, half);
 		}
 	}
 

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2009-09-23 21:46:29 UTC (rev 23440)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2009-09-24 01:32:23 UTC (rev 23441)
@@ -3731,7 +3731,7 @@
 			
 			/*if (dist < s->brush->size) {*/ /* correct but uses a sqrtf */
 			if (dist_nosqrt < brush_size_sqared && (dist=sqrtf(dist_nosqrt)) < size_half) {
-				falloff = brush_curve_strength(ps->brush, dist, size_half);
+				falloff = brush_curve_strength_clamp(ps->brush, dist, size_half);
 				if (falloff > 0.0f) {
 					if (ps->is_texbrush) {
 						brush_sample_tex(ps->brush, projPixel->projCoSS, rgba);





More information about the Bf-blender-cvs mailing list