[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