[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27273] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: re-arrange paint initialization ( no functional change)

Campbell Barton ideasman42 at gmail.com
Fri Mar 5 11:26:24 CET 2010


Revision: 27273
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27273
Author:   campbellbarton
Date:     2010-03-05 11:26:23 +0100 (Fri, 05 Mar 2010)

Log Message:
-----------
re-arrange paint initialization (no functional change)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2010-03-05 08:53:16 UTC (rev 27272)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2010-03-05 10:26:23 UTC (rev 27273)
@@ -4427,21 +4427,72 @@
 	}
 }
 
-static int texture_paint_init(bContext *C, wmOperator *op)
+/* initialize project paint settings from context */
+static void project_state_init(bContext *C, Object *ob, ProjPaintState *ps)
 {
 	Scene *scene= CTX_data_scene(C);
 	ToolSettings *settings= scene->toolsettings;
-	PaintOperation *pop;
 	Brush *brush;
 
-	pop= MEM_callocN(sizeof(PaintOperation), "PaintOperation");
+	ps->v3d= CTX_wm_view3d(C);
+	ps->rv3d= CTX_wm_region_view3d(C);
+	ps->ar= CTX_wm_region(C);
+	ps->scene= scene;
+
+	ps->ob= ob; /* allow override of active object */
+
+
+	/* setup projection painting data */
+	ps->do_backfacecull = (settings->imapaint.flag & IMAGEPAINT_PROJECT_BACKFACE) ? 0 : 1;
+	ps->do_occlude = (settings->imapaint.flag & IMAGEPAINT_PROJECT_XRAY) ? 0 : 1;
+	ps->do_mask_normal = (settings->imapaint.flag & IMAGEPAINT_PROJECT_FLAT) ? 0 : 1;;
+
+	if (ps->tool == PAINT_TOOL_CLONE)
+		ps->do_layer_clone = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE);
+
+	ps->do_layer_stencil = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_STENCIL) ? 1 : 0;
+	ps->do_layer_stencil_inv = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_STENCIL_INV) ? 1 : 0;
+
+
+#ifndef PROJ_DEBUG_NOSEAMBLEED
+	ps->seam_bleed_px = settings->imapaint.seam_bleed; /* pixel num to bleed */
+#endif
+
+	if(ps->do_mask_normal) {
+		ps->normal_angle_inner = settings->imapaint.normal_angle;
+		ps->normal_angle = (ps->normal_angle_inner + 90.0f) * 0.5f;
+	}
+	else {
+		ps->normal_angle_inner= ps->normal_angle= settings->imapaint.normal_angle;
+	}
+
+	ps->normal_angle_inner *=	M_PI_2 / 90;
+	ps->normal_angle *=			M_PI_2 / 90;
+	ps->normal_angle_range = ps->normal_angle - ps->normal_angle_inner;
+
+	if(ps->normal_angle_range <= 0.0f)
+		ps->do_mask_normal = 0; /* no need to do blending */
+
+
+	/* brush */
+	brush= paint_brush(&settings->imapaint.paint);
+	ps->brush = brush;
+	ps->tool = brush->imagepaint_tool;
+	ps->blend = brush->blend;
+}
+
+static int texture_paint_init(bContext *C, wmOperator *op)
+{
+	Scene *scene= CTX_data_scene(C);
+	ToolSettings *settings= scene->toolsettings;
+	Brush *brush= paint_brush(&settings->imapaint.paint);
+	PaintOperation *pop= MEM_callocN(sizeof(PaintOperation), "PaintOperation"); /* caller frees */
+
 	pop->first= 1;
 	op->customdata= pop;
 	
 	/* initialize from context */
 	if(CTX_wm_region_view3d(C)) {
-		pop->ps.v3d= CTX_wm_view3d(C);
-		pop->ps.rv3d= CTX_wm_region_view3d(C);
 		pop->mode= PAINT_MODE_3D;
 
 		if(!(settings->imapaint.flag & IMAGEPAINT_PROJECT_DISABLE))
@@ -4455,38 +4506,19 @@
 	}
 
 	pop->s.scene= scene;
-	pop->ps.scene= scene;
 	pop->s.screen= CTX_wm_screen(C);
-	pop->ps.ar= CTX_wm_region(C);
 
-	/* intialize brush */
-	brush= paint_brush(&settings->imapaint.paint);
-	if(!brush)
-		return 0;
-
 	pop->s.brush = brush;
 	pop->s.tool = brush->imagepaint_tool;
 	if(pop->mode == PAINT_MODE_3D && (pop->s.tool == PAINT_TOOL_CLONE))
 		pop->s.tool = PAINT_TOOL_DRAW;
-	pop->s.blend = pop->s.brush->blend;
-	
-	if(pop->mode == PAINT_MODE_3D_PROJECT) {
-		pop->ps.brush = pop->s.brush;
-		pop->ps.tool = pop->s.tool;
-		pop->ps.blend = pop->s.blend;
+	pop->s.blend = brush->blend;
+	pop->brush_size_orig= brush->size;
 
-		pop->brush_size_orig = pop->ps.brush->size; /* not nice hack because 1 size brushes always fail with projection paint */
-	}
-
 	if(pop->mode != PAINT_MODE_2D) {
-		pop->ps.ob = pop->s.ob = OBACT;
-		if (!pop->s.ob || !(pop->s.ob->lay & pop->ps.v3d->lay)) return 0;
+		pop->s.ob = OBACT;
 		pop->s.me = get_mesh(pop->s.ob);
 		if (!pop->s.me) return 0;
-
-		/* Dont allow brush size below 2 */
-		if (pop->ps.brush && pop->ps.brush->size<=1)
-			pop->ps.brush->size = 2;
 	}
 	else {
 		pop->s.image = pop->s.sima->image;
@@ -4500,40 +4532,21 @@
 			return 0;
 		}
 	}
-	
+
 	/* note, if we have no UVs on the derived mesh, then we must return here */
 	if(pop->mode == PAINT_MODE_3D_PROJECT) {
-		/* setup projection painting data */
-		pop->ps.do_backfacecull = (settings->imapaint.flag & IMAGEPAINT_PROJECT_BACKFACE) ? 0 : 1;
-		pop->ps.do_occlude = (settings->imapaint.flag & IMAGEPAINT_PROJECT_XRAY) ? 0 : 1;
-		pop->ps.do_mask_normal = (settings->imapaint.flag & IMAGEPAINT_PROJECT_FLAT) ? 0 : 1;;
-		
-		if (pop->ps.tool == PAINT_TOOL_CLONE)
-			pop->ps.do_layer_clone = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE);
-		
-		pop->ps.do_layer_stencil = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_STENCIL) ? 1 : 0;
-		pop->ps.do_layer_stencil_inv = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_STENCIL_INV) ? 1 : 0;
-		
-		
-#ifndef PROJ_DEBUG_NOSEAMBLEED
-		pop->ps.seam_bleed_px = settings->imapaint.seam_bleed; /* pixel num to bleed */
-#endif
 
-		if(pop->ps.do_mask_normal) {
-			pop->ps.normal_angle_inner = settings->imapaint.normal_angle;
-			pop->ps.normal_angle = (pop->ps.normal_angle_inner + 90.0f) * 0.5f;
-		}
-		else {
-			pop->ps.normal_angle_inner= pop->ps.normal_angle= settings->imapaint.normal_angle;
-		}
+		/* initialize all data from the context */
+		project_state_init(C, OBACT, &pop->ps);
 
-		pop->ps.normal_angle_inner *=	M_PI_2 / 90;
-		pop->ps.normal_angle *=			M_PI_2 / 90;
-		pop->ps.normal_angle_range = pop->ps.normal_angle - pop->ps.normal_angle_inner;
-		
-		if(pop->ps.normal_angle_range <= 0.0f)
-			pop->ps.do_mask_normal = 0; /* no need to do blending */
+		if (pop->ps.ob==NULL || !(pop->ps.ob->lay & pop->ps.v3d->lay))
+			return 0;
 
+		/* Dont allow brush size below 2 */
+		if (brush->size <= 1)
+			brush->size = 2;
+
+		/* allocate and initialize spacial data structures */
 		project_paint_begin(&pop->ps);
 		
 		if(pop->ps.dm==NULL)
@@ -5205,4 +5218,3 @@
 {
 	return paint_facesel_test(CTX_data_active_object(C));
 }
-





More information about the Bf-blender-cvs mailing list