[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