forked from bartvdbraak/blender
* added an option not to use projection painting (use existing 3D paint)
* further tweak limits to get rid of some face clipping problems.
This commit is contained in:
parent
d138a6d43c
commit
6d8a2dd9ef
@ -803,10 +803,11 @@ typedef struct Scene {
|
||||
#define IMAGEPAINT_DRAW_TOOL_DRAWING 4
|
||||
|
||||
/* projection painting only */
|
||||
#define IMAGEPAINT_PROJECT_XRAY 8
|
||||
#define IMAGEPAINT_PROJECT_BACKFACE 16
|
||||
#define IMAGEPAINT_PROJECT_CLONE_LAYER 32
|
||||
#define IMAGEPAINT_PROJECT_FLAT 64
|
||||
#define IMAGEPAINT_PROJECT_DISABLE 8 /* Non projection 3D painting */
|
||||
#define IMAGEPAINT_PROJECT_XRAY 16
|
||||
#define IMAGEPAINT_PROJECT_BACKFACE 32
|
||||
#define IMAGEPAINT_PROJECT_CLONE_LAYER 64
|
||||
#define IMAGEPAINT_PROJECT_FLAT 128
|
||||
|
||||
/* toolsettings->uvcalc_flag */
|
||||
#define UVCALC_FILLHOLES 1
|
||||
|
@ -6337,14 +6337,16 @@ static void editing_panel_mesh_paint(void)
|
||||
yco= 160;
|
||||
|
||||
uiBlockBeginAlign(block);
|
||||
//uiDefButS(block, ROW, B_BRUSHCHANGE, "Draw", 0 ,yco,108,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_DRAW, 0, 0, "Draw brush");
|
||||
//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,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");
|
||||
if ((settings->imapaint.flag & IMAGEPAINT_PROJECT_DISABLE)==0) {
|
||||
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, "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");
|
||||
}
|
||||
else {
|
||||
uiDefButS(block, ROW, B_BRUSHCHANGE, "Draw", 0 ,yco,108,19, &settings->imapaint.tool, 7.0, PAINT_TOOL_DRAW, 0, 0, "Draw brush");
|
||||
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");
|
||||
}
|
||||
|
||||
uiBlockEndAlign(block);
|
||||
yco -= 30;
|
||||
@ -6368,19 +6370,25 @@ static void editing_panel_mesh_paint(void)
|
||||
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;
|
||||
uiDefButBitS(block, TOGN|BIT, IMAGEPAINT_PROJECT_DISABLE, B_REDR, "Project Paint", xco+10,yco-70,butw,19, &settings->imapaint.flag, 0, 0, 0, 0, "Use projection painting for improved consistency in the brush strokes");
|
||||
|
||||
/* Projection Painting */
|
||||
uiBlockBeginAlign(block);
|
||||
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)");
|
||||
yco -= 50;
|
||||
|
||||
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)");
|
||||
if ((settings->imapaint.flag & IMAGEPAINT_PROJECT_DISABLE)==0) {
|
||||
//uiDefButBitS(block, TOG|BIT, BRUSH_TORUS, B_BRUSHCHANGE, "Wrap", xco+10,yco-25,butw,19, &brush->flag, 0, 0, 0, 0, "Enables torus wrapping");
|
||||
|
||||
/* Projection Painting */
|
||||
uiBlockBeginAlign(block);
|
||||
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_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);
|
||||
}
|
||||
|
||||
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);
|
||||
uiDefButF(block, COL, B_VPCOLSLI, "", 0,yco,200,19, brush->rgb, 0, 0, 0, 0, "");
|
||||
uiDefButF(block, NUMSLI, B_NOP, "Opacity ", 0,yco-20,180,19, &brush->alpha, 0.0, 1.0, 0, 0, "The amount of pressure on the brush");
|
||||
|
@ -159,7 +159,7 @@ typedef struct ImagePaintPartialRedraw {
|
||||
|
||||
//#define PROJ_DEBUG_PAINT 1
|
||||
//#define PROJ_DEBUG_NOSEAMBLEED 1
|
||||
#define PROJ_DEBUG_PRINT_CLIP 1
|
||||
//#define PROJ_DEBUG_PRINT_CLIP 1
|
||||
#define PROJ_DEBUG_WINCLIP 1
|
||||
|
||||
/* projectFaceSeamFlags options */
|
||||
@ -185,7 +185,7 @@ typedef struct ImagePaintPartialRedraw {
|
||||
// #define PROJ_BUCKET_CLONE_INIT 1<<1
|
||||
|
||||
/* used for testing doubles, if a point is on a line etc */
|
||||
#define PROJ_GEOM_TOLERANCE 0.00001f
|
||||
#define PROJ_GEOM_TOLERANCE 0.0002f
|
||||
|
||||
/* vert flags */
|
||||
#define PROJ_VERT_CULL 1
|
||||
@ -1935,18 +1935,18 @@ static void project_bucket_clip_face(
|
||||
/* use IsectPT2Df_limit here so we catch points are are touching the tri edge (or a small fraction over) */
|
||||
bucket_bounds_ss[0][0] = bucket_bounds->xmax;
|
||||
bucket_bounds_ss[0][1] = bucket_bounds->ymin;
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[0], v1coSS, v2coSS, v3coSS, 0.001f) ? ISECT_1 : 0);
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[0], v1coSS, v2coSS, v3coSS, 0.01f) ? ISECT_1 : 0);
|
||||
bucket_bounds_ss[1][0] = bucket_bounds->xmax;
|
||||
bucket_bounds_ss[1][1] = bucket_bounds->ymax;
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[1], v1coSS, v2coSS, v3coSS, 0.001f) ? ISECT_2 : 0);
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[1], v1coSS, v2coSS, v3coSS, 0.01f) ? ISECT_2 : 0);
|
||||
|
||||
bucket_bounds_ss[2][0] = bucket_bounds->xmin;
|
||||
bucket_bounds_ss[2][1] = bucket_bounds->ymax;
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[2], v1coSS, v2coSS, v3coSS, 0.001f) ? ISECT_3 : 0);
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[2], v1coSS, v2coSS, v3coSS, 0.01f) ? ISECT_3 : 0);
|
||||
|
||||
bucket_bounds_ss[3][0] = bucket_bounds->xmin;
|
||||
bucket_bounds_ss[3][1] = bucket_bounds->ymin;
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[3], v1coSS, v2coSS, v3coSS, 0.001f) ? ISECT_4 : 0);
|
||||
inside_face_flag |= (IsectPT2Df_limit(bucket_bounds_ss[3], v1coSS, v2coSS, v3coSS, 0.01f) ? ISECT_4 : 0);
|
||||
|
||||
if (inside_face_flag == ISECT_ALL4) {
|
||||
/* bucket is totally inside the screenspace face, we can safely use weights */
|
||||
@ -4377,7 +4377,11 @@ void imagepaint_paint(short mousebutton, short texpaint)
|
||||
if(!settings->imapaint.brush)
|
||||
return;
|
||||
|
||||
project = texpaint;
|
||||
if (texpaint) { /* are we painting in the 3D view ? */
|
||||
if ((settings->imapaint.flag & IMAGEPAINT_PROJECT_DISABLE)==0) {
|
||||
project= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (G.qual & LR_CTRLKEY) {
|
||||
|
Loading…
Reference in New Issue
Block a user