[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18615] branches/blender2.5/blender/source /blender: Brought back sculpt smooth brush.

Nicholas Bishop nicholasbishop at gmail.com
Wed Jan 21 23:40:31 CET 2009


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. @@




More information about the Bf-blender-cvs mailing list