Revision: 55808
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55808
Author:   psy-fi
Date:     2013-04-05 11:45:33 +0000 (Fri, 05 Apr 2013)
Log Message:
-----------
Patch from kgeogeo:

* Change coordinates of stencil to float, helps with precision during
property manuipulations
* Expose stencil properties to RNA.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c
    trunk/blender/source/blender/makesdna/DNA_brush_types.h
    trunk/blender/source/blender/makesrna/intern/rna_brush.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c       
2013-04-05 11:16:06 UTC (rev 55807)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c       
2013-04-05 11:45:33 UTC (rev 55808)
@@ -454,9 +454,9 @@
 } StencilControlMode;
 
 typedef struct {
-       int init_mouse[2];
-       int init_spos[2];
-       int init_sdim[2];
+       float init_mouse[2];
+       float init_spos[2];
+       float init_sdim[2];
        float init_rot;
        float init_angle;
        float lenorig;
@@ -468,15 +468,16 @@
 {
        Paint *paint = paint_get_active_from_context(C);
        Brush *br = paint_brush(paint);
-       int mdiff[2];
+       float mdiff[2];
+       float mvalf[2] = {event->mval[0], event->mval[1]};
 
        StencilControlData *scd = MEM_mallocN(sizeof(StencilControlData), 
"stencil_control");
 
-       copy_v2_v2_int(scd->init_mouse, event->mval);
-       copy_v2_v2_int(scd->init_sdim, br->stencil_dimension);
-       copy_v2_v2_int(scd->init_spos, br->stencil_pos);
-       sub_v2_v2v2_int(mdiff, event->mval, br->stencil_pos);
-       scd->lenorig = sqrtf(mdiff[0] * mdiff[0] + mdiff[1] * mdiff[1]);
+       copy_v2_v2(scd->init_mouse, mvalf);
+       copy_v2_v2(scd->init_sdim, br->stencil_dimension);
+       copy_v2_v2(scd->init_spos, br->stencil_pos);
+       sub_v2_v2v2(mdiff, mvalf, br->stencil_pos);
+       scd->lenorig = len_v2(mdiff);
        scd->br = br;
        scd->init_rot = br->mtex.rot;
        scd->init_angle = atan2(mdiff[1], mdiff[0]);
@@ -494,8 +495,8 @@
        StencilControlData *scd = op->customdata;
        Brush *br = scd->br;
 
-       copy_v2_v2_int(br->stencil_dimension, scd->init_sdim);
-       copy_v2_v2_int(br->stencil_pos, scd->init_spos);
+       copy_v2_v2(br->stencil_dimension, scd->init_sdim);
+       copy_v2_v2(br->stencil_pos, scd->init_spos);
        br->mtex.rot = scd->init_rot;
        MEM_freeN(op->customdata);
        return OPERATOR_CANCELLED;
@@ -508,28 +509,29 @@
        switch (event->type) {
                case MOUSEMOVE:
                        {
-                               int mdiff[2];
+                               float mdiff[2];
+                               float mvalf[2] = {event->mval[0], 
event->mval[1]};
                                switch (scd->mode) {
                                        case STENCIL_TRANSLATE:
-                                               sub_v2_v2v2_int(mdiff, 
event->mval, scd->init_mouse);
-                                               
add_v2_v2v2_int(scd->br->stencil_pos, scd->init_spos,
+                                               sub_v2_v2v2(mdiff, mvalf, 
scd->init_mouse);
+                                               
add_v2_v2v2(scd->br->stencil_pos, scd->init_spos,
                                                            mdiff);
                                                break;
                                        case STENCIL_SCALE:
                                        {
                                                float len, factor;
-                                               sub_v2_v2v2_int(mdiff, 
event->mval, scd->br->stencil_pos);
-                                               len = sqrtf(mdiff[0] * mdiff[0] 
+ mdiff[1] * mdiff[1]);
+                                               sub_v2_v2v2(mdiff, mvalf, 
scd->br->stencil_pos);
+                                               len = len_v2(mdiff);
                                                factor = len / scd->lenorig;
                                                mdiff[0] = factor * 
scd->init_sdim[0];
                                                mdiff[1] = factor * 
scd->init_sdim[1];
-                                               
copy_v2_v2_int(scd->br->stencil_dimension, mdiff);
+                                               
copy_v2_v2(scd->br->stencil_dimension, mdiff);
                                                break;
                                        }
                                        case STENCIL_ROTATE:
                                        {
                                                float angle;
-                                               sub_v2_v2v2_int(mdiff, 
event->mval, scd->br->stencil_pos);
+                                               sub_v2_v2v2(mdiff, mvalf, 
scd->br->stencil_pos);
                                                angle = atan2(mdiff[1], 
mdiff[0]);
                                                angle = scd->init_rot + angle - 
scd->init_angle;
                                                if (angle < 0.0f)

Modified: trunk/blender/source/blender/makesdna/DNA_brush_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_brush_types.h     2013-04-05 
11:16:06 UTC (rev 55807)
+++ trunk/blender/source/blender/makesdna/DNA_brush_types.h     2013-04-05 
11:45:33 UTC (rev 55808)
@@ -106,8 +106,8 @@
        float add_col[3];
        float sub_col[3];
 
-       int stencil_pos[2];
-       int stencil_dimension[2];
+       float stencil_pos[2];
+       float stencil_dimension[2];
 } Brush;
 
 /* Brush.flag */

Modified: trunk/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_brush.c    2013-04-05 
11:16:06 UTC (rev 55807)
+++ trunk/blender/source/blender/makesrna/intern/rna_brush.c    2013-04-05 
11:45:33 UTC (rev 55808)
@@ -793,6 +793,18 @@
        RNA_def_property_ui_text(prop, "Autosmooth", "Amount of smoothing to 
automatically apply to each stroke");
        RNA_def_property_update(prop, 0, "rna_Brush_update");
 
+       prop = RNA_def_property(srna, "stencil_pos", PROP_FLOAT, PROP_DISTANCE);
+       RNA_def_property_float_sdna(prop, NULL, "stencil_pos");
+       RNA_def_property_array(prop, 2);
+       RNA_def_property_ui_text(prop, "Stencil Position", "Position of stencil 
in viewport");
+       RNA_def_property_update(prop, 0, "rna_Brush_update");
+
+       prop = RNA_def_property(srna, "stencil_dimension", PROP_FLOAT, 
PROP_DISTANCE);
+       RNA_def_property_float_sdna(prop, NULL, "stencil_dimension");
+       RNA_def_property_array(prop, 2);
+       RNA_def_property_ui_text(prop, "Stencil Dimensions", "Dimensions of 
stencil in viewport");
+       RNA_def_property_update(prop, 0, "rna_Brush_update");
+
        /* flag */
        prop = RNA_def_property(srna, "use_airbrush", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_AIRBRUSH);

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

Reply via email to