Revision: 21058
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21058
Author:   nicholasbishop
Date:     2009-06-21 17:59:43 +0200 (Sun, 21 Jun 2009)

Log Message:
-----------
2.5/Sculpt:

Fixed bug where anchor brush would leave messed up normals (was related to 
using face normals, not vertex normals.)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: 
branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c    
2009-06-21 15:38:47 UTC (rev 21057)
+++ branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c    
2009-06-21 15:59:43 UTC (rev 21058)
@@ -148,6 +148,7 @@
        float *layer_disps; /* Displacements for each vertex */
        float (*mesh_store)[3]; /* Copy of the mesh vertices' locations */
        short (*orig_norms)[3]; /* Copy of the mesh vertices' normals */
+       float (*face_norms)[3]; /* Copy of the mesh faces' normals */
        float rotation; /* Texture rotation (radians) for anchored and rake 
modes */
        int pixel_radius, previous_pixel_radius;
        ListBase grab_active_verts[8]; /* The same list of verts is used 
throught grab stroke */
@@ -1339,6 +1340,8 @@
                MEM_freeN(cache->mesh_store);
        if(cache->orig_norms)
                MEM_freeN(cache->orig_norms);
+       if(cache->face_norms)
+               MEM_freeN(cache->face_norms);
        if(cache->mats)
                MEM_freeN(cache->mats);
        MEM_freeN(cache);
@@ -1381,6 +1384,13 @@
                                cache->orig_norms[i][1] = 
sd->session->mvert[i].no[1];
                                cache->orig_norms[i][2] = 
sd->session->mvert[i].no[2];
                        }
+
+                       if(sd->session->face_normals) {
+                               float *fn = sd->session->face_normals;
+                               cache->face_norms= MEM_mallocN(sizeof(float) * 
3 * sd->session->totface, "Sculpt face norms");
+                               for(i = 0; i < sd->session->totface; ++i, fn += 
3)
+                                       VecCopyf(cache->face_norms[i], fn);
+                       }
                }
        }
 
@@ -1507,17 +1517,24 @@
 
 static void sculpt_restore_mesh(Sculpt *sd)
 {
-       StrokeCache *cache = sd->session->cache;
+       SculptSession *ss = sd->session;
+       StrokeCache *cache = ss->cache;
        int i;
        
        /* Restore the mesh before continuing with anchored stroke */
        if((sd->brush->flag & BRUSH_ANCHORED) && cache->mesh_store) {
-               for(i = 0; i < sd->session->totvert; ++i) {
-                       VecCopyf(sd->session->mvert[i].co, 
cache->mesh_store[i]);
-                       sd->session->mvert[i].no[0] = cache->orig_norms[i][0];
-                       sd->session->mvert[i].no[1] = cache->orig_norms[i][1];
-                       sd->session->mvert[i].no[2] = cache->orig_norms[i][2];
+               for(i = 0; i < ss->totvert; ++i) {
+                       VecCopyf(ss->mvert[i].co, cache->mesh_store[i]);
+                       ss->mvert[i].no[0] = cache->orig_norms[i][0];
+                       ss->mvert[i].no[1] = cache->orig_norms[i][1];
+                       ss->mvert[i].no[2] = cache->orig_norms[i][2];
                }
+
+               if(ss->face_normals) {
+                       float *fn = ss->face_normals;
+                       for(i = 0; i < ss->totface; ++i, fn += 3)
+                               VecCopyf(fn, cache->face_norms[i]);
+               }
        }
 }
 


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

Reply via email to