Revision: 18615
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18615
Author:   nicholasbishop
Date:     2009-01-21 23:40:28 +0100 (Wed, 21 Jan 2009)

Log Message:
-----------
Brought back sculpt smooth brush. Also added a new brush flag for setting 
whether to use brush spacing.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_mesh.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_brush_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_mesh.h    
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_mesh.h    
2009-01-21 22:40:28 UTC (rev 18615)
@@ -109,6 +109,16 @@
 UvMapVert *get_uv_map_vert(UvVertMap *vmap, unsigned int v);
 void free_uv_vert_map(UvVertMap *vmap);
 
+/* Connectivity data */
+typedef struct IndexNode {
+       struct IndexNode *next, *prev;
+       int index;
+} IndexNode;
+void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace 
*mface,
+                         const int totvert, const int totface);
+void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge 
*medge,
+                         const int totvert, const int totedge);
+
 /* Partial Mesh Visibility */
 struct PartialVisibility *mesh_pmv_copy(struct PartialVisibility *);
 void mesh_pmv_free(struct PartialVisibility *);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h        
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h        
2009-01-21 22:40:28 UTC (rev 18615)
@@ -38,16 +38,6 @@
        struct Mesh *me;
 } MultiresSubsurf;
 
-typedef struct IndexNode {
-       struct IndexNode *next, *prev;
-       int index;
-} IndexNode;
-
-void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace 
*mface,
-                         const int totvert, const int totface);
-void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge 
*medge,
-                         const int totvert, const int totedge);
-
 /* MultiresDM */
 struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm);
 struct DerivedMesh *MultiresDM_new(struct MultiresSubsurf *, struct 
DerivedMesh*, int, int, int);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h  
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h  
2009-01-21 22:40:28 UTC (rev 18615)
@@ -40,13 +40,10 @@
 typedef struct SculptSession {
        struct ProjVert *projverts;
 
-       /* An array of lists; array is sized as
-          large as the number of verts in the mesh,
-          the list for each vert contains the index
-          for all the faces that use that vertex */
-       struct ListBase *vertex_users;
-       struct IndexNode *vertex_users_mem;
-       int vertex_users_size;
+       /* Mesh connectivity */
+       struct ListBase *fmap;
+       struct IndexNode *fmap_mem;
+       int fmap_size;
 
        /* Used temporarily per-stroke */
        float *vertexcosnos;
@@ -66,6 +63,5 @@
 } SculptSession;
 
 void sculptsession_free(struct Sculpt *sculpt);
-void sculpt_vertexusers_free(struct SculptSession *ss);
 
 #endif

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c 
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c 
2009-01-21 22:40:28 UTC (rev 18615)
@@ -1149,6 +1149,48 @@
        }
 }
 
+/* Generates a map where the key is the vertex and the value is a list
+   of faces that use that vertex as a corner. The lists are allocated
+   from one memory pool. */
+void create_vert_face_map(ListBase **map, IndexNode **mem, const MFace *mface, 
const int totvert, const int totface)
+{
+       int i,j;
+       IndexNode *node = NULL;
+       
+       (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert face map");
+       (*mem) = MEM_callocN(sizeof(IndexNode) * totface*4, "vert face map 
mem");
+       node = *mem;
+       
+       /* Find the users */
+       for(i = 0; i < totface; ++i){
+               for(j = 0; j < (mface[i].v4?4:3); ++j, ++node) {
+                       node->index = i;
+                       BLI_addtail(&(*map)[((unsigned int*)(&mface[i]))[j]], 
node);
+               }
+       }
+}
+
+/* Generates a map where the key is the vertex and the value is a list
+   of edges that use that vertex as an endpoint. The lists are allocated
+   from one memory pool. */
+void create_vert_edge_map(ListBase **map, IndexNode **mem, const MEdge *medge, 
const int totvert, const int totedge)
+{
+       int i, j;
+       IndexNode *node = NULL;
+ 
+       (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert edge map");
+       (*mem) = MEM_callocN(sizeof(IndexNode) * totedge * 2, "vert edge map 
mem");
+       node = *mem;
+       
+       /* Find the users */
+       for(i = 0; i < totedge; ++i){
+               for(j = 0; j < 2; ++j, ++node) {
+                       node->index = i;
+                       BLI_addtail(&(*map)[((unsigned 
int*)(&medge[i].v1))[j]], node);
+               }
+       }
+}
+
 /* Partial Mesh Visibility */
 PartialVisibility *mesh_pmv_copy(PartialVisibility *pmv)
 {

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c     
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c     
2009-01-21 22:40:28 UTC (rev 18615)
@@ -54,42 +54,6 @@
 #include <math.h>
 #include <string.h>
 
-void create_vert_face_map(ListBase **map, IndexNode **mem, const MFace *mface, 
const int totvert, const int totface)
-{
-       int i,j;
-       IndexNode *node = NULL;
-       
-       (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert face map");
-       (*mem) = MEM_callocN(sizeof(IndexNode) * totface*4, "vert face map 
mem");
-       node = *mem;
-       
-       /* Find the users */
-       for(i = 0; i < totface; ++i){
-               for(j = 0; j < (mface[i].v4?4:3); ++j, ++node) {
-                       node->index = i;
-                       BLI_addtail(&(*map)[((unsigned int*)(&mface[i]))[j]], 
node);
-               }
-       }
-}
-
-void create_vert_edge_map(ListBase **map, IndexNode **mem, const MEdge *medge, 
const int totvert, const int totedge)
-{
-       int i, j;
-       IndexNode *node = NULL;
- 
-       (*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert edge map");
-       (*mem) = MEM_callocN(sizeof(IndexNode) * totedge * 2, "vert edge map 
mem");
-       node = *mem;
-       
-       /* Find the users */
-       for(i = 0; i < totedge; ++i){
-               for(j = 0; j < 2; ++j, ++node) {
-                       node->index = i;
-                       BLI_addtail(&(*map)[((unsigned 
int*)(&medge[i].v1))[j]], node);
-               }
-       }
-}
-
 /* MULTIRES MODIFIER */
 static const int multires_max_levels = 13;
 static const int multires_quad_tot[] = {4, 9, 25, 81, 289, 1089, 4225, 16641, 
66049, 263169, 1050625, 4198401, 16785409};

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-01-21 22:40:28 UTC (rev 18615)
@@ -651,17 +651,6 @@
        srl->passflag= SCE_PASS_COMBINED|SCE_PASS_Z;
 }
 
-void sculpt_vertexusers_free(SculptSession *ss)
-{
-       if(ss && ss->vertex_users){
-               MEM_freeN(ss->vertex_users);
-               MEM_freeN(ss->vertex_users_mem);
-               ss->vertex_users= NULL;
-               ss->vertex_users_mem= NULL;
-               ss->vertex_users_size= 0;
-       }
-}
-
 void sculptsession_free(Sculpt *sculpt)
 {
        SculptSession *ss= sculpt->session;
@@ -672,7 +661,12 @@
                if(ss->radialcontrol)
                        MEM_freeN(ss->radialcontrol);
 
-               sculpt_vertexusers_free(ss);
+               if(ss->fmap)
+                       MEM_freeN(ss->fmap);
+
+               if(ss->fmap_mem)
+                       MEM_freeN(ss->fmap_mem);
+
                if(ss->texcache)
                        MEM_freeN(ss->texcache);
                MEM_freeN(ss);

Modified: branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c  
2009-01-21 22:20:16 UTC (rev 18614)
+++ branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c  
2009-01-21 22:40:28 UTC (rev 18615)
@@ -181,32 +181,6 @@
        char inside;
 } ProjVert;
 
-/* vertex_users is an array of Lists that store all the faces that use a
-   particular vertex. vertex_users is in the same order as mesh.mvert */
-static void calc_vertex_users(SculptSession *ss)
-{
-       int i,j;
-       IndexNode *node= NULL;
-       StrokeCache *cache = ss->cache;
-
-       sculpt_vertexusers_free(ss);
-       
-       /* For efficiency, use vertex_users_mem as a memory pool (may be larger
-          than necessary if mesh has triangles, but only one alloc is needed.) 
*/
-       ss->vertex_users= MEM_callocN(sizeof(ListBase) * cache->totvert, 
"vertex_users");
-       ss->vertex_users_size= cache->totvert;
-       ss->vertex_users_mem= MEM_callocN(sizeof(IndexNode)*cache->totface*4, 
"vertex_users_mem");
-       node= ss->vertex_users_mem;
-
-       /* Find the users */
-       for(i=0; i<cache->totface; ++i){
-               for(j=0; j<(cache->mface[i].v4?4:3); ++j, ++node) {
-                       node->index=i;
-                       BLI_addtail(&ss->vertex_users[((unsigned 
int*)(&cache->mface[i]))[j]], node);
-               }
-       }
-}
-
 /* ===== INTERFACE =====
  */
 
@@ -326,7 +300,7 @@
        case SCULPT_TOOL_LAYER:
                return sd->brush->alpha / 50.0f * dir * pressure * flip * 
anchored; /*XXX: not sure why? multiplied by G.vd->grid */;
        case SCULPT_TOOL_SMOOTH:
-               return sd->brush->alpha / .5f * pressure * anchored;
+               return sd->brush->alpha / .5 * pressure * anchored;
        case SCULPT_TOOL_PINCH:
                return sd->brush->alpha / 10.0f * dir * pressure * flip * 
anchored;
        case SCULPT_TOOL_GRAB:
@@ -449,8 +423,8 @@
 static void neighbor_average(SculptSession *ss, float avg[3], const int vert)
 {
        int i, skip= -1, total=0;
-       IndexNode *node= ss->vertex_users[vert].first;
-       char ncount= BLI_countlist(&ss->vertex_users[vert]);
+       IndexNode *node= ss->fmap[vert].first;
+       char ncount= BLI_countlist(&ss->fmap[vert]);
        MFace *f;
 
        avg[0] = avg[1] = avg[2] = 0;
@@ -472,7 +446,7 @@
                }
 
                for(i=0; i<(f->v4?4:3); ++i) {
-                       if(i != skip && (ncount!=2 || 
BLI_countlist(&ss->vertex_users[(&f->v1)[i]]) <= 2)) {
+                       if(i != skip && (ncount!=2 || 
BLI_countlist(&ss->fmap[(&f->v1)[i]]) <= 2)) {
                                VecAddf(avg, avg, 
ss->cache->mvert[(&f->v1)[i]].co);
                                ++total;
                        }
@@ -1000,7 +974,7 @@
        int i;
 
        /* Brush spacing: only apply dot if next dot is far enough away */
-       if(sd->brush->spacing > 0 && !(sd->brush->flag & BRUSH_ANCHORED) && 
!cache->first_time) {
+       if((sd->brush->flag & BRUSH_SPACE) && !(sd->brush->flag & 
BRUSH_ANCHORED) && !cache->first_time) {
                int dx = cache->last_dot[0] - cache->mouse[0];
                int dy = cache->last_dot[1] - cache->mouse[1];

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to