[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55808] trunk/blender/source/blender: Patch from kgeogeo:

Antony Riakiotakis kalast at gmail.com
Fri Apr 5 13:45:34 CEST 2013


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);




More information about the Bf-blender-cvs mailing list