2.5:
authorNicholas Bishop <nicholasbishop@gmail.com>
Mon, 17 Aug 2009 17:14:37 +0000 (17:14 +0000)
committerNicholas Bishop <nicholasbishop@gmail.com>
Mon, 17 Aug 2009 17:14:37 +0000 (17:14 +0000)
* Added icons to viewport shading enum. On a side note, why do we have an icon called "ICON_POTATO" for texture mode?
* Fixed clay brush at zero-strength bug, was dividing by zero. Still todo is fixing clay brush strength relative to other brushes.

source/blender/editors/sculpt_paint/sculpt.c
source/blender/makesrna/intern/rna_space.c

index 2a4c553a94c35bc62bc7d80e7dbd19a90242fa6b..9931ae15f237d500e65f7d6b9405c20dcc062b59 100644 (file)
@@ -542,12 +542,27 @@ static void point_plane_project(float intr[3], float co[3], float plane_normal[3
        VecAddf(intr, intr, p1);
 }
 
+static int plane_point_side(float co[3], float plane_normal[3], float plane_center[3], int flip)
+{
+       float delta[3];
+       float d;
+
+       VecSubf(delta, co, plane_center);
+       d = Inpf(plane_normal, delta);
+
+       if(flip)
+               d = -d;
+
+       return d <= 0.0f;
+}
+
 static void do_flatten_clay_brush(Sculpt *sd, SculptSession *ss, const ListBase *active_verts, int clay)
 {
        ActiveData *node= active_verts->first;
        /* area_normal and cntr define the plane towards which vertices are squashed */
        float area_normal[3];
        float cntr[3], cntr2[3], bstr;
+       int flip = 0;
 
        calc_area_normal(sd, ss, area_normal, active_verts);
        calc_flatten_center(ss, node, cntr);
@@ -558,31 +573,24 @@ static void do_flatten_clay_brush(Sculpt *sd, SculptSession *ss, const ListBase
                cntr2[0]=cntr[0]+area_normal[0]*bstr*ss->cache->scale[0];
                cntr2[1]=cntr[1]+area_normal[1]*bstr*ss->cache->scale[1];
                cntr2[2]=cntr[2]+area_normal[2]*bstr*ss->cache->scale[2];
+               flip = bstr < 0;
        }
        
        while(node){
                float *co= ss->mvert[node->Index].co;
-               float intr[3], val[3], d;
+               float intr[3], val[3];
                
-               if(clay) {
-                       float delta[3];
-
-                       VecSubf(delta, co, cntr2);
-                       d = Inpf(area_normal, delta);
-
-                       /* Check for subtractive mode */
-                       if(bstr < 0)
-                               d = -d;
-               }
-
-               if(!clay || d <= 0.0f) {
+               if(!clay || plane_point_side(co, area_normal, cntr2, flip)) {
                        /* Find the intersection between squash-plane and vertex (along the area normal) */             
                        point_plane_project(intr, co, area_normal, cntr);
 
                        VecSubf(val, intr, co);
 
                        if(clay) {
-                               VecMulf(val, node->Fade / bstr);
+                               if(bstr > FLT_EPSILON)
+                                       VecMulf(val, node->Fade / bstr);
+                               else
+                                       VecMulf(val, node->Fade);
                                /* Clay displacement */
                                val[0]+=area_normal[0] * ss->cache->scale[0]*node->Fade;
                                val[1]+=area_normal[1] * ss->cache->scale[1]*node->Fade;
@@ -592,6 +600,7 @@ static void do_flatten_clay_brush(Sculpt *sd, SculptSession *ss, const ListBase
                                VecMulf(val, fabs(node->Fade));
 
                        VecAddf(val, val, co);
+
                        sculpt_clip(sd, ss, co, val);
                }
                
index 664b1713b31fe66f1798651e75da42375a58e09e..41361dd69a4dd6d1edb6a0205c401d18a620fb3f 100644 (file)
@@ -519,11 +519,11 @@ static void rna_def_space_3dview(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem viewport_shading_items[] = {
-               {OB_BOUNDBOX, "BOUNDBOX", 0, "Bounding Box", "Display the object's local bounding boxes only"},
-               {OB_WIRE, "WIREFRAME", 0, "Wireframe", "Display the object as wire edges"},
-               {OB_SOLID, "SOLID", 0, "Solid", "Display the object solid, lit with default OpenGL lights"},
-               {OB_SHADED, "SHADED", 0, "Shaded", "Display the object solid, with preview shading interpolated at vertices"},
-               {OB_TEXTURE, "TEXTURED", 0, "Textured", "Display the object solid, with face-assigned textures"},
+               {OB_BOUNDBOX, "BOUNDBOX", ICON_BBOX, "Bounding Box", "Display the object's local bounding boxes only"},
+               {OB_WIRE, "WIREFRAME", ICON_WIRE, "Wireframe", "Display the object as wire edges"},
+               {OB_SOLID, "SOLID", ICON_SOLID, "Solid", "Display the object solid, lit with default OpenGL lights"},
+               {OB_SHADED, "SHADED", ICON_SMOOTH, "Shaded", "Display the object solid, with preview shading interpolated at vertices"},
+               {OB_TEXTURE, "TEXTURED", ICON_POTATO, "Textured", "Display the object solid, with face-assigned textures"},
                {0, NULL, 0, NULL, NULL}};
                
        static EnumPropertyItem pivot_items[] = {