Revision: 17728
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17728
Author: campbellbarton
Date: 2008-12-06 14:42:55 +0100 (Sat, 06 Dec 2008)
Log Message:
-----------
* Patch from Michael Fox to set the normal angle (was fixed at 80 before)
* Fixed another face clipping bug (some artifacts still when using screen
aligned faces)
* Removed Soften and Warp buttons on the panit panel since they are not used
for projection painting
* added do_versions to initialize bleed and normal values
Modified Paths:
--------------
branches/projection-paint/source/blender/blenkernel/BKE_blender.h
branches/projection-paint/source/blender/blenloader/intern/readfile.c
branches/projection-paint/source/blender/makesdna/DNA_scene_types.h
branches/projection-paint/source/blender/src/buttons_editing.c
branches/projection-paint/source/blender/src/imagepaint.c
Modified: branches/projection-paint/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/projection-paint/source/blender/blenkernel/BKE_blender.h
2008-12-06 10:25:51 UTC (rev 17727)
+++ branches/projection-paint/source/blender/blenkernel/BKE_blender.h
2008-12-06 13:42:55 UTC (rev 17728)
@@ -41,7 +41,7 @@
struct MemFile;
#define BLENDER_VERSION 248
-#define BLENDER_SUBVERSION 1
+#define BLENDER_SUBVERSION 2
#define BLENDER_MINVERSION 245
#define BLENDER_MINSUBVERSION 15
Modified: branches/projection-paint/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/projection-paint/source/blender/blenloader/intern/readfile.c
2008-12-06 10:25:51 UTC (rev 17727)
+++ branches/projection-paint/source/blender/blenloader/intern/readfile.c
2008-12-06 13:42:55 UTC (rev 17728)
@@ -8007,6 +8007,17 @@
}
}
+ if (main->versionfile < 248 || (main->versionfile == 248 &&
main->subversionfile < 2)) {
+ Scene *sce;
+
+ /* Note, these will need to be added for painting */
+ for (sce= main->scene.first; sce; sce= sce->id.next) {
+ sce->toolsettings->imapaint.seam_bleed = 2;
+ sce->toolsettings->imapaint.normal_angle = 80;
+ }
+ }
+
+
/* WATCH IT!!!: pointers from libdata have not been converted yet here!
*/
/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
Modified: branches/projection-paint/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/projection-paint/source/blender/makesdna/DNA_scene_types.h
2008-12-06 10:25:51 UTC (rev 17727)
+++ branches/projection-paint/source/blender/makesdna/DNA_scene_types.h
2008-12-06 13:42:55 UTC (rev 17728)
@@ -347,8 +347,8 @@
short flag, tool;
/* for projection painting only - todo - use flags */
- float seam_bleed;
- int clone_layer, pad;
+ char seam_bleed,normal_angle;
+ short clone_layer;
} ImagePaintSettings;
typedef struct ParticleBrushData {
@@ -805,9 +805,8 @@
/* projection painting only */
#define IMAGEPAINT_PROJECT_XRAY 8
#define IMAGEPAINT_PROJECT_BACKFACE 16
-#define IMAGEPAINT_PROJECT_IGNORE_SEAMS 32
-#define IMAGEPAINT_PROJECT_CLONE_LAYER 64
-#define IMAGEPAINT_PROJECT_FLAT 128
+#define IMAGEPAINT_PROJECT_CLONE_LAYER 32
+#define IMAGEPAINT_PROJECT_FLAT 64
/* toolsettings->uvcalc_flag */
#define UVCALC_FILLHOLES 1
Modified: branches/projection-paint/source/blender/src/buttons_editing.c
===================================================================
--- branches/projection-paint/source/blender/src/buttons_editing.c
2008-12-06 10:25:51 UTC (rev 17727)
+++ branches/projection-paint/source/blender/src/buttons_editing.c
2008-12-06 13:42:55 UTC (rev 17728)
@@ -6341,10 +6341,10 @@
//uiDefButS(block, ROW, B_BRUSHCHANGE, "Soften",
108 ,yco,106,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_SOFTEN, 0, 0,
"Soften brush");
//uiDefButS(block, ROW, B_BRUSHCHANGE, "Smear",
214,yco,106,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_SMEAR, 0, 0, "Smear
brush");
- uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Draw",
0 ,yco,80,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_DRAW, 0, 0, "Draw
brush");
- uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Soften",
80 ,yco,80,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_SOFTEN, 0, 0, "Soften
brush");
- uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Smear",
160,yco,80,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_SMEAR, 0, 0, "Smear
brush");
- uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Clone",
240,yco,80,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_CLONE, 0, 0, "Clone
brush, use RMB to drag source image");
+ uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Draw",
0 ,yco,108,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_DRAW, 0, 0, "Draw
brush");
+ //uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Soften",
80 ,yco,80,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_SOFTEN, 0, 0, "Soften
brush");
+ uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Smear",
108 ,yco,106,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_SMEAR, 0, 0, "Smear
brush");
+ uiDefButS(block, ROW, B_SIMABRUSHCHANGE, "Clone",
214,yco,106,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_CLONE, 0, 0, "Clone
brush, use RMB to drag source image");
uiBlockEndAlign(block);
yco -= 30;
@@ -6361,23 +6361,24 @@
uiDefButS(block, MENU, B_NOP, "Mix %x0|Add %x1|Subtract
%x2|Multiply %x3|Lighten %x4|Darken %x5|Erase Alpha %x6|Add Alpha %x7",
xco+10,yco,butw,19, &brush->blend, 0, 0, 0, 0, "Blending method for applying
brushes");
- uiDefButBitS(block, TOG|BIT, BRUSH_TORUS,
B_BRUSHCHANGE, "Wrap", xco+10,yco-25,butw,19, &brush->flag, 0, 0, 0, 0,
"Enables torus wrapping");
+ // uiDefButBitS(block, TOG|BIT, BRUSH_TORUS,
B_BRUSHCHANGE, "Wrap", xco+10,yco-25,butw,19, &brush->flag, 0, 0, 0, 0,
"Enables torus wrapping");
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG|BIT, BRUSH_AIRBRUSH,
B_BRUSHCHANGE, "Airbrush", xco+10,yco-50,butw,19, &brush->flag, 0, 0, 0, 0,
"Keep applying paint effect while holding mouse (spray)");
- uiDefButF(block, NUM, B_NOP, "Rate ",
xco+10,yco-70,butw,19, &brush->rate, 0.01, 1.0, 0, 0, "Number of paints per
second for Airbrush");
+ uiDefButBitS(block, TOG|BIT, BRUSH_AIRBRUSH,
B_BRUSHCHANGE, "Airbrush", xco+10,yco-25,butw,19, &brush->flag, 0, 0, 0, 0,
"Keep applying paint effect while holding mouse (spray)");
+ uiDefButF(block, NUM, B_NOP, "Rate ",
xco+10,yco-45,butw,19, &brush->rate, 0.01, 1.0, 0, 0, "Number of paints per
second for Airbrush");
uiBlockEndAlign(block);
yco -= 25;
/* Projection Painting */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOGN|BIT, IMAGEPAINT_PROJECT_XRAY,
B_NOP, "Occlude", xco+10,yco-70,butw,19, &settings->imapaint.flag, 0, 0,
0, 0, "Only paint onto the faces directly under the brush (slower)");
- uiDefButBitS(block, TOGN|BIT,
IMAGEPAINT_PROJECT_BACKFACE, B_NOP, "Cull", xco+10,yco-90,butw/2,19,
&settings->imapaint.flag, 0, 0, 0, 0, "Ignore faces pointing away from the view
(faster)");
- uiDefButBitS(block, TOGN|BIT, IMAGEPAINT_PROJECT_FLAT,
B_NOP, "Normal", xco+10+butw/2,yco-90,butw/2,19, &settings->imapaint.flag, 0,
0, 0, 0, "Paint most on faces pointing towards teh view");
+ uiDefButBitS(block, TOGN|BIT, IMAGEPAINT_PROJECT_XRAY,
B_NOP, "Occlude", xco+10,yco-45,butw/2,19, &settings->imapaint.flag, 0,
0, 0, 0, "Only paint onto the faces directly under the brush (slower)");
+ uiDefButBitS(block, TOGN|BIT,
IMAGEPAINT_PROJECT_BACKFACE, B_NOP, "Cull",
xco+10+butw/2,yco-45,butw/2,19, &settings->imapaint.flag, 0, 0, 0, 0, "Ignore
faces pointing away from the view (faster)");
- uiDefButBitS(block, TOGN|BIT,
IMAGEPAINT_PROJECT_IGNORE_SEAMS, B_NOP, "Bleed", xco+10,yco-110,butw/2,19,
&settings->imapaint.flag, 0, 0, 0, 0, "Extend paint beyond the faces UVs to
reduce seams (in pixels, slower)");
- uiDefButF(block, NUM, B_NOP, "", xco+10 +
(butw/2),yco-110,butw/2,19, &settings->imapaint.seam_bleed, 2.0, 8.0, 0, 0,
"Extend paint beyond the faces UVs to reduce seams (in pixels, slower)");
+ uiDefButBitS(block, TOGN|BIT, IMAGEPAINT_PROJECT_FLAT,
B_NOP, "Normal", xco+10,yco-65,butw/2,19, &settings->imapaint.flag, 0, 0, 0, 0,
"Paint most on faces pointing towards the view");
+ uiDefButC(block, NUM, B_NOP, "", xco+10
+(butw/2),yco-65,butw/2,19, &settings->imapaint.normal_angle, 10.0, 90.0, 0, 0,
"Paint most on faces pointing towards the view acording to this angle)");
+
+ uiDefButC(block, NUM, B_NOP, "Bleed: ",
xco+10,yco-85,butw,19, &settings->imapaint.seam_bleed, 0.0, 8.0, 0, 0, "Extend
paint beyond the faces UVs to reduce seams (in pixels, slower)");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
Modified: branches/projection-paint/source/blender/src/imagepaint.c
===================================================================
--- branches/projection-paint/source/blender/src/imagepaint.c 2008-12-06
10:25:51 UTC (rev 17727)
+++ branches/projection-paint/source/blender/src/imagepaint.c 2008-12-06
13:42:55 UTC (rev 17728)
@@ -159,6 +159,7 @@
//#define PROJ_DEBUG_PAINT 1
//#define PROJ_DEBUG_NOSEAMBLEED 1
+//#define PROJ_DEBUG_PRINT_CLIP 1
#define PROJ_DEBUG_WINCLIP 1
/* projectFaceSeamFlags options */
@@ -186,7 +187,6 @@
/* vert flags */
#define PROJ_VERT_CULL 1
-/* M_PI_2 is 90d, we want 80 though */
#define PI_80_DEG ((M_PI_2 / 9) * 8)
/* This is mainly a convenience struct used so we can keep an array of images
we use
@@ -245,6 +245,8 @@
short do_occlude; /* Use raytraced occlusion? -
ortherwise will paint right through to the back*/
short do_backfacecull; /* ignore faces with normals pointing away,
skips a lot of raycasts if your normals are correctly flipped */
short do_mask_normal; /* mask out pixels based on
their normals */
+ float normal_angle; /* what angle to mask at*/
+
short is_ortho;
short is_airbrush; /* only to
avoid using (ps.brush->flag & BRUSH_AIRBRUSH) */
short is_texbrush; /* only to
avoid running */
@@ -1293,7 +1295,7 @@
const int side,
const float w[3])
{
- float mask;
+ float mask, mask_angle;
/* calculate mask */
if (ps->do_mask_normal) {
@@ -1340,22 +1342,28 @@
angle = NormalizedVecAngle2(viewDirPersp, no);
}
- if (angle >= PI_80_DEG) {
+ /*if (angle >= (M_PI_2 / 90) * ps->normal_angle) {
return 0.0f;
}
- else {
+ else {*/
#if 0
mask = 1.0f - (angle / PI_80_DEG); /* map angle to
1.0-facing us, 0.0 right angles to the view direction */
#endif
/* trickier method that clips the normal so its more
useful */
- mask = (angle / PI_80_DEG); /* map angle to 1.0-facing
us, 0.0 right angles to the view direction */
+ /* M_PI_2 is 90d, we want 80 though */
+ mask_angle = ((M_PI_2 / 90) * ps->normal_angle);
+
+ /*printf("normal_angle : %f \n" ,ps->normal_angle);
+ printf("mask_angle : %f \n" ,mask_angle);*/
+
+ mask = (angle / mask_angle); /* map angle to 1.0-facing
us, 0.0 right angles to the view direction */
mask = (1.0f - (mask * mask * mask)) * 1.4f;
if (mask > 1.0f) {
mask = 1.0f;
}
+ /*}*/
}
- }
else {
mask = 1.0f;
}
@@ -1548,7 +1556,7 @@
}
/* top/bottom */
- if (line_isect_y(l1, l2, rect->ymin, &isect) && (isect > rect->xmin) &&
(isect < rect->xmax)) {
+ if (line_isect_y(l1, l2, rect->ymin, &isect) && (isect >= rect->xmin)
&& (isect <= rect->xmax)) {
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs