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>2007-01-12 08:13:36 +0300
committerNicholas Bishop <nicholasbishop@gmail.com>2007-01-12 08:13:36 +0300
commit25361281a168256d11c9750565f80b8824b58b21 (patch)
treef19625a065fe2bd7326db74a3054b10417117050
parent413ff0ca2dd605c1fe646093622ba006bb0c01ee (diff)
Removed set_sculpt_object. Tested with sculpt undo, sculpt+multires, sculpt+partial visibility, and sculpt+shapekeys, seems stable.
-rw-r--r--source/blender/include/BDR_sculptmode.h1
-rw-r--r--source/blender/src/buttons_editing.c10
-rw-r--r--source/blender/src/editobject.c5
-rw-r--r--source/blender/src/editview.c4
-rw-r--r--source/blender/src/multires.c2
-rw-r--r--source/blender/src/sculptmode.c64
6 files changed, 18 insertions, 68 deletions
diff --git a/source/blender/include/BDR_sculptmode.h b/source/blender/include/BDR_sculptmode.h
index 0956c22f255..da4174a65d7 100644
--- a/source/blender/include/BDR_sculptmode.h
+++ b/source/blender/include/BDR_sculptmode.h
@@ -125,7 +125,6 @@ float *get_tex_angle();
void sculptmode_update_tex();
char sculpt_modifiers_active(struct Object *ob);
void sculpt();
-void set_sculpt_object(struct Object *ob);
void set_sculptmode();
/* Partial Mesh Visibility */
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 30f88c0fee7..6e2590683c2 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -605,12 +605,10 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
error("Cannot create shape keys on a multires mesh.");
} else {
insert_shapekey(ob);
- set_sculpt_object(ob);
}
break;
case B_SETKEY:
ob->shapeflag |= OB_SHAPE_TEMPLOCK;
- set_sculpt_object(ob);
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIPO, 0);
@@ -618,7 +616,6 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
break;
case B_LOCKKEY:
ob->shapeflag &= ~OB_SHAPE_TEMPLOCK;
- set_sculpt_object(ob);
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIPO, 0);
@@ -630,7 +627,6 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
if(ob->shapenr == BLI_countlist(&key->block))
ob->shapenr= 1;
else ob->shapenr++;
- set_sculpt_object(ob);
do_common_editbuts(B_SETKEY);
break;
}
@@ -640,7 +636,6 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
if(ob->shapenr <= 1)
ob->shapenr= BLI_countlist(&key->block);
else ob->shapenr--;
- set_sculpt_object(ob);
do_common_editbuts(B_SETKEY);
break;
}
@@ -649,9 +644,7 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
allqueue (REDRAWIPO, 0);
break;
case B_DELKEY:
- set_sculpt_object(NULL);
delete_key(OBACT);
- set_sculpt_object(ob);
allqueue(REDRAWACTION, 0);
break;
@@ -1241,9 +1234,6 @@ static void modifiers_applyModifier(void *obv, void *mdv)
else
BIF_undo_push("Apply modifier");
}
-
- if (G.f & G_SCULPTMODE)
- set_sculpt_object(OBACT);
}
static void modifiers_copyModifier(void *ob_v, void *md_v)
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index 06eace539ce..3c44c9b7a6d 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -1602,8 +1602,6 @@ void enter_editmode(int wc)
if(wc) waitcursor(1);
if(ob->type==OB_MESH) {
- if(G.f & G_SCULPTMODE) set_sculpt_object(NULL);
-
me= get_mesh(ob);
if( me==0 ) return;
if(me->id.lib) {
@@ -1741,9 +1739,6 @@ void exit_editmode(int flag) /* freedata==0 at render, 1= freedata, 2= do undo b
/* also flush ob recalc, doesn't take much overhead, but used for particles */
DAG_object_flush_update(G.scene, ob, OB_RECALC_OB|OB_RECALC_DATA);
- if(G.f & G_SCULPTMODE)
- set_sculpt_object(ob);
-
if(freedata) {
setcursor_space(SPACE_VIEW3D, CURSOR_STD);
}
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index dfa638ce343..3f201d101f6 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -1097,10 +1097,6 @@ void set_active_base(Base *base)
DAG_object_flush_update(G.scene, tbase->object, OB_RECALC_DATA);
}
}
-
- if(base->object->type==OB_MESH && G.f & G_SCULPTMODE) {
- set_sculpt_object(base->object);
- }
}
}
diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c
index 032d7234e32..acf53e08ccd 100644
--- a/source/blender/src/multires.c
+++ b/source/blender/src/multires.c
@@ -1133,8 +1133,6 @@ void multires_level_to_mesh(Object *ob, Mesh *me)
multires_edge_level_update(ob,me);
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
- if(G.f & G_SCULPTMODE)
- set_sculpt_object(ob);
}
mesh_update_customdata_pointers(me);
diff --git a/source/blender/src/sculptmode.c b/source/blender/src/sculptmode.c
index 528171062d1..2b6b82ba4f5 100644
--- a/source/blender/src/sculptmode.c
+++ b/source/blender/src/sculptmode.c
@@ -157,7 +157,9 @@ typedef struct ProjVert {
containing the brush. */
char inside;
} ProjVert;
+
static ProjVert *projverts= NULL;
+static Object *active_ob= NULL;
SculptData *sculpt_data()
{
@@ -421,7 +423,7 @@ void sculptmode_undo_update(SculptUndoStep *newcur)
for(sus= oldcur; sus && sus != newcur; sus= sus->next);
if(sus == newcur) forward= 1;
- set_sculpt_object(NULL);
+ active_ob= NULL;
/* Verts */
if(newcur->verts) {
@@ -495,8 +497,6 @@ void sculptmode_undo_update(SculptUndoStep *newcur)
ss->undo->cur= newcur;
- set_sculpt_object(ob);
-
if(!sculpt_data()->draw_mode || sculpt_modifiers_active(ob))
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
@@ -611,23 +611,6 @@ void calc_vertex_users()
}
}
-/* bad function... what is this supposed to do, and why is it called all over? (ton) */
-/* its really time to add some comments in code... */
-void set_sculpt_object(Object *ob)
-{
- SculptSession *ss;
-
- /* return when no sculptmode, temporal for now because this call breaks switching shapes */
- if(!(G.f & G_SCULPTMODE))
- return;
-
- ss= sculpt_session();
-
- if(ss && ob)
- calc_vertex_users();
-
-}
-
/* ===== INTERFACE =====
*/
@@ -1864,29 +1847,26 @@ void sculpt()
RectNode *rn= NULL;
short spacing= 32000;
- if((G.f & G_SCULPTMODE)==0) return;
- if(G.obedit) return;
-
- ob= OBACT;
- if(ob->id.lib) return;
+ if(!(G.f & G_SCULPTMODE) || G.obedit || !ob || !ob->id.lib || !get_mesh(OBACT) || get_mesh(OBACT)->totface == 0)
+ return;
+ if(!(ob->lay & G.vd->lay))
+ error("Active object is not in this layer");
if(!ss) {
sculpt_init_session();
ss= sd->session;
}
- /* Make sure that the active mesh is set correctly */
- if(get_mesh(OBACT) != get_mesh(ob))
- set_sculpt_object(ob);
+ /* Check that vertex users are up-to-date */
+ if(ob != active_ob || ss->vertex_users_size != get_mesh(ob)->totvert) {
+ sculptmode_free_vertexusers(ss);
+ calc_vertex_users();
+ active_ob= ob;
+ }
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
- if(!OBACT || !get_mesh(OBACT) ||
- get_mesh(OBACT)->totface==0) return;
-
- if(ob->lay & G.vd->lay); else error("Active object is not in this layer");
-
persp(PERSP_VIEW);
getmouseco_areawin(mvalo);
@@ -2068,8 +2048,6 @@ void set_sculptmode()
if(G.f & G_SCULPTMODE) {
G.f &= ~G_SCULPTMODE;
- set_sculpt_object(NULL);
-
sculptmode_free_session(G.scene);
} else {
G.f |= G_SCULPTMODE;
@@ -2077,14 +2055,13 @@ void set_sculptmode()
if(!sculptmode_brush())
sculptmode_init(G.scene);
- if(G.vd->twflag) G.vd->twflag= 0;
-
sculpt_init_session();
- set_sculpt_object(OBACT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
}
+
+ active_ob= NULL;
allqueue(REDRAWVIEW3D, 1);
allqueue(REDRAWBUTSEDIT, 0);
@@ -2116,9 +2093,8 @@ void sculptmode_revert_pmv(Mesh *me)
unsigned i;
MVert *nve, *old_verts;
Object *ob= OBACT;
-
- /* Temporarily exit sculptmode */
- set_sculpt_object(NULL);
+
+ active_ob= NULL;
/* Reorder vertices */
nve= me->mvert;
@@ -2148,8 +2124,6 @@ void sculptmode_revert_pmv(Mesh *me)
me->pv->edge_map= NULL;
MEM_freeN(me->pv->vert_map);
me->pv->vert_map= NULL;
-
- set_sculpt_object(ob);
DAG_object_flush_update(G.scene, OBACT, OB_RECALC_DATA);
}
@@ -2210,7 +2184,7 @@ void sculptmode_do_pmv(Object *ob, rcti *hb_2d, int mode)
}
/* Kill sculpt data */
- set_sculpt_object(NULL);
+ active_ob= NULL;
/* Initalize map with which verts are to be hidden */
me->pv->vert_map= MEM_mallocN(sizeof(unsigned)*me->totvert, "PMV vertmap");
@@ -2319,8 +2293,6 @@ void sculptmode_do_pmv(Object *ob, rcti *hb_2d, int mode)
}
me->totedge= edge_cnt_show;
CustomData_set_layer(&me->edata, CD_MEDGE, me->medge);
-
- set_sculpt_object(ob);
DAG_object_flush_update(G.scene, OBACT, OB_RECALC_DATA);
}