[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58571] branches/soc-2013-paint/source/ blender/editors/sculpt_paint/paint_stroke.c: * Do not add a dab for lines until mouse button is released.

Antony Riakiotakis kalast at gmail.com
Wed Jul 24 13:59:11 CEST 2013


Revision: 58571
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58571
Author:   psy-fi
Date:     2013-07-24 11:59:10 +0000 (Wed, 24 Jul 2013)
Log Message:
-----------
* Do not add a dab for lines until mouse button is released.
* Fix line strokes getting infinity mouse results for sculting.

Modified Paths:
--------------
    branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c

Modified: branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c	2013-07-24 11:10:54 UTC (rev 58570)
+++ branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c	2013-07-24 11:59:10 UTC (rev 58571)
@@ -470,43 +470,40 @@
 	const Scene *scene = CTX_data_scene(C);
 	PaintStroke *stroke = op->customdata;
 	UnifiedPaintSettings *ups = stroke->ups;
-	PaintMode mode = BKE_paintmode_get_active_from_context(C);
 	int cnt = 0;
 
-	if (paint_space_stroke_enabled(stroke->brush, mode)) {
-		float pressure, dpressure;
-		float mouse[2], dmouse[2];
-		float length;
+	float pressure, dpressure;
+	float mouse[2], dmouse[2];
+	float length;
 
-		sub_v2_v2v2(dmouse, final_mouse, stroke->last_mouse_position);
+	sub_v2_v2v2(dmouse, final_mouse, stroke->last_mouse_position);
 
-		pressure = stroke->last_pressure;
-		dpressure = final_pressure - stroke->last_pressure;
+	pressure = stroke->last_pressure;
+	dpressure = final_pressure - stroke->last_pressure;
 
-		length = normalize_v2(dmouse);
+	length = normalize_v2(dmouse);
 
-		while (length > 0.0f) {
-			float spacing = paint_space_stroke_spacing_variable(scene, stroke, pressure, dpressure, length);
-			
-			if (length >= spacing) {
-				mouse[0] = stroke->last_mouse_position[0] + dmouse[0] * spacing;
-				mouse[1] = stroke->last_mouse_position[1] + dmouse[1] * spacing;
-				pressure = stroke->last_pressure + (spacing / length) * dpressure;
+	while (length > 0.0f) {
+		float spacing = paint_space_stroke_spacing_variable(scene, stroke, pressure, dpressure, length);
 
-				ups->overlap_factor = paint_stroke_integrate_overlap(stroke->brush, spacing/stroke->zoom_2d);
+		if (length >= spacing) {
+			mouse[0] = stroke->last_mouse_position[0] + dmouse[0] * spacing;
+			mouse[1] = stroke->last_mouse_position[1] + dmouse[1] * spacing;
+			pressure = stroke->last_pressure + (spacing / length) * dpressure;
 
-				paint_brush_stroke_add_step(C, op, mouse, pressure);
+			ups->overlap_factor = paint_stroke_integrate_overlap(stroke->brush, spacing/stroke->zoom_2d);
 
-				length -= spacing;
-				pressure = stroke->last_pressure;
-				dpressure = final_pressure - stroke->last_pressure;
+			paint_brush_stroke_add_step(C, op, mouse, pressure);
 
-				cnt++;
-			}
-			else {
-				break;
-			}
+			length -= spacing;
+			pressure = stroke->last_pressure;
+			dpressure = final_pressure - stroke->last_pressure;
+
+			cnt++;
 		}
+		else {
+			break;
+		}
 	}
 
 	return cnt;
@@ -588,7 +585,7 @@
 /* Returns zero if the stroke dots should not be spaced, non-zero otherwise */
 bool paint_space_stroke_enabled(Brush *br, PaintMode mode)
 {
-	return (br->flag & (BRUSH_SPACE | BRUSH_LINE)) && paint_supports_dynamic_size(br, mode);
+	return (br->flag & (BRUSH_SPACE)) && paint_supports_dynamic_size(br, mode);
 }
 
 static bool sculpt_is_grab_tool(Brush *br)
@@ -787,15 +784,20 @@
 
 	if (event->type == stroke->event_type && event->val == KM_RELEASE && !first_modal) {
 		if (stroke->brush->flag & BRUSH_LINE) {
-			paint_space_stroke(C, op, sample_average.mouse, sample_average.pressure);
+			stroke->ups->overlap_factor = paint_stroke_integrate_overlap(stroke->brush, stroke->brush->spacing);
+			paint_brush_stroke_add_step(C, op, stroke->last_mouse_position, 1.0);
+			paint_space_stroke(C, op, sample_average.mouse, 1.0);
 		}
 
 		stroke_done(C, op);
 		return OPERATOR_FINISHED;
 	}
+	else if (stroke->brush->flag & BRUSH_LINE) {
+		/* do nothing */
+	}
 	else if (first_modal ||
 			 /* regular dabs */
-	         (!(stroke->brush->flag & (BRUSH_AIRBRUSH | BRUSH_LINE)) && (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE))) ||
+	         (!(stroke->brush->flag & (BRUSH_AIRBRUSH)) && (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE))) ||
 	         /* airbrush */
 	         ((stroke->brush->flag & BRUSH_AIRBRUSH) && event->type == TIMER && event->customdata == stroke->timer))
 	{
@@ -820,7 +822,7 @@
 	    !(stroke->brush->flag & BRUSH_SMOOTH_STROKE))
 	{
 		stroke->ups->overlap_factor = paint_stroke_integrate_overlap(stroke->brush, stroke->brush->spacing);
-		paint_brush_stroke_add_step(C, op, mouse, pressure);
+		paint_brush_stroke_add_step(C, op, sample_average.mouse, sample_average.pressure);
 		redraw = true;
 	}
 




More information about the Bf-blender-cvs mailing list