[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18616] branches/blender2.5/blender/source /blender: Undo in sculpt mode works now.

Nicholas Bishop nicholasbishop at gmail.com
Thu Jan 22 02:58:39 CET 2009


Revision: 18616
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18616
Author:   nicholasbishop
Date:     2009-01-22 02:58:38 +0100 (Thu, 22 Jan 2009)

Log Message:
-----------
Undo in sculpt mode works now. Also removed some unused old code in sculpt.c

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-21 22:40:28 UTC (rev 18615)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-22 01:58:38 UTC (rev 18616)
@@ -3779,6 +3779,7 @@
 	if(sce->toolsettings) {
 		sce->toolsettings->vpaint= newdataadr(fd, sce->toolsettings->vpaint);
 		sce->toolsettings->wpaint= newdataadr(fd, sce->toolsettings->wpaint);
+		sce->toolsettings->sculpt= newdataadr(fd, sce->toolsettings->sculpt);
 		if(sce->toolsettings->sculpt)
 			sce->toolsettings->sculpt->session= NULL;
 	}

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c	2009-01-21 22:40:28 UTC (rev 18615)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c	2009-01-22 01:58:38 UTC (rev 18616)
@@ -1547,6 +1547,8 @@
 			writestruct(wd, DATA, "VPaint", 1, sce->toolsettings->vpaint);
 		if(sce->toolsettings->wpaint)
 			writestruct(wd, DATA, "VPaint", 1, sce->toolsettings->wpaint);
+		if(sce->toolsettings->sculpt)
+			writestruct(wd, DATA, "Sculpt", 1, sce->toolsettings->sculpt);
 
 		ed= sce->ed;
 		if(ed) {

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:40:28 UTC (rev 18615)
+++ branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c	2009-01-22 01:58:38 UTC (rev 18616)
@@ -77,6 +77,7 @@
 #include "ED_screen.h"
 #include "ED_sculpt.h"
 #include "ED_space_api.h"
+#include "ED_util.h"
 #include "ED_view3d.h"
 #include "sculpt_intern.h"
 
@@ -137,6 +138,7 @@
 	float true_location[3];
 	float location[3];
 	float flip;
+	float pressure;
 	int mouse[2];
 
 	/* The rest is temporary storage that isn't saved as a property */
@@ -181,31 +183,6 @@
 	char inside;
 } ProjVert;
 
-/* ===== INTERFACE =====
- */
-
-/* XXX: this can probably removed entirely */
-#if 0
-void sculptmode_rem_tex(void *junk0,void *junk1)
-{
-	MTex *mtex= G.scene->sculptdata.mtex[G.scene->sculptdata.texact];
-	if(mtex) {
-		SculptSession *ss= sculpt_session();
-		if(mtex->tex) mtex->tex->id.us--;
-		MEM_freeN(mtex);
-		G.scene->sculptdata.mtex[G.scene->sculptdata.texact]= NULL;
-		/* Clear brush preview */
-		if(ss->texcache) {
-			MEM_freeN(ss->texcache);
-			ss->texcache= NULL;
-		}
-		// XXX BIF_undo_push("Unlink brush texture");
-		allqueue(REDRAWBUTSEDIT, 0);
-		allqueue(REDRAWOOPS, 0);
-	}
-}
-#endif
-
 /* ===== OPENGL =====
  *
  * Simple functions to get data from the GL
@@ -255,19 +232,10 @@
 static char brush_size(Sculpt *sd)
 {
 	float size= sd->brush->size;
-#if 0
-	float pressure= 0; /* XXX: get_pressure(); */
-	short activedevice= 0; /* XXX: get_activedevice(); */
 	
-	if(b->sculpt_tool!=SCULPT_TOOL_GRAB) {
-		const float size_factor= sd->tablet_size / 10.0f;
-		
-		/* XXX: tablet stuff
-		if(ELEM(activedevice, DEV_STYLUS, DEV_ERASER))
-			size*= sd->tablet_size==0?1:
-			(1-size_factor) + pressure*size_factor;*/
-	}
-#endif
+	if((sd->brush->sculpt_tool != SCULPT_TOOL_GRAB) && (sd->brush->flag & BRUSH_SIZE_PRESSURE))
+		size *= sd->session->cache->pressure;
+
 	return size;
 }
 
@@ -278,23 +246,12 @@
 {
 	float dir= sd->brush->flag & BRUSH_DIR_IN ? -1 : 1;
 	float pressure= 1;
-	/* short activedevice= 0;XXX: get_activedevice(); */
 	float flip= cache->flip ? -1:1;
 	float anchored = sd->brush->flag & BRUSH_ANCHORED ? 25 : 1;
 
-	/* XXX: tablet stuff */
-#if 0
-	const float strength_factor= sd->tablet_strength / 10.0f;
-
-	if(ELEM(activedevice, DEV_STYLUS, DEV_ERASER))
-		pressure= sd->sculptdata.tablet_strength==0?1:
-			(1-strength_factor) + 1/*XXX: get_pressure()*/ *strength_factor;
+	if(sd->brush->flag & BRUSH_ALPHA_PRESSURE)
+		pressure *= cache->pressure;
 	
-	/* Flip direction for eraser */
-	if(activedevice==DEV_ERASER)
-		dir= -dir;
-#endif
-
 	switch(sd->brush->sculpt_tool){
 	case SCULPT_TOOL_DRAW:
 	case SCULPT_TOOL_LAYER:
@@ -1115,104 +1072,6 @@
 	}
 }
 
-#if 0
-/* pr_mouse is only used for the grab brush, can be NULL otherwise */
-static void init_brushaction(Sculpt *sd, BrushAction *a, short *mouse, short *pr_mouse)
-{
-	SculptSession *ss = sd->session;
-	Brush *b = sd->brush;
-	const float mouse_depth = 0; // XXX: get_depth(mouse[0], mouse[1]);
-	float brush_edge_loc[3], zero_loc[3];
-	int i;
- 	const int anchored = sd->brush->flag & BRUSH_ANCHORED;
- 	short orig_mouse[2], dx=0, dy=0;
-	float size = brush_size(sd);
-
-	a->symm.index = 0;
-	
-	/* Convert the location and size of the brush to
-	   modelspace coords */
-	if(a->firsttime || !anchored) {
- 		//unproject(ss, a->symm.center_3d, mouse[0], mouse[1], mouse_depth);
- 		/*a->mouse[0] = mouse[0];
-		  a->mouse[1] = mouse[1];*/
- 	}
- 
- 	if(anchored) {
- 		//project(ss, a->symm.center_3d, orig_mouse);
- 		dx = mouse[0] - orig_mouse[0];
- 		dy = mouse[1] - orig_mouse[1];
- 	}
- 
- 	if(anchored) {
- 		//unproject(ss, brush_edge_loc, mouse[0], mouse[1], a->depth);
- 		a->anchored_rot = atan2(dy, dx);
- 	}
- 	else
- 		unproject(ss, brush_edge_loc, mouse[0] + size, mouse[1], mouse_depth);
- 
-	//a->size_3d = VecLenf(a->symm.center_3d, brush_edge_loc);
-
-	a->prev_radius = a->radius;
-
-	if(anchored)
- 		a->radius = sqrt(dx*dx + dy*dy);
- 	else
- 		a->radius = size;
-
-	/* Set the pivot to allow the model to rotate around the center of the brush */
-	/*XXX: if(get_depth(mouse[0],mouse[1]) < 1.0)
-	  VecCopyf(sd->pivot, a->symm.center_3d); */
-
-	/* Now project the Up, Right, and Out normals from view to model coords */
-	unproject(ss, zero_loc, 0, 0, 0);
-	unproject(ss, a->symm.up, 0, -1, 0);
-	unproject(ss, a->symm.right, 1, 0, 0);
-	unproject(ss, a->symm.out, 0, 0, -1);
-	VecSubf(a->symm.up, a->symm.up, zero_loc);
-	VecSubf(a->symm.right, a->symm.right, zero_loc);
-	VecSubf(a->symm.out, a->symm.out, zero_loc);
-	Normalize(a->symm.up);
-	Normalize(a->symm.right);
-	Normalize(a->symm.out);
-	
-
-
-	if(b->sculpt_tool == SCULPT_TOOL_GRAB) {
-		//float gcenter[3];
-
-		/* Find the delta */
-		/*unproject(ss, gcenter, mouse[0], mouse[1], a->depth);
-		unproject(ss, oldloc, pr_mouse[0], pr_mouse[1], a->depth);
-		VecSubf(a->symm.grab_delta, gcenter, oldloc);*/
-	}
-	else if(b->sculpt_tool == SCULPT_TOOL_LAYER) {
-		/*if(!a->layer_disps)
-		  a->layer_disps= MEM_callocN(sizeof(float)*cache->totvert,"Layer disps");*/
-	}
-
-	if(b->sculpt_tool == SCULPT_TOOL_LAYER || anchored) {
- 		/*if(!a->mesh_store) {
- 			a->mesh_store= MEM_mallocN(sizeof(vec3f) * cache->totvert, "Sculpt mesh store");
- 			for(i = 0; i < cache->totvert; ++i)
- 				VecCopyf(&a->mesh_store[i].x, cache->mvert[i].co);
-				}*/
-
-		/*if(anchored && a->layer_disps)
-		  memset(a->layer_disps, 0, sizeof(float) * cache->totvert);*/
-
-		/*if(anchored && !a->orig_norms) {
-			a->orig_norms= MEM_mallocN(sizeof(short) * 3 * cache->totvert, "Sculpt orig norm");
-			for(i = 0; i < cache->totvert; ++i) {
-				a->orig_norms[i][0] = cache->mvert[i].no[0];
-				a->orig_norms[i][1] = cache->mvert[i].no[1];
-				a->orig_norms[i][2] = cache->mvert[i].no[2];
-			}
-			}*/
-  	}
-}
-#endif
-
 /* XXX: Used anywhere?
 void sculptmode_set_strength(const int delta)
 {
@@ -1306,28 +1165,6 @@
 }
 #endif
 
-/* XXX: drawing code to go elsewhere!
-void sculpt_paint_brush(char clear)
-{
-	if(sculpt_data()->flags & SCULPT_SCULPT_TOOL_DRAW) {
-		static short mvalo[2];
-		short mval[2];
-		const short rad= sculptmode_brush()->size;
-
-		getmouseco_areawin(mval);
-		
-		persp(PERSP_WIN);
-		if(clear)
-			fdrawXORcirc(mval[0], mval[1], rad);
-		else
-			draw_sel_circle(mval, mvalo, rad, rad, 0);
-		
-		mvalo[0]= mval[0];
-		mvalo[1]= mval[1];
-	}
-}
-*/
-
 void sculptmode_selectbrush_menu(void)
 {
 	/* XXX: I guess menus belong elsewhere too?
@@ -1505,30 +1342,27 @@
 }
 #endif
 
-/* XXX */
-#if 0
-static void sculpt_undo_push(Sculpt *sd)
+static void sculpt_undo_push(bContext *C, Sculpt *sd)
 {
 	switch(sd->brush->sculpt_tool) {
 	case SCULPT_TOOL_DRAW:
-		BIF_undo_push("Draw Brush"); break;
+		ED_undo_push(C, "Draw Brush"); break;
 	case SCULPT_TOOL_SMOOTH:
-		BIF_undo_push("Smooth Brush"); break;
+		ED_undo_push(C, "Smooth Brush"); break;
 	case SCULPT_TOOL_PINCH:
-		BIF_undo_push("Pinch Brush"); break;
+		ED_undo_push(C, "Pinch Brush"); break;
 	case SCULPT_TOOL_INFLATE:
-		BIF_undo_push("Inflate Brush"); break;
+		ED_undo_push(C, "Inflate Brush"); break;
 	case SCULPT_TOOL_GRAB:
-		BIF_undo_push("Grab Brush"); break;
+		ED_undo_push(C, "Grab Brush"); break;
 	case SCULPT_TOOL_LAYER:
-		BIF_undo_push("Layer Brush"); break;
+		ED_undo_push(C, "Layer Brush"); break;
 	case SCULPT_TOOL_FLATTEN:
- 		BIF_undo_push("Flatten Brush"); break;
+ 		ED_undo_push(C, "Flatten Brush"); break;
 	default:
-		BIF_undo_push("Sculpting"); break;
+		ED_undo_push(C, "Sculpting"); break;
 	}
 }
-#endif
 
 /**** Operator for applying a stroke (various attributes including mouse path)
       using the current brush. ****/
@@ -1798,6 +1632,8 @@
 
 		sculpt_cache_free(sd->session->cache);
 
+		sculpt_undo_push(C, sd);
+
 		return OPERATOR_FINISHED;
 	}
 
@@ -1829,6 +1665,8 @@
 	DAG_object_flush_update(CTX_data_scene(C), ob, OB_RECALC_DATA);
 	ED_region_tag_redraw(ar);
 
+	sculpt_undo_push(C, sd);
+
 	return OPERATOR_FINISHED;
 }
 





More information about the Bf-blender-cvs mailing list