Revision: 39098
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39098
Author:   jwilkins
Date:     2011-08-06 14:05:02 +0000 (Sat, 06 Aug 2011)
Log Message:
-----------
re-enabled "Symmetry Feather" option

Modified Paths:
--------------
    
branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_bspace.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_dab.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt_tools.c
    branches/soc-2011-onion/source/blender/makesrna/intern/rna_brush.c

Modified: 
branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- 
branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py   
    2011-08-06 12:53:58 UTC (rev 39097)
+++ 
branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py   
    2011-08-06 14:05:02 UTC (rev 39098)
@@ -644,6 +644,9 @@
                     row.operator("paint.set_persistent_base")
                     row.active = brush.use_layer
 
+            col.separator()
+            col.prop(brush, "use_symmetry_feather")
+
         # Texture Paint Mode #
 
         elif context.image_paint_object and brush:

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_bspace.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_bspace.c  
2011-08-06 12:53:58 UTC (rev 39097)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_bspace.c  
2011-08-06 14:05:02 UTC (rev 39098)
@@ -103,6 +103,74 @@
 
 
 
+/* symmetry overlap */
+
+static float calc_mirror_symmetry_overlap(BrushSpace *bspace, const char symm, 
const char axis, const float angle)
+{
+       if (symm != 0) {
+               float mirror[3];
+               float distsq;
+
+               paint_flip_v3_v3(mirror, bspace->location, symm);
+
+               if (axis >= 'X' && axis <= 'Z' && angle != 0) {
+                       float mat[4][4]= MAT4_UNITY;
+                       rotate_m4(mat, axis, angle);
+                       mul_m4_v3(mat, mirror);
+               }
+
+               distsq= len_squared_v3v3(mirror, bspace->location);
+
+               if (distsq <= 4.0f*(bspace->radius3d_sq))
+                       return (2.0f*(bspace->radius3d) - sqrt(distsq))  /  
(2.0f*(bspace->radius3d));
+               else
+                       return 0;
+       }
+       else {
+               return 1;
+       }
+}
+
+static float calc_radial_symmetry_overlap(Paint *paint, BrushSpace *bspace, 
const char symm, const char axis)
+{
+       int i;
+       float overlap= 0;
+
+       for(i = 1; i < paint->radial_symm[axis-'X']; ++i) {
+               const float angle = 2*M_PI*i/(paint->radial_symm[axis-'X']);
+               overlap += calc_mirror_symmetry_overlap(bspace, symm, axis, 
angle);
+       }
+
+       return overlap;
+}
+
+static float calc_symmetry_overlap(
+       struct Paint *paint,
+       struct BrushSpace *bspace)
+{
+       Brush *brush= paint_brush(paint);
+       float overlap= 0;
+       int symm= paint->mirror_symm;
+       int i;
+
+       for (i= 0; i <= symm; i++) {
+               if (i == 0 || (symm & i && (symm != 5 || i != 3) && (symm != 6 
|| (i != 3 && i != 5)))) {
+
+                       overlap += calc_mirror_symmetry_overlap(bspace, i, 0, 
0);
+
+                       overlap += calc_radial_symmetry_overlap(paint, bspace, 
i, 'X');
+                       overlap += calc_radial_symmetry_overlap(paint, bspace, 
i, 'Y');
+                       overlap += calc_radial_symmetry_overlap(paint, bspace, 
i, 'Z');
+               }
+       }
+
+       //printf("overlap: %f\n", overlap);
+
+       return overlap;
+}
+
+
+
 /* mirror symmetry */
 static void calc_mirror_symmetry(struct BrushSpace *bspace, int mirror_pass)
 {
@@ -368,6 +436,12 @@
                /* mirror */
                /* angle flip */
                /* radial */
+
+       /* symmetry overlap */
+       if (paint_brush(paint)->flag & BRUSH_SYMMETRY_FEATHER)
+               out->symmetry_overlap= calc_symmetry_overlap(paint, out);
+       else
+               out->symmetry_overlap= 1;
 }
 
 void paint_bspace_init(
@@ -377,7 +451,8 @@
        const float mouse[2],
        float radius2d)
 {
-       struct PaintCache *cache= paint_get_active(CTX_data_scene(C))->cache;
+       struct Paint      *paint= paint_get_active(CTX_data_scene(C));
+       struct PaintCache *cache= paint->cache;
        struct BrushSpace *bspace_curr=  cache->bspace_curr;
        struct BrushSpace *bspace_prev=  cache->bspace_prev;
        struct BrushSpace *bspace_first= cache->bspace_first;

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_dab.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_dab.c     
2011-08-06 12:53:58 UTC (rev 39097)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_dab.c     
2011-08-06 14:05:02 UTC (rev 39098)
@@ -181,70 +181,6 @@
        return max;
 }
 
-static float calc_overlap(BrushSpace *bspace, const char symm, const char 
axis, const float angle)
-{
-       float mirror[3];
-       float distsq;
-       
-       //flip_coord(mirror, bspace->traced_location, symm);
-       paint_flip_coord(mirror, bspace->location, symm);
-
-       if(axis >= 'X' && axis <= 'Z') {
-               float mat[4][4]= MAT4_UNITY;
-               rotate_m4(mat, axis, angle);
-               mul_m4_v3(mat, mirror);
-       }
-
-       //distsq = len_squared_v3v3(mirror, bspace->traced_location);
-       distsq = len_squared_v3v3(mirror, bspace->location);
-
-       if (distsq <= 4.0f*(bspace->radius3d_sq))
-               return (2.0f*(bspace->radius3d) - sqrt(distsq))  /  
(2.0f*(bspace->radius3d));
-       else
-               return 0;
-}
-
-static float calc_radial_symmetry_feather(Sculpt *sd, BrushSpace *bspace, 
const char symm, const char axis)
-{
-       int i;
-       float overlap;
-
-       overlap = 0;
-       for(i = 1; i < sd->paint.radial_symm[axis-'X']; ++i) {
-               const float angle = 2*M_PI*i/sd->paint.radial_symm[axis-'X'];
-               overlap += calc_overlap(bspace, symm, axis, angle);
-       }
-
-       return overlap;
-}
-
-static float calc_symmetry_feather(Sculpt *sd, BrushSpace *bspace)
-{
-       Brush *brush= paint_brush(&(sd->paint));
-
-       if (brush->flag & BRUSH_SYMMETRY_FEATHER) {
-               float overlap;
-               int symm = sd->paint.mirror_symm;
-               int i;
-
-               overlap = 0;
-               for (i = 0; i <= symm; i++) {
-                       if(i == 0 || (symm & i && (symm != 5 || i != 3) && 
(symm != 6 || (i != 3 && i != 5)))) {
-
-                               overlap += calc_overlap(bspace, i, 0, 0);
-
-                               overlap += calc_radial_symmetry_feather(sd, 
bspace, i, 'X');
-                               overlap += calc_radial_symmetry_feather(sd, 
bspace, i, 'Y');
-                               overlap += calc_radial_symmetry_feather(sd, 
bspace, i, 'Z');
-                       }
-               }
-
-               return 1/overlap;
-       }
-       else {
-               return 1;
-       }
-}
 #if 0 //SNIP
 /* Return modified brush strength. Includes the direction of the brush, 
positive
    values pull vertices, negative values push. Uses tablet pressure and a
@@ -369,5 +305,3 @@
 {
        return (1.0f-mask)*brush_curve_strength(brush, dist, bspace->radius3d);
 }
-
-void paint_flip_coord(float out[3], const float in[3], int mirror_symm){}

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h  
2011-08-06 12:53:58 UTC (rev 39097)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h  
2011-08-06 14:05:02 UTC (rev 39098)
@@ -146,6 +146,8 @@
 
        float angle_flip;
 
+       float symmetry_overlap;
+
 } BrushSpace;
 
 #define TEMP_SWITCH_NAME_SIZE 24
@@ -285,8 +287,6 @@
 
 struct MultiresModifierData *paint_mesh_get_active_multires(const struct 
bContext *C);
 
-void paint_flip_coord(float out[3], const float in[3], int mirror_symm);
-
 float brush_tex_strength(const struct ViewContext *vc,
                         float pmat[4][4], float symm_brush_local_mat[4][4], 
int mirror_pass, struct Brush *br,
                         float co[3], float mask, const float len,

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt_tools.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt_tools.c  
2011-08-06 12:53:58 UTC (rev 39097)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt_tools.c  
2011-08-06 14:05:02 UTC (rev 39098)
@@ -1652,16 +1652,11 @@
                                        float val[3];
                                        int p;
 
-                                       zero_v3(val);
+                                       copy_v3_v3(val, orig_co[vd.i]);
 
                                        for (p= 0; p < proxy_count; p++)
                                                add_v3_v3(val, 
proxies[p].co[vd.i]);
 
-                                       if (brush->flag & 
BRUSH_SYMMETRY_FEATHER)
-                                               mul_v3_fl(val, 
1.0f/proxy_count);
-
-                                       add_v3_v3(val, orig_co[vd.i]);
-
                                        clip(sd, mode_data, vd.co, val);
 
                                        if (ob->paint->modifiers_active)
@@ -1706,16 +1701,11 @@
                                        float val[3];
                                        int p;
 
-                                       zero_v3(val);
+                                       copy_v3_v3(val, vd.co);
 
                                        for (p= 0; p < proxy_count; p++)
                                                add_v3_v3(val, 
proxies[p].co[vd.i]);
 
-                                       if (brush->flag & 
BRUSH_SYMMETRY_FEATHER)
-                                               mul_v3_fl(val, 
1.0f/proxy_count);
-
-                                       add_v3_v3(val, vd.co);
-
                                        if (brush->sculpt_tool == 
SCULPT_TOOL_LAYER || brush->flag & BRUSH_LAYER) {
                                                float disp[3];
                                                float len;
@@ -1803,9 +1793,13 @@
                paint_bspace_update(C, stroke, sculpt_stroke_get_location, 
paint_stroke_mouse(stroke), brush_size(brush));
 
        if (paint_bspace_hit(C)) {
+               struct BrushSpace *bspace= sd->paint.cache->bspace_curr;
+
                paint_stroke_update_params(C, stroke);
 
-               mode_data->bstrength= tool_strength(brush, stroke, 
sd->paint.cache->bspace_curr);
+               mode_data->bstrength=
+                       (1.0f / bspace->symmetry_overlap) *
+                       tool_strength(brush, stroke, bspace);
 
                paint_stroke_apply(C, stroke);
 

Modified: branches/soc-2011-onion/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/soc-2011-onion/source/blender/makesrna/intern/rna_brush.c  
2011-08-06 12:53:58 UTC (rev 39097)
+++ branches/soc-2011-onion/source/blender/makesrna/intern/rna_brush.c  
2011-08-06 14:05:02 UTC (rev 39098)
@@ -946,7 +946,7 @@
 
        prop= RNA_def_property(srna, "use_symmetry_feather", PROP_BOOLEAN, 
PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", 
BRUSH_SYMMETRY_FEATHER);
-       RNA_def_property_ui_text(prop, "Symmetry Feathering", "Reduce the 
strength of the brush where it overlaps symmetrical dabs");
+       RNA_def_property_ui_text(prop, "Symmetry Feather", "Reduce the strength 
of the brush where symmetrical dabs overlap");
        RNA_def_property_update(prop, 0, "rna_Brush_update");
 
        prop= RNA_def_property(srna, "use_layer", PROP_BOOLEAN, PROP_NONE);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to