Revision: 22474
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22474
Author:   nicholasbishop
Date:     2009-08-15 20:58:01 +0200 (Sat, 15 Aug 2009)

Log Message:
-----------
2.5/Sculpt:

* Made sculpt mode local to object.
* This also fixes loading files from 2.4x saved in sculptmode

Touched a lot of things here, let me know if anything breaks

TODO:
* The other paint modes should be converted as well

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/armature/poseobject.c
    branches/blender2.5/blender/source/blender/editors/include/ED_object.h
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c
    
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_edit.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_manipulator.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h  
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h  
2009-08-15 18:58:01 UTC (rev 22474)
@@ -122,7 +122,6 @@
 /* #define G_NOFROZEN  (1 << 17) also removed */
 #define G_GREASEPENCIL         (1 << 17)
 
-#define G_SCULPTMODE    (1 << 29)
 #define G_PARTICLEEDIT (1 << 30)
 
 /* #define G_AUTOMATKEYS       (1 << 30)   also removed */

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h  
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h  
2009-08-15 18:58:01 UTC (rev 22474)
@@ -33,7 +33,7 @@
 struct MFace;
 struct MultireModifierData;
 struct MVert;
-struct Sculpt;
+struct Object;
 struct StrokeCache;
 
 typedef struct SculptSession {
@@ -63,13 +63,10 @@
        float (*mesh_co_orig)[3]; /* Copy of the mesh vertices' locations */
        float *layer_disps; /* Displacements for each vertex */
 
-       void *cursor; /* wm handle */
-
        struct SculptStroke *stroke;
-
        struct StrokeCache *cache;
 } SculptSession;
 
-void sculptsession_free(struct Sculpt *sculpt);
+void free_sculptsession(SculptSession **);
 
 #endif

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c        
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c        
2009-08-15 18:58:01 UTC (rev 22474)
@@ -35,6 +35,7 @@
 #include "DNA_brush_types.h"
 #include "DNA_color_types.h"
 #include "DNA_image_types.h"
+#include "DNA_object_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_windowmanager_types.h"
@@ -187,7 +188,7 @@
 
 Brush **current_brush_source(Scene *sce)
 {
-       if(G.f & G_SCULPTMODE)
+       if(sce->basact && sce->basact->object->mode & OB_MODE_SCULPT)
                return &sce->toolsettings->sculpt->brush;
        else if(G.f & G_VERTEXPAINT)
                return &sce->toolsettings->vpaint->brush;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/object.c       
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/object.c       
2009-08-15 18:58:01 UTC (rev 22474)
@@ -107,6 +107,7 @@
 #include "BKE_sca.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
+#include "BKE_sculpt.h"
 #include "BKE_softbody.h"
 
 #include "LBM_fluidsim.h"
@@ -222,6 +223,34 @@
        freedisplist(&ob->disp);
 }
 
+void free_sculptsession(SculptSession **ssp)
+{
+       if(ssp && *ssp) {
+               SculptSession *ss = *ssp;
+               if(ss->projverts)
+                       MEM_freeN(ss->projverts);
+
+               if(ss->fmap)
+                       MEM_freeN(ss->fmap);
+
+               if(ss->fmap_mem)
+                       MEM_freeN(ss->fmap_mem);
+
+               if(ss->texcache)
+                       MEM_freeN(ss->texcache);
+
+               if(ss->layer_disps)
+                       MEM_freeN(ss->layer_disps);
+
+               if(ss->mesh_co_orig)
+                       MEM_freeN(ss->mesh_co_orig);
+
+               MEM_freeN(ss);
+
+               *ssp = NULL;
+       }
+}
+
 /* do not free object itself */
 void free_object(Object *ob)
 {
@@ -276,6 +305,8 @@
        if(ob->soft) sbFree(ob->soft);
        if(ob->bsoft) bsbFree(ob->bsoft);
        if(ob->gpulamp.first) GPU_lamp_free(ob);
+
+       free_sculptsession(&ob->sculpt);
 }
 
 static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, 
Object **obpoin)
@@ -1211,6 +1242,9 @@
        copy_defgroups(&obn->defbase, &ob->defbase);
        copy_constraints(&obn->constraints, &ob->constraints);
 
+       obn->mode = 0;
+       obn->sculpt = NULL;
+
        /* increase user numbers */
        id_us_plus((ID *)obn->data);
        id_us_plus((ID *)obn->dup_group);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-08-15 18:58:01 UTC (rev 22474)
@@ -77,7 +77,6 @@
 #include "BKE_node.h"
 #include "BKE_object.h"
 #include "BKE_scene.h"
-#include "BKE_sculpt.h"
 #include "BKE_sequence.h"
 #include "BKE_world.h"
 #include "BKE_utildefines.h"
@@ -174,7 +173,6 @@
                        }
                        if(ts->sculpt) {
                                ts->sculpt= MEM_dupallocN(ts->sculpt);
-                               ts->sculpt->session= NULL;
                                id_us_plus((ID *)ts->sculpt->brush);
                        }
 
@@ -277,10 +275,8 @@
                        MEM_freeN(sce->toolsettings->vpaint);
                if(sce->toolsettings->wpaint)
                        MEM_freeN(sce->toolsettings->wpaint);
-               if(sce->toolsettings->sculpt) {
-                       sculptsession_free(sce->toolsettings->sculpt);
+               if(sce->toolsettings->sculpt)
                        MEM_freeN(sce->toolsettings->sculpt);
-               }
                
                MEM_freeN(sce->toolsettings);
                sce->toolsettings = NULL;       
@@ -808,33 +804,6 @@
        srl->passflag= SCE_PASS_COMBINED|SCE_PASS_Z;
 }
 
-void sculptsession_free(Sculpt *sculpt)
-{
-       SculptSession *ss= sculpt->session;
-       if(ss) {
-               if(ss->projverts)
-                       MEM_freeN(ss->projverts);
-
-               if(ss->fmap)
-                       MEM_freeN(ss->fmap);
-
-               if(ss->fmap_mem)
-                       MEM_freeN(ss->fmap_mem);
-
-               if(ss->texcache)
-                       MEM_freeN(ss->texcache);
-
-               if(ss->layer_disps)
-                       MEM_freeN(ss->layer_disps);
-
-               if(ss->mesh_co_orig)
-                       MEM_freeN(ss->mesh_co_orig);
-
-               MEM_freeN(ss);
-               sculpt->session= NULL;
-       }
-}
-
 /* render simplification */
 
 int get_render_subsurf_level(RenderData *r, int lvl)

Modified: 
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2009-08-15 18:58:01 UTC (rev 22474)
@@ -3994,6 +3994,9 @@
        ob->derivedDeform= NULL;
        ob->derivedFinal= NULL;
        ob->gpulamp.first= ob->gpulamp.last= NULL;
+
+       if(ob->sculpt)
+               ob->sculpt= MEM_callocN(sizeof(SculptSession), "reload sculpt 
session");
 }
 
 /* ************ READ SCENE ***************** */
@@ -4147,9 +4150,6 @@
                sce->toolsettings->sculpt= newdataadr(fd, 
sce->toolsettings->sculpt);
                sce->toolsettings->imapaint.paintcursor= NULL;
                sce->toolsettings->particle.paintcursor= NULL;
-
-               if(sce->toolsettings->sculpt)
-                       sce->toolsettings->sculpt->session= 
MEM_callocN(sizeof(SculptSession), "reload sculpt session");
        }
 
        if(sce->ed) {

Modified: 
branches/blender2.5/blender/source/blender/editors/armature/poseobject.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/poseobject.c    
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/editors/armature/poseobject.c    
2009-08-15 18:58:01 UTC (rev 22474)
@@ -136,6 +136,7 @@
                        return;
        }
        ED_view3d_exit_paint_modes(C);
+       ED_object_toggle_modes(C, ob->mode);
 }
 
 void ED_armature_exit_posemode(bContext *C, Base *base)

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_object.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_object.h      
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_object.h      
2009-08-15 18:58:01 UTC (rev 22474)
@@ -59,6 +59,8 @@
 
 void ED_object_parent(struct Object *ob, struct Object *parent, int type, 
const char *substr);
 
+void ED_object_toggle_modes(struct bContext *C, int mode);
+
 /* bitflags for enter/exit editmode */
 #define EM_FREEDATA            1
 #define EM_FREEUNDO            2

Modified: 
branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c     
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c     
2009-08-15 18:58:01 UTC (rev 22474)
@@ -3740,7 +3740,7 @@
                WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, 
scene);
        }
 
-       ED_view3d_restore_paint_modes(C, obedit->restore_mode);
+       ED_object_toggle_modes(C, obedit->restore_mode);
 }
 
 
@@ -3774,7 +3774,9 @@
        
        if(flag & EM_WAITCURSOR) waitcursor(1);
 
-       ob->restore_mode = ED_view3d_exit_paint_modes(C);
+       ob->restore_mode = ob->mode;
+       ED_view3d_exit_paint_modes(C);
+       ED_object_toggle_modes(C, ob->mode);
        
        if(ob->type==OB_MESH) {
                Mesh *me= ob->data;
@@ -7034,3 +7036,9 @@
        if (changed) {
        }       
 }
+
+void ED_object_toggle_modes(bContext *C, int mode)
+{
+       if(mode & OB_MODE_SCULPT)
+               WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", 
WM_OP_EXEC_REGION_WIN, NULL);
+}

Modified: 
branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_context.c  
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_context.c  
2009-08-15 18:58:01 UTC (rev 22474)
@@ -112,7 +112,7 @@
                return 1;
        }
        else if(CTX_data_equals(member, "sculpt_object")) {
-               if(G.f & G_SCULPTMODE && scene->basact)
+               if(scene->basact && (scene->basact->object->mode & 
OB_MODE_SCULPT))
                        CTX_data_id_pointer_set(result, 
&scene->basact->object->id);
 
                return 1;

Modified: 
branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c    
2009-08-15 17:46:45 UTC (rev 22473)
+++ branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt.c    
2009-08-15 18:58:01 UTC (rev 22474)
@@ -217,12 +217,12 @@
    shrink the brush. Skipped for grab brush because only the first mouse down
    size is used, which is small if the user has just touched the pen to the
    tablet */
-static char brush_size(Sculpt *sd)
+static char brush_size(Sculpt *sd, SculptSession *ss)
 {
        float size= sd->brush->size;
        
        if((sd->brush->sculpt_tool != SCULPT_TOOL_GRAB) && (sd->brush->flag & 
BRUSH_SIZE_PRESSURE))
-               size *= sd->session->cache->pressure;
+               size *= ss->cache->pressure;
 

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