[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35409] trunk/blender/source/blender/ blenkernel/intern/brush.c: Fix #26408: [texture paint] brush spacing

Sergey Sharybin g.ulairi at gmail.com
Tue Mar 8 20:52:36 CET 2011


Revision: 35409
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35409
Author:   nazgul
Date:     2011-03-08 19:52:35 +0000 (Tue, 08 Mar 2011)
Log Message:
-----------
Fix #26408: [texture paint] brush spacing

Implemented non-spacing strokes (which are making paint step at each
mouse-move event).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/brush.c

Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c	2011-03-08 16:52:10 UTC (rev 35408)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c	2011-03-08 19:52:35 UTC (rev 35409)
@@ -1018,29 +1018,42 @@
 		len= normalize_v2(dmousepos);
 		painter->accumdistance += len;
 
-		/* do paint op over unpainted distance */
-		while ((len > 0.0f) && (painter->accumdistance >= spacing)) {
-			step= spacing - startdistance;
-			paintpos[0]= painter->lastmousepos[0] + dmousepos[0]*step;
-			paintpos[1]= painter->lastmousepos[1] + dmousepos[1]*step;
+		if (brush->flag & BRUSH_SPACE) {
+			/* do paint op over unpainted distance */
+			while ((len > 0.0f) && (painter->accumdistance >= spacing)) {
+				step= spacing - startdistance;
+				paintpos[0]= painter->lastmousepos[0] + dmousepos[0]*step;
+				paintpos[1]= painter->lastmousepos[1] + dmousepos[1]*step;
 
-			t = step/len;
-			press= (1.0f-t)*painter->lastpressure + t*pressure;
-			brush_apply_pressure(painter, brush, press);
-			spacing= MAX2(1.0f, radius)*brush->spacing*0.01f;
+				t = step/len;
+				press= (1.0f-t)*painter->lastpressure + t*pressure;
+				brush_apply_pressure(painter, brush, press);
+				spacing= MAX2(1.0f, radius)*brush->spacing*0.01f;
 
-			brush_jitter_pos(brush, paintpos, finalpos);
+				brush_jitter_pos(brush, paintpos, finalpos);
 
+				if (painter->cache.enabled)
+					brush_painter_refresh_cache(painter, finalpos);
+
+				totpaintops +=
+					func(user, painter->cache.ibuf, painter->lastpaintpos, finalpos);
+
+				painter->lastpaintpos[0]= paintpos[0];
+				painter->lastpaintpos[1]= paintpos[1];
+				painter->accumdistance -= spacing;
+				startdistance -= spacing;
+			}
+		} else {
+			brush_jitter_pos(brush, pos, finalpos);
+
 			if (painter->cache.enabled)
 				brush_painter_refresh_cache(painter, finalpos);
 
-			totpaintops +=
-				func(user, painter->cache.ibuf, painter->lastpaintpos, finalpos);
+			totpaintops += func(user, painter->cache.ibuf, pos, finalpos);
 
-			painter->lastpaintpos[0]= paintpos[0];
-			painter->lastpaintpos[1]= paintpos[1];
-			painter->accumdistance -= spacing;
-			startdistance -= spacing;
+			painter->lastpaintpos[0]= pos[0];
+			painter->lastpaintpos[1]= pos[1];
+			painter->accumdistance= 0;
 		}
 
 		/* do airbrush paint ops, based on the number of paint ops left over




More information about the Bf-blender-cvs mailing list