Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2009-01-22 01:40:28 +0300
committerNicholas Bishop <nicholasbishop@gmail.com>2009-01-22 01:40:28 +0300
commitfaa871117f6ed2221758820bef028d2dd034069c (patch)
treed0732df2015cc31034cf8d63adc89ee0a9428c29 /source/blender/blenkernel
parente609d0cb25c3ecd368a1f65bfa0779a0a9ec4dd7 (diff)
Brought back sculpt smooth brush. Also added a new brush flag for setting whether to use brush spacing.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_mesh.h10
-rw-r--r--source/blender/blenkernel/BKE_multires.h10
-rw-r--r--source/blender/blenkernel/BKE_sculpt.h12
-rw-r--r--source/blender/blenkernel/intern/mesh.c42
-rw-r--r--source/blender/blenkernel/intern/multires.c36
-rw-r--r--source/blender/blenkernel/intern/scene.c18
6 files changed, 62 insertions, 66 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 2ca4b3aa39a..f455b094f5d 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -109,6 +109,16 @@ UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned
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 *);
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index 8ee1d15d0f3..3b0ff2db6f4 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -38,16 +38,6 @@ typedef struct MultiresSubsurf {
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);
diff --git a/source/blender/blenkernel/BKE_sculpt.h b/source/blender/blenkernel/BKE_sculpt.h
index 54d750db3af..d0e28f3ae9a 100644
--- a/source/blender/blenkernel/BKE_sculpt.h
+++ b/source/blender/blenkernel/BKE_sculpt.h
@@ -40,13 +40,10 @@ struct StrokeCache;
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 @@ typedef struct SculptSession {
} SculptSession;
void sculptsession_free(struct Sculpt *sculpt);
-void sculpt_vertexusers_free(struct SculptSession *ss);
#endif
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 7ba8fb47740..b8d485065b1 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -1149,6 +1149,48 @@ void free_uv_vert_map(UvVertMap *vmap)
}
}
+/* 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)
{
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 1227dcdded3..ec4b8eb6d03 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -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};
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 3247c963644..0d036c924c5 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -651,17 +651,6 @@ void scene_add_render_layer(Scene *sce)
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 @@ void sculptsession_free(Sculpt *sculpt)
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);