Revision: 18393 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18393 Author: nicholasbishop Date: 2009-01-07 05:38:30 +0100 (Wed, 07 Jan 2009)
Log Message: ----------- Changes/cleanup for sculptdata and brushes. Summary: * Removed texfade, wasn't a very useful option (same result can be created with the falloff curve) * Removed CurveMapping from sculptdata, moved instead to Brush * Removed rake field from sculptdata, moved to Brush.flag * Moved Anchored flag from sculpt to Brush, same for direction field * Removed BrushData, replaced usages with the regular Brush type * Removed hardcoded brushes and brush_type from sculptdata, replaced with a pointer to the current Brush * Made sculpt tool type settable in Brush * Changed symmetry and axis lock fields to flags Modified Paths: -------------- branches/blender2.5/blender/source/blender/blenkernel/BKE_brush.h branches/blender2.5/blender/source/blender/blenkernel/intern/brush.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/blenloader/intern/writefile.c branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c branches/blender2.5/blender/source/blender/editors/sculpt/sculpt_intern.h branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c branches/blender2.5/blender/source/blender/makesdna/DNA_brush_types.h branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_brush.h =================================================================== --- branches/blender2.5/blender/source/blender/blenkernel/BKE_brush.h 2009-01-07 04:06:52 UTC (rev 18392) +++ branches/blender2.5/blender/source/blender/blenkernel/BKE_brush.h 2009-01-07 04:38:30 UTC (rev 18393) @@ -51,6 +51,14 @@ int brush_clone_image_set_nr(struct Brush *brush, int nr); int brush_clone_image_delete(struct Brush *brush); +/* brush curve */ +typedef enum { + BRUSH_PRESET_SHARP, + BRUSH_PRESET_SMOOTH, + BRUSH_PRESET_MAX +} BrushCurvePreset; +void brush_curve_preset(struct Brush *b, BrushCurvePreset preset); + /* sampling */ float brush_sample_falloff(struct Brush *brush, float dist); float brush_sample_falloff_noalpha(struct Brush *brush, float dist); Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c =================================================================== --- branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c 2009-01-07 04:06:52 UTC (rev 18392) +++ branches/blender2.5/blender/source/blender/blenkernel/intern/brush.c 2009-01-07 04:38:30 UTC (rev 18393) @@ -32,6 +32,7 @@ #include "MEM_guardedalloc.h" #include "DNA_brush_types.h" +#include "DNA_color_types.h" #include "DNA_image_types.h" #include "DNA_texture_types.h" #include "DNA_scene_types.h" @@ -114,6 +115,8 @@ MEM_freeN(mtex); } } + + curvemapping_free(brush->curve); } void make_local_brush(Brush *brush) @@ -217,6 +220,40 @@ } } + +void sculpt_preset_curve(Brush *b, BrushCurvePreset preset) +{ + CurveMap *cm = NULL; + + if(!b->curve) + b->curve = curvemapping_add(1, 0, 0, 1, 1); + + cm = b->curve->cm; + + if(cm->curve) + MEM_freeN(cm->curve); + + if(preset == BRUSH_PRESET_SHARP) { + cm->curve= MEM_callocN(3*sizeof(CurveMapPoint), "curve points"); + cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE; + cm->totpoint= 3; + cm->curve[0].x= 0; + cm->curve[0].y= 1; + cm->curve[1].x= 0.33; + cm->curve[1].y= 0.33; + cm->curve[2].x= 1; + cm->curve[2].y= 0; + } + else if(preset == BRUSH_PRESET_SMOOTH) { + // XXX: todo + } + else if(preset == BRUSH_PRESET_MAX) { + // XXX: todo + } + + curvemapping_changed(b->curve, 0); +} + int brush_texture_set_nr(Brush *brush, int nr) { ID *idtest, *id=NULL; Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c =================================================================== --- branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c 2009-01-07 04:06:52 UTC (rev 18392) +++ branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c 2009-01-07 04:38:30 UTC (rev 18393) @@ -625,13 +625,9 @@ sd= &sce->sculptdata; - if(sd->cumap) { - curvemapping_free(sd->cumap); - sd->cumap = NULL; - } - memset(sd, 0, sizeof(SculptData)); + /* XXX: create preset brushes here sd->drawbrush.size = sd->smoothbrush.size = sd->pinchbrush.size = sd->inflatebrush.size = sd->grabbrush.size = sd->layerbrush.size = sd->flattenbrush.size = 50; @@ -653,8 +649,7 @@ sd->flags= SCULPT_DRAW_BRUSH; sd->tablet_size=3; sd->tablet_strength=10; - sd->rake=0; - sculpt_reset_curve(sd); + sd->rake=0;*/ } void sculptdata_free(Scene *sce) @@ -671,9 +666,6 @@ MEM_freeN(mtex); } } - - curvemapping_free(sd->cumap); - sd->cumap = NULL; } void sculpt_vertexusers_free(SculptSession *ss) @@ -707,30 +699,6 @@ } } -void sculpt_reset_curve(SculptData *sd) -{ - CurveMap *cm = NULL; - - if(!sd->cumap) - sd->cumap = curvemapping_add(1, 0, 0, 1, 1); - - cm = sd->cumap->cm; - - if(cm->curve) - MEM_freeN(cm->curve); - cm->curve= MEM_callocN(3*sizeof(CurveMapPoint), "curve points"); - cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE; - cm->totpoint= 3; - cm->curve[0].x= 0; - cm->curve[0].y= 1; - cm->curve[1].x= 0.33; - cm->curve[1].y= 0.33; - cm->curve[2].x= 1; - cm->curve[2].y= 0; - - curvemapping_changed(sd->cumap, 0); -} - /* 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-01-07 04:06:52 UTC (rev 18392) +++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-01-07 04:38:30 UTC (rev 18393) @@ -1456,6 +1456,22 @@ { } +/* ************ READ CurveMapping *************** */ + +/* cuma itself has been read! */ +static void direct_link_curvemapping(FileData *fd, CurveMapping *cumap) +{ + int a; + + /* flag seems to be able to hang? Maybe old files... not bad to clear anyway */ + cumap->flag &= ~CUMA_PREMULLED; + + for(a=0; a<CM_TOT; a++) { + cumap->cm[a].curve= newdataadr(fd, cumap->cm[a].curve); + cumap->cm[a].table= NULL; + } +} + /* ************ READ Brush *************** */ /* library brush linking after fileread */ static void lib_link_brush(FileData *fd, Main *main) @@ -1485,6 +1501,11 @@ for(a=0; a<MAX_MTEX; a++) brush->mtex[a]= newdataadr(fd, brush->mtex[a]); + + /* fallof curve */ + brush->curve= newdataadr(fd, brush->curve); + if(brush->curve) + direct_link_curvemapping(fd, brush->curve); } static void direct_link_script(FileData *fd, Script *script) @@ -1493,22 +1514,6 @@ SCRIPT_SET_NULL(script) } -/* ************ READ CurveMapping *************** */ - -/* cuma itself has been read! */ -static void direct_link_curvemapping(FileData *fd, CurveMapping *cumap) -{ - int a; - - /* flag seems to be able to hang? Maybe old files... not bad to clear anyway */ - cumap->flag &= ~CUMA_PREMULLED; - - for(a=0; a<CM_TOT; a++) { - cumap->cm[a].curve= newdataadr(fd, cumap->cm[a].curve); - cumap->cm[a].table= NULL; - } -} - /* ************ READ NODE TREE *************** */ /* singe node tree (also used for material/scene trees), ntree is not NULL */ @@ -3604,12 +3609,6 @@ /* 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: branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c =================================================================== --- branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c 2009-01-07 04:06:52 UTC (rev 18392) +++ branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c 2009-01-07 04:38:30 UTC (rev 18393) @@ -1475,8 +1475,6 @@ 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) { @@ -2011,6 +2009,9 @@ for(a=0; a<MAX_MTEX; a++) if(brush->mtex[a]) writestruct(wd, DATA, "MTex", 1, brush->mtex[a]); + + if(brush->curve) + write_curvemapping(wd, brush->curve); } } } Modified: branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c 2009-01-07 04:06:52 UTC (rev 18392) +++ branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c 2009-01-07 04:38:30 UTC (rev 18393) @@ -333,15 +333,14 @@ 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 */ -char brush_size() +char brush_size(Brush *b) { SculptData *sd = NULL; /* XXX */ - const BrushData *b= sculptmode_brush(); float size= b->size; float pressure= 0; /* XXX: get_pressure(); */ short activedevice= get_activedevice(); - if(sculpt_data()->brush_type!=GRAB_BRUSH) { + if(b->sculpt_tool!=SCULPT_TOOL_GRAB) { const float size_factor= sd->tablet_size / 10.0f; /* XXX: tablet stuff @@ -356,15 +355,14 @@ /* Return modified brush strength. Includes the direction of the brush, positive values pull vertices, negative values push. Uses tablet pressure and a special multiplier found experimentally to scale the strength factor. */ -float brush_strength(BrushAction *a) +float brush_strength(Brush *b, BrushAction *a) { SculptData *sd = NULL; /* XXX */ - const BrushData* b= sculptmode_brush(); - float dir= b->dir==1 ? 1 : -1; + float dir= b->flag & BRUSH_DIR_IN ? -1 : 1; float pressure= 1; short activedevice= get_activedevice(); float flip= a->flip ? -1:1; - float anchored = b->flag & SCULPT_BRUSH_ANCHORED ? 25 : 1; + float anchored = b->flag & BRUSH_ANCHORED ? 25 : 1; const float strength_factor= sd->tablet_strength / 10.0f; @@ -379,20 +377,20 @@ dir= -dir; #endif - switch(sd->brush_type){ - case DRAW_BRUSH: - case LAYER_BRUSH: - return b->strength / 5000.0f * dir * pressure * flip * anchored; /*XXX: not sure why? multiplied by G.vd->grid */; - case SMOOTH_BRUSH: - return b->strength / 50.0f * pressure * anchored; - case PINCH_BRUSH: - return b->strength / 1000.0f * dir * pressure * flip * anchored; - case GRAB_BRUSH: + switch(b->sculpt_tool){ + case SCULPT_TOOL_DRAW: + case SCULPT_TOOL_LAYER: + return b->alpha / 5000.0f * dir * pressure * flip * anchored; /*XXX: not sure why? multiplied by G.vd->grid */; + case SCULPT_TOOL_SMOOTH: + return b->alpha / 50.0f * pressure * anchored; + case SCULPT_TOOL_PINCH: + return b->alpha / 1000.0f * dir * pressure * flip * anchored; + case SCULPT_TOOL_GRAB: return 1; - case INFLATE_BRUSH: - return b->strength / 5000.0f * dir * pressure * flip * anchored; - case FLATTEN_BRUSH: - return b->strength / 500.0f * pressure * anchored; + case SCULPT_TOOL_INFLATE: + return b->alpha / 5000.0f * dir * pressure * flip * anchored; + case SCULPT_TOOL_FLATTEN: + return b->alpha / 500.0f * pressure * anchored; default: return 0; } @@ -413,21 +411,21 @@ void sculpt_axislock(float *co) { SculptData *sd = sculpt_data(); - if (sd->axislock == AXISLOCK_X+AXISLOCK_Y+AXISLOCK_Z) return; + if (sd->flags & (SCULPT_LOCK_X|SCULPT_LOCK_Y|SCULPT_LOCK_Z)) return; /* XXX: if(G.vd->twmode == V3D_MANIP_LOCAL) { */ if(0) { float mat[3][3], imat[3][3]; /* XXX: Mat3CpyMat4(mat, OBACT->obmat); */ Mat3Inv(imat, mat); Mat3MulVecfl(mat, co); - if (sd->axislock & AXISLOCK_X) co[0] = 0.0; @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs