[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12964] trunk/blender/source/blender: == Sculpt Mode ==

Nicholas Bishop nicholasbishop at gmail.com
Thu Dec 20 20:07:48 CET 2007


Revision: 12964
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12964
Author:   nicholasbishop
Date:     2007-12-20 20:07:47 +0100 (Thu, 20 Dec 2007)

Log Message:
-----------
== Sculpt Mode ==

Applying Stephan Kassemeyer's patch (#6750) to add a curve modifier for sculpting.

A few changes from the patch:
* The default curve is closer to the old behavior
* Fixed loading files already saved in sculpt mode
* Changed the interface; split the brush texture controls off into a third sculpt tab, and put the curve (and curve reset) into the Brush tab.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h
    trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/include/BDR_sculptmode.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/drawview.c
    trunk/blender/source/blender/src/sculptmode.c

Modified: trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/blenkernel/BKE_bad_level_calls.h	2007-12-20 19:07:47 UTC (rev 12964)
@@ -217,6 +217,8 @@
 void multires_calc_level_maps(struct MultiresLevel *lvl);
 struct Multires *multires_copy(struct Multires *orig);
 /* sculptmode.c */
+struct SculptData;
+void sculpt_reset_curve(struct SculptData *sd);
 void sculptmode_free_all(struct Scene *sce);
 void sculptmode_init(struct Scene *sce);
 

Modified: trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c
===================================================================
--- trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/blenkernel/bad_level_call_stubs/stubs.c	2007-12-20 19:07:47 UTC (rev 12964)
@@ -317,6 +317,7 @@
 void multires_update_levels(struct Mesh *me, const int render) {}
 void multires_calc_level_maps(struct MultiresLevel *lvl) {}
 struct Multires *multires_copy(struct Multires *orig) {return NULL;}
+void sculpt_reset_curve(struct SculptData *sd) {}
 void sculptmode_init(struct Scene *sce) {}
 void sculptmode_free_all(struct Scene *sce) {}
 

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-20 19:07:47 UTC (rev 12964)
@@ -3323,6 +3323,12 @@
 	/* SculptData textures */
 	for(a=0; a<MAX_MTEX; ++a)
 		sce->sculptdata.mtex[a]= newdataadr(fd,sce->sculptdata.mtex[a]);
+	/* Sculpt intensity curve */
+	sce->sculptdata.cumap= newdataadr(fd, sce->sculptdata.cumap);
+	if(sce->sculptdata.cumap)
+		direct_link_curvemapping(fd, sce->sculptdata.cumap);
+	else
+		sculpt_reset_curve(&sce->sculptdata);
 
 	if(sce->ed) {
 		ListBase *old_seqbasep= &((Editing *)sce->ed)->seqbase;

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2007-12-20 19:07:47 UTC (rev 12964)
@@ -1422,6 +1422,8 @@
 
 		for(a=0; a<MAX_MTEX; ++a)
 			writestruct(wd, DATA, "MTex", 1, sce->sculptdata.mtex[a]);
+		if(sce->sculptdata.cumap)
+			write_curvemapping(wd, sce->sculptdata.cumap);
 
 		ed= sce->ed;
 		if(ed) {

Modified: trunk/blender/source/blender/include/BDR_sculptmode.h
===================================================================
--- trunk/blender/source/blender/include/BDR_sculptmode.h	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/include/BDR_sculptmode.h	2007-12-20 19:07:47 UTC (rev 12964)
@@ -99,12 +99,14 @@
 struct SculptData *sculpt_data(void);
 
 /* Memory */
+void sculpt_reset_curve(struct SculptData *sd);
 void sculptmode_init(struct Scene *);
 void sculptmode_free_all(struct Scene *);
 void sculptmode_correct_state(void);
 
 /* Interface */
 void sculptmode_draw_interface_tools(struct uiBlock *block,unsigned short cx, unsigned short cy);
+void sculptmode_draw_interface_brush(struct uiBlock *block,unsigned short cx, unsigned short cy);
 void sculptmode_draw_interface_textures(struct uiBlock *block,unsigned short cx, unsigned short cy);
 void sculptmode_rem_tex(void*,void*);
 void sculptmode_propset_init(PropsetMode mode);

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2007-12-20 19:07:47 UTC (rev 12964)
@@ -424,6 +424,9 @@
 	/* Pointers to all of sculptmodes's textures */
 	struct MTex *mtex[10];
 
+	/* Editable brush shape */
+	struct CurveMapping *cumap;
+
 	/* Settings for each brush */
 	BrushData drawbrush, smoothbrush, pinchbrush, inflatebrush, grabbrush, layerbrush, flattenbrush;
 	short brush_type;

Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/src/buttons_editing.c	2007-12-20 19:07:47 UTC (rev 12964)
@@ -5046,22 +5046,29 @@
 	sculptmode_draw_interface_tools(block,0,200);
 }
 
-void editing_panel_sculpting_textures()
+void editing_panel_sculpting_brush()
 {
-	uiBlock *block= uiNewBlock(&curarea->uiblocks, "editing_panel_sculpting_textures", UI_EMBOSS, UI_HELV, curarea->win);
+	uiBlock *block= uiNewBlock(&curarea->uiblocks, "editing_panel_sculpting_brush", UI_EMBOSS, UI_HELV, curarea->win);
 	if(uiNewPanel(curarea, block, "Brush", "Editing", 300, 0, 318, 204)==0) return;
 
+	sculptmode_draw_interface_brush(block,0,200);
+}
+
+void editing_panel_sculpting_textures()
+{
+	uiBlock *block= uiNewBlock(&curarea->uiblocks, "editing_panel_sculpting_texture", UI_EMBOSS, UI_HELV, curarea->win);
+	if(uiNewPanel(curarea, block, "Texture", "Editing", 300, 0, 318, 204)==0) return;
+
 	sculptmode_draw_interface_textures(block,0,200);
 }
 
 void sculptmode_draw_interface_tools(uiBlock *block, unsigned short cx, unsigned short cy)
 {
 	SculptData *sd;
-	uiBut *but;
 
 	if(!G.scene) return;
 	sd= &G.scene->sculptdata;
-	
+
 	uiBlockBeginAlign(block);
 
 	uiDefBut(block,LABEL,B_NOP,"Brush",cx,cy,90,19,NULL,0,0,0,0,"");
@@ -5090,7 +5097,7 @@
 	if(sd->brush_type!=GRAB_BRUSH)
 		uiDefButC(block,TOG,B_NOP,"Airbrush",cx+178,cy,89,19,&sculptmode_brush()->airbrush,0,0,0,0,"Brush makes changes without waiting for the mouse to move");
 	cy-= 20;
-	but= uiDefButS(block,NUMSLI,B_NOP,"Size: ",cx,cy,268,19,&sculptmode_brush()->size,1.0,200.0,0,0,"Set brush radius in pixels");
+	uiDefButS(block,NUMSLI,B_NOP,"Size: ",cx,cy,268,19,&sculptmode_brush()->size,1.0,200.0,0,0,"Set brush radius in pixels");
 	cy-= 20;
 	if(sd->brush_type!=GRAB_BRUSH)
 		uiDefButC(block,NUMSLI,B_NOP,"Strength: ",cx,cy,268,19,&sculptmode_brush()->strength,1.0,100.0,0,0,"Set brush strength");
@@ -5109,34 +5116,57 @@
 	cx+= 210;
 }
 
-void sculptmode_draw_interface_textures(uiBlock *block, unsigned short cx, unsigned short cy)
+static void sculptmode_curves_reset(void *sd_v, void *j)
 {
+	SculptData *sd = sd_v;
+	sculpt_reset_curve(sd);
+	curvemapping_changed(sd->cumap, 0);
+}
+
+void sculptmode_draw_interface_brush(uiBlock *block, unsigned short cx, unsigned short cy)
+{
 	SculptData *sd= sculpt_data();
-	MTex *mtex;
-	int i;
-	int orig_y= cy;
-	char *strp;
+	int orig_y = cy;
+	rctf rect;
 	uiBut *but;
 
 	uiBlockBeginAlign(block);
-	uiDefBut(block,LABEL,B_NOP,"Common",cx,cy,80,20,0,0,0,0,0,"");
 	cy-= 20;
-	
+	uiDefButC(block,TOG,REDRAWBUTSEDIT, "Curve", cx,cy,80,19, &sd->texfade, 0,0,0,0,"Use curve control for radial brush intensity");
+	cy-= 20;
+	but= uiDefBut(block, BUT, REDRAWBUTSEDIT, "Reset",cx,cy,80,19, NULL, 0,0,0,0, "Default curve preset");
+	uiButSetFunc(but, sculptmode_curves_reset, sd, NULL);
+	cy-= 25;
+	uiBlockEndAlign(block);	
+
 	uiBlockBeginAlign(block);
-	uiDefButC(block,TOG,B_NOP, "Fade", cx,cy,80,19, &sd->texfade, 0,0,0,0,"Smooth the edges of the texture");
-	cy-= 20;
 	uiDefButS(block,NUM,B_NOP, "Space", cx,cy,80,19, &sd->spacing, 0,500,20,0,"Non-zero inserts N pixels between dots");
 	cy-= 20;
 	if(sd->brush_type == DRAW_BRUSH)
 		uiDefButC(block,NUM,B_NOP, "View", cx,cy,80,19, &sculptmode_brush()->view, 0,10,20,0,"Pulls brush direction towards view");
 	uiBlockEndAlign(block);
-	
-	cy= orig_y;
-	cx+= 85;
+
+	/* Draw curve */
+	cx += 90;
+	cy = orig_y;
+	rect.xmin= cx; rect.xmax= cx + 178;
+	rect.ymin= cy - 160; rect.ymax= cy + 20;
 	uiBlockBeginAlign(block);
-	uiDefBut(block,LABEL,B_NOP,"Texture",cx,cy,80,20,0,0,0,0,0,"");
+	curvemap_buttons(block, sd->cumap, (char)0, B_NOP, 0, &rect);
+	uiBlockEndAlign(block);
+}
+
+void sculptmode_draw_interface_textures(uiBlock *block, unsigned short cx, unsigned short cy)
+{
+	SculptData *sd= sculpt_data();
+	MTex *mtex;
+	int i;
+	int orig_y= cy;
+	char *strp;
+	uiBut *but;
+
+	uiBlockBeginAlign(block);
 	cy-= 20;
-
 	/* TEX CHANNELS */
 	uiBlockBeginAlign(block);
 	uiBlockSetCol(block, TH_BUT_NEUTRAL);
@@ -6034,6 +6064,8 @@
 			uiNewPanelTabbed("Multires", "Editing");
 			editing_panel_sculpting_tools();
 			uiNewPanelTabbed("Multires", "Editing");
+			editing_panel_sculpting_brush();
+			uiNewPanelTabbed("Multires", "Editing");
 			editing_panel_sculpting_textures();
 		} else {
 			if(G.f & (G_VERTEXPAINT | G_TEXTUREPAINT | G_WEIGHTPAINT) ) {

Modified: trunk/blender/source/blender/src/drawview.c
===================================================================
--- trunk/blender/source/blender/src/drawview.c	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/src/drawview.c	2007-12-20 19:07:47 UTC (rev 12964)
@@ -2252,7 +2252,7 @@
 	uiSetPanelHandler(VIEW3D_HANDLER_OBJECT);  // for close and esc
 
 	if((G.f & G_SCULPTMODE) && !G.obedit) {
-		if(!uiNewPanel(curarea, block, "Transform Properties", "View3d", 10, 230, 425, 234))
+		if(!uiNewPanel(curarea, block, "Transform Properties", "View3d", 10, 230, 318, 234))
 			return;
 	} else if(G.f & G_PARTICLEEDIT && !G.obedit){
 		if(!uiNewPanel(curarea, block, "Transform Properties", "View3d", 10, 230, 318, 234))

Modified: trunk/blender/source/blender/src/sculptmode.c
===================================================================
--- trunk/blender/source/blender/src/sculptmode.c	2007-12-20 18:41:11 UTC (rev 12963)
+++ trunk/blender/source/blender/src/sculptmode.c	2007-12-20 19:07:47 UTC (rev 12964)
@@ -53,6 +53,7 @@
 #include "DNA_texture_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_userdef_types.h"
+#include "DNA_color_types.h"
 
 #include "BKE_customdata.h"
 #include "BKE_DerivedMesh.h"
@@ -66,6 +67,7 @@
 #include "BKE_modifier.h"
 #include "BKE_texture.h"
 #include "BKE_utildefines.h"
+#include "BKE_colortools.h"
 
 #include "BIF_editkey.h"
 #include "BIF_editview.h"
@@ -190,6 +192,35 @@
  * Allocate/initialize/free data
  */
 
+// Default curve approximates 0.5 * (cos(pi * x) + 1), with 0 <= x <= 1;
+void sculpt_reset_curve(SculptData *sd)
+{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list