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];
                                                }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to