[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17465] branches/projection-paint/source/ blender/src/imagepaint.c: made undo on multiple images works
Campbell Barton
ideasman42 at gmail.com
Sat Nov 15 03:58:49 CET 2008
Revision: 17465
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17465
Author: campbellbarton
Date: 2008-11-15 03:58:47 +0100 (Sat, 15 Nov 2008)
Log Message:
-----------
made undo on multiple images works
Modified Paths:
--------------
branches/projection-paint/source/blender/src/imagepaint.c
Modified: branches/projection-paint/source/blender/src/imagepaint.c
===================================================================
--- branches/projection-paint/source/blender/src/imagepaint.c 2008-11-14 20:54:50 UTC (rev 17464)
+++ branches/projection-paint/source/blender/src/imagepaint.c 2008-11-15 02:58:47 UTC (rev 17465)
@@ -2163,25 +2163,37 @@
}
INIT_MINMAX2(ps->viewMin2D, ps->viewMax2D);
-
- for(a=0; a < ps->dm_totvert; a++, projScreenCo++) {
- VECCOPY((*projScreenCo), ps->dm_mvert[a].co);
- (*projScreenCo)[3] = 1.0;
-
- Mat4MulVec4fl(ps->projectMat, (*projScreenCo));
-
- if( (*projScreenCo)[3] > 0.001 ) {
+
+ if (ps->projectIsOrtho) {
+ for(a=0; a < ps->dm_totvert; a++, projScreenCo++) {
+ VECCOPY((*projScreenCo), ps->dm_mvert[a].co);
+ Mat4MulVecfl(ps->projectMat, (*projScreenCo));
+
/* screen space, not clamped */
- (*projScreenCo)[0] = (float)(curarea->winx/2.0)+(curarea->winx/2.0)*(*projScreenCo)[0]/(*projScreenCo)[3];
- (*projScreenCo)[1] = (float)(curarea->winy/2.0)+(curarea->winy/2.0)*(*projScreenCo)[1]/(*projScreenCo)[3];
- (*projScreenCo)[2] = (*projScreenCo)[2]/(*projScreenCo)[3]; /* Use the depth for bucket point occlusion */
+ (*projScreenCo)[0] = (float)(curarea->winx/2.0)+(curarea->winx/2.0)*(*projScreenCo)[0];
+ (*projScreenCo)[1] = (float)(curarea->winy/2.0)+(curarea->winy/2.0)*(*projScreenCo)[1];
DO_MINMAX2((*projScreenCo), ps->viewMin2D, ps->viewMax2D);
- } else {
- /* TODO - deal with cases where 1 side of a face goes behind the view ? */
- (*projScreenCo)[0] = (*projScreenCo)[1] = MAXFLOAT;
}
+ } else {
+ for(a=0; a < ps->dm_totvert; a++, projScreenCo++) {
+ VECCOPY((*projScreenCo), ps->dm_mvert[a].co);
+ (*projScreenCo)[3] = 1.0;
+
+ Mat4MulVec4fl(ps->projectMat, (*projScreenCo));
+
+ if( (*projScreenCo)[3] > 0.001 ) {
+ /* screen space, not clamped */
+ (*projScreenCo)[0] = (float)(curarea->winx/2.0)+(curarea->winx/2.0)*(*projScreenCo)[0]/(*projScreenCo)[3];
+ (*projScreenCo)[1] = (float)(curarea->winy/2.0)+(curarea->winy/2.0)*(*projScreenCo)[1]/(*projScreenCo)[3];
+ (*projScreenCo)[2] = (*projScreenCo)[2]/(*projScreenCo)[3]; /* Use the depth for bucket point occlusion */
+ DO_MINMAX2((*projScreenCo), ps->viewMin2D, ps->viewMax2D);
+ } else {
+ /* TODO - deal with cases where 1 side of a face goes behind the view ? */
+ (*projScreenCo)[0] = MAXFLOAT;
+ }
+ }
}
-
+
/* setup clone offset */
if (ps->tool == PAINT_TOOL_CLONE) {
float projCo[4];
@@ -2224,7 +2236,17 @@
for( a = 0, tf = ps->dm_mtface, mf = ps->dm_mface; a < ps->dm_totface; mf++, tf++, a++ ) {
if (tf->tpage && ((G.f & G_FACESELECT)==0 || mf->flag & ME_FACE_SEL)) {
-
+
+ if (!ps->projectIsOrtho) {
+ if ( ps->projectVertScreenCos[mf->v1][0]==MAXFLOAT ||
+ ps->projectVertScreenCos[mf->v2][0]==MAXFLOAT ||
+ ps->projectVertScreenCos[mf->v3][0]==MAXFLOAT ||
+ (mf->v4 && ps->projectVertScreenCos[mf->v4][0]==MAXFLOAT)
+ ) {
+ continue;
+ }
+ }
+
if (ps->projectIsBackfaceCull) {
/* TODO - we dont really need the normal, just the direction, save a sqrt? */
if (mf->v4) CalcNormFloat4(ps->dm_mvert[mf->v1].co, ps->dm_mvert[mf->v2].co, ps->dm_mvert[mf->v3].co, ps->dm_mvert[mf->v4].co, f_no);
@@ -2361,7 +2383,7 @@
if (last_undo_grid[tile_index]==NULL) {
/* add the undo tile from the modified image, then write the original colors back into it */
- tile = last_undo_grid[tile_index] = undo_init_tile(&last_ima->id, ibuf, &tmpibuf, x_tile, y_tile);
+ tile = last_undo_grid[tile_index] = undo_init_tile(&last_ima->id, last_ibuf, &tmpibuf, x_tile, y_tile);
} else {
tile = last_undo_grid[tile_index];
}
More information about the Bf-blender-cvs
mailing list