[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43406] trunk/blender/source/blender/ editors/sculpt_paint: Minor sculpt/paint cleanups.

Nicholas Bishop nicholasbishop at gmail.com
Mon Jan 16 00:44:01 CET 2012


Revision: 43406
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43406
Author:   nicholasbishop
Date:     2012-01-15 23:43:54 +0000 (Sun, 15 Jan 2012)
Log Message:
-----------
Minor sculpt/paint cleanups.

Added some comments, constified a param, and moved a couple things
around.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h
    trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_utils.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h	2012-01-15 23:13:12 UTC (rev 43405)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h	2012-01-15 23:43:54 UTC (rev 43406)
@@ -126,7 +126,7 @@
 							  const struct rcti *screen_rect);
 
 void projectf(struct bglMats *mats, const float v[3], float p[2]);
-float paint_calc_object_space_radius(struct ViewContext *vc, float center[3], float pixel_radius);
+float paint_calc_object_space_radius(struct ViewContext *vc, const float center[3], float pixel_radius);
 float paint_get_tex_pixel(struct Brush* br, float u, float v);
 int imapaint_pick_face(struct ViewContext *vc, struct Mesh *me, const int mval[2], unsigned int *index);
 void imapaint_pick_uv(struct Scene *scene, struct Object *ob, unsigned int faceindex, const int xy[2], float uv[2]);

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c	2012-01-15 23:13:12 UTC (rev 43405)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c	2012-01-15 23:43:54 UTC (rev 43406)
@@ -510,31 +510,33 @@
 /* Special actions taken when paint cursor goes over mesh */
 /* TODO: sculpt only for now */
 static void paint_cursor_on_hit(Sculpt *sd, Brush *brush, ViewContext *vc,
-				float location[3], float *visual_strength)
+								const float location[3], float *visual_strength)
 {
 	float unprojected_radius, projected_radius;
 
-	/* TODO: check whether this should really only be done when
-	   brush is over mesh? */
-	if(sd->draw_pressure && brush_use_alpha_pressure(vc->scene, brush))
-		(*visual_strength) *= sd->pressure_value;
+	/* update the brush's cached 3D radius */
+	if(!brush_use_locked_size(vc->scene, brush)) {
+		/* get 2D brush radius */
+		if(sd->draw_anchored)
+			projected_radius = sd->anchored_size;
+		else {
+			if(brush->flag & BRUSH_ANCHORED)
+				projected_radius = 8;
+			else
+				projected_radius = brush_size(vc->scene, brush);
+		}
+	
+		/* convert brush radius from 2D to 3D */
+		unprojected_radius = paint_calc_object_space_radius(vc, location,
+															projected_radius);
 
-	if(sd->draw_anchored)
-		projected_radius = sd->anchored_size;
-	else {
-		if(brush->flag & BRUSH_ANCHORED)
-			projected_radius = 8;
-		else
-			projected_radius = brush_size(vc->scene, brush);
-	}
-	unprojected_radius = paint_calc_object_space_radius(vc, location,
-							    projected_radius);
+		/* scale 3D brush radius by pressure */
+		if(sd->draw_pressure && brush_use_size_pressure(vc->scene, brush))
+			unprojected_radius *= sd->pressure_value;
 
-	if(sd->draw_pressure && brush_use_size_pressure(vc->scene, brush))
-		unprojected_radius *= sd->pressure_value;
-
-	if(!brush_use_locked_size(vc->scene, brush))
+		/* set cached value in either Brush or UnifiedPaintSettings */
 		brush_set_unprojected_radius(vc->scene, brush, unprojected_radius);
+	}
 }
 
 static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
@@ -613,8 +615,13 @@
 			outline_col = brush->sub_col;
 
 		/* only do if brush is over the mesh */
-		if(hit)
+		if(hit) {
+			/* scale the alpha by pen pressure */
+			if(sd->draw_pressure && brush_use_alpha_pressure(vc->scene, brush))
+				(*visual_strength) *= sd->pressure_value;
+
 			paint_cursor_on_hit(sd, brush, &vc, location, &visual_strength);
+		}
 
 		/* don't show effect of strength past the soft limit */
 		if(visual_strength > 1)

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_utils.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_utils.c	2012-01-15 23:13:12 UTC (rev 43405)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_utils.c	2012-01-15 23:43:54 UTC (rev 43406)
@@ -152,7 +152,7 @@
 	p[1]= uy;
 }
 
-float paint_calc_object_space_radius(ViewContext *vc, float center[3],
+float paint_calc_object_space_radius(ViewContext *vc, const float center[3],
 				     float pixel_radius)
 {
 	Object *ob = vc->obact;



More information about the Bf-blender-cvs mailing list