Fix #26158: The layer hight of the layer tool cannot longer be controled by the stren...
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 25 Feb 2011 16:54:09 +0000 (16:54 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 25 Feb 2011 16:54:09 +0000 (16:54 +0000)
Layer height used to be controlled with brush radius, quite confusing decision.
Added new property for brushes - height for adjusting affectable brush height
(it could be not only layer height in the future).

release/scripts/ui/space_view3d_toolbar.py
source/blender/blenloader/intern/readfile.c
source/blender/editors/sculpt_paint/sculpt.c
source/blender/makesdna/DNA_brush_types.h
source/blender/makesrna/intern/rna_brush.c

index 563eeb5e893d05d45c18da722e408d32178bf974..106cf6085541ee527290a885b626ddc79e0df43d 100644 (file)
@@ -578,6 +578,10 @@ class VIEW3D_PT_tools_brush(PaintPanel, bpy.types.Panel):
                 row.active = brush.use_plane_trim
                 row.prop(brush, "plane_trim", slider=True, text="Distance")
 
+            if brush.sculpt_tool == 'LAYER':
+                row = col.row()
+                row.prop(brush, "height", slider=True, text="Height")
+
             col.separator()
 
             row = col.row()
index 4c5a281e9663482c2ef7b65b6feb164ba51d3ec3..9c2ceb12c5a7fddd4b5e163412bbfb02fc43261e 100644 (file)
@@ -11478,6 +11478,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
 
        {
                bScreen *sc;
+               Brush *brush;
                
                /* redraws flag in SpaceTime has been moved to Screen level */
                for (sc = main->screen.first; sc; sc= sc->id.next) {
@@ -11487,6 +11488,11 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                                sc->redraws_flag = TIME_ALL_3D_WIN|TIME_ALL_ANIM_WIN;
                        }
                }
+
+               for (brush= main->brush.first; brush; brush= brush->id.next) {
+                       if(brush->height == 0)
+                               brush->height= 0.4;
+               }
        }
        
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! */
index 29730e8fc69c5f7e218e51a1a1b6f317dde7c4fb..7505fdb0ecf7d50351686b4ed703b2b16a7e2352 100644 (file)
@@ -1519,7 +1519,7 @@ static void do_layer_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int
        Brush *brush = paint_brush(&sd->paint);
        float bstrength= ss->cache->bstrength;
        float area_normal[3], offset[3];
-       float lim= ss->cache->radius / 4;
+       float lim= brush->height;
        int n;
 
        if(bstrength < 0)
@@ -1552,15 +1552,15 @@ static void do_layer_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int
                sculpt_brush_test_init(ss, &test);
 
                BLI_pbvh_vertex_iter_begin(ss->pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
-                       if(sculpt_brush_test(&test, vd.co)) {
-                               const float fade = bstrength*ss->cache->radius*tex_strength(ss, brush, vd.co, test.dist)*frontface(brush, area_normal, vd.no, vd.fno);
+                       if(sculpt_brush_test(&test, origco[vd.i])) {
+                               const float fade = bstrength*tex_strength(ss, brush, vd.co, test.dist)*frontface(brush, area_normal, vd.no, vd.fno);
                                float *disp= &layer_disp[vd.i];
                                float val[3];
 
                                *disp+= fade;
 
                                /* Don't let the displacement go past the limit */
-                               if((lim < 0 && *disp < lim) || (lim > 0 && *disp > lim))
+                               if((lim < 0 && *disp < lim) || (lim >= 0 && *disp > lim))
                                        *disp = lim;
 
                                mul_v3_v3fl(val, offset, *disp);
index 3693f43b69e2c903d5862c46c0b384db5f4e003b..3d143dc3d0fca34ec084cb8e4fb53509a9175276 100644 (file)
@@ -85,13 +85,14 @@ typedef struct Brush {
        char sculpt_tool;               /* active sculpt tool */
        char vertexpaint_tool;          /* active vertex/weight paint tool/blend mode */
        char imagepaint_tool;           /* active image paint tool */
-       char pad3;
+       char pad3[5];
 
        float autosmooth_factor;
 
        float crease_pinch_factor;
 
        float plane_trim;
+       float height;                   /* affectable height of brush (layer height for layer tool, i.e.) */
 
        float texture_sample_bias;
        int   texture_overlay_alpha;
index d649c2dba5b76bd188b89c97b1d40ccf4b7cc189..3f8e38a99c6e91a83eba52b373a8123ffd306fa2 100644 (file)
@@ -493,6 +493,13 @@ static void rna_def_brush(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Plane Trim", "If a vertex is further from offset plane than this then it is not affected");
        RNA_def_property_update(prop, 0, "rna_Brush_update");
 
+       prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_sdna(prop, NULL, "height");
+       RNA_def_property_float_default(prop, 0.5f);
+       RNA_def_property_range(prop, 0, 1.0f);
+       RNA_def_property_ui_text(prop, "Brush Height", "Affectable height of brush (layer height for layer tool, i.e.)");
+       RNA_def_property_update(prop, 0, "rna_Brush_update");
+
        prop= RNA_def_property(srna, "texture_sample_bias", PROP_FLOAT, PROP_DISTANCE);
        RNA_def_property_float_sdna(prop, NULL, "texture_sample_bias");
        RNA_def_property_float_default(prop, 0);