[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57608] trunk/blender/source/blender: transform: 2d option for proportional editmode,

Campbell Barton ideasman42 at gmail.com
Thu Jun 20 15:24:07 CEST 2013


Revision: 57608
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57608
Author:   campbellbarton
Date:     2013-06-20 13:24:07 +0000 (Thu, 20 Jun 2013)
Log Message:
-----------
transform: 2d option for proportional editmode,
Uses for view orientation for distance calculation, can give nicer results when you dont want twisting caused by changes in depth.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2013-06-20 13:10:47 UTC (rev 57607)
+++ trunk/blender/source/blender/editors/transform/transform.c	2013-06-20 13:24:07 UTC (rev 57608)
@@ -1736,12 +1736,15 @@
 	}
 
 	/* convert flag to enum */
-	switch (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+	switch (t->flag & T_PROP_EDIT_ALL) {
+		case T_PROP_EDIT:
+			proportional = PROP_EDIT_ON;
+			break;
 		case (T_PROP_EDIT | T_PROP_CONNECTED):
 			proportional = PROP_EDIT_CONNECTED;
 			break;
-		case T_PROP_EDIT:
-			proportional = PROP_EDIT_ON;
+		case (T_PROP_EDIT | T_PROP_PROJECTED):
+			proportional = PROP_EDIT_PROJECTED;
 			break;
 		default:
 			proportional = PROP_EDIT_OFF;
@@ -2945,7 +2948,7 @@
 		}
 	}
 
-	if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+	if (t->flag & T_PROP_EDIT_ALL) {
 		ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_(" Proportional size: %.2f"), t->prop_size);
 	}
 }
@@ -3143,7 +3146,7 @@
 		/* vertices in the radius of the brush end */
 		/* outside the clipping area               */
 		/* XXX HACK - dg */
-		if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+		if (t->flag & T_PROP_EDIT_ALL) {
 			clipUVData(t);
 		}
 	}
@@ -3663,7 +3666,7 @@
 		                    RAD2DEGF(final), t->con.text, t->proptext);
 	}
 	
-	if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+	if (t->flag & T_PROP_EDIT_ALL) {
 		ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_(" Proportional size: %.2f"), t->prop_size);
 	}
 
@@ -3764,7 +3767,7 @@
 		                    RAD2DEGF(phi[0]), RAD2DEGF(phi[1]), t->proptext);
 	}
 
-	if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+	if (t->flag & T_PROP_EDIT_ALL) {
 		ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_(" Proportional size: %.2f"), t->prop_size);
 	}
 
@@ -3912,7 +3915,7 @@
 		}
 	}
 
-	if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+	if (t->flag & T_PROP_EDIT_ALL) {
 		ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_(" Proportional size: %.2f"), t->prop_size);
 	}
 }
@@ -4019,7 +4022,7 @@
 		/* vertices in the radius of the brush end */
 		/* outside the clipping area               */
 		/* XXX HACK - dg */
-		if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) {
+		if (t->flag & T_PROP_EDIT_ALL) {
 			clipUVData(t);
 		}
 	}

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2013-06-20 13:10:47 UTC (rev 57607)
+++ trunk/blender/source/blender/editors/transform/transform.h	2013-06-20 13:24:07 UTC (rev 57608)
@@ -394,6 +394,8 @@
 
 #define T_PROP_EDIT			(1 << 11)
 #define T_PROP_CONNECTED	(1 << 12)
+#define T_PROP_PROJECTED	(1 << 25)
+#define T_PROP_EDIT_ALL		(T_PROP_EDIT | T_PROP_CONNECTED | T_PROP_PROJECTED)
 
 #define T_V3D_ALIGN			(1 << 14)
 	/* for 2d views like uv or ipo */

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2013-06-20 13:10:47 UTC (rev 57607)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2013-06-20 13:24:07 UTC (rev 57608)
@@ -201,6 +201,17 @@
 	TransData *tob;
 	int a;
 
+	float _proj_vec[3];
+	const float *proj_vec = NULL;
+
+	if (t->flag & T_PROP_PROJECTED) {
+		if (t->spacetype == SPACE_VIEW3D && t->ar && t->ar->regiontype == RGN_TYPE_WINDOW) {
+			RegionView3D *rv3d = t->ar->regiondata;
+			normalize_v3_v3(_proj_vec, rv3d->viewinv[2]);
+			proj_vec = _proj_vec;
+		}
+	}
+
 	for (a = 0, tob = t->data; a < t->total; a++, tob++) {
 
 		tob->rdist = 0.0f; // init, it was mallocced
@@ -216,6 +227,13 @@
 				if (td->flag & TD_SELECTED) {
 					sub_v3_v3v3(vec, tob->center, td->center);
 					mul_m3_v3(tob->mtx, vec);
+
+					if (proj_vec) {
+						float vec_p[3];
+						project_v3_v3v3(vec_p, vec, proj_vec);
+						sub_v3_v3(vec, vec_p);
+					}
+
 					dist = len_squared_v3(vec);
 					if ((tob->rdist == -1.0f) || (dist < (tob->rdist * tob->rdist))) {
 						tob->rdist = sqrtf(dist);
@@ -989,7 +1007,7 @@
 	t->poseobj = ob; /* we also allow non-active objects to be transformed, in weightpaint */
 
 	/* disable PET, its not usable in pose mode yet [#32444] */
-	t->flag &= ~(T_PROP_EDIT | T_PROP_CONNECTED);
+	t->flag &= ~T_PROP_EDIT_ALL;
 
 	/* init trans data */
 	td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransPoseBone");
@@ -2013,7 +2031,7 @@
 	float mtx[3][3], smtx[3][3], (*defmats)[3][3] = NULL, (*defcos)[3] = NULL;
 	float *dists = NULL;
 	int count = 0, countsel = 0, a, totleft;
-	int propmode = (t->flag & T_PROP_EDIT) ? (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) : 0;
+	int propmode = (t->flag & T_PROP_EDIT) ? (t->flag & T_PROP_EDIT_ALL) : 0;
 	int mirror = 0;
 	char *selstate = NULL;
 	short selectmode = ts->selectmode;
@@ -5827,7 +5845,7 @@
 	}
 
 	/* nodes dont support PET and probably never will */
-	t->flag &= ~(T_PROP_EDIT | T_PROP_CONNECTED);
+	t->flag &= ~T_PROP_EDIT_ALL;
 
 	/* set transform flags on nodes */
 	for (node = snode->edittree->nodes.first; node; node = node->next) {

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2013-06-20 13:10:47 UTC (rev 57607)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2013-06-20 13:24:07 UTC (rev 57608)
@@ -1023,6 +1023,20 @@
 	t->flag &= ~T_ALL_RESTRICTIONS;
 }
 
+static int initTransInfo_edit_pet_to_flag(const int proportional)
+{
+	switch (proportional) {
+		case PROP_EDIT_ON:
+			return T_PROP_EDIT;
+		case PROP_EDIT_CONNECTED:
+			return T_PROP_EDIT | T_PROP_CONNECTED;
+		case PROP_EDIT_PROJECTED:
+			return T_PROP_EDIT | T_PROP_PROJECTED;
+		default:
+			return 0;
+	}
+}
+
 /* the *op can be NULL */
 int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *event)
 {
@@ -1245,24 +1259,14 @@
 	/* setting PET flag only if property exist in operator. Otherwise, assume it's not supported */
 	if (op && (prop = RNA_struct_find_property(op->ptr, "proportional"))) {
 		if (RNA_property_is_set(op->ptr, prop)) {
-			switch (RNA_property_enum_get(op->ptr, prop)) {
-				case PROP_EDIT_CONNECTED:
-					t->flag |= T_PROP_CONNECTED;
-				case PROP_EDIT_ON:
-					t->flag |= T_PROP_EDIT;
-					break;
-			}
+			t->flag |= initTransInfo_edit_pet_to_flag(RNA_property_enum_get(op->ptr, prop));
 		}
 		else {
 			/* use settings from scene only if modal */
 			if (t->flag & T_MODAL) {
 				if ((t->options & CTX_NO_PET) == 0) {
-					if (t->obedit && ts->proportional != PROP_EDIT_OFF) {
-						t->flag |= T_PROP_EDIT;
-
-						if (ts->proportional == PROP_EDIT_CONNECTED) {
-							t->flag |= T_PROP_CONNECTED;
-						}
+					if (t->obedit) {
+						t->flag |= initTransInfo_edit_pet_to_flag(ts->proportional);
 					}
 					else if (t->options & CTX_MASK) {
 						if (ts->proportional_mask) {

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2013-06-20 13:10:47 UTC (rev 57607)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2013-06-20 13:24:07 UTC (rev 57608)
@@ -1501,7 +1501,8 @@
 /* toolsettings->proportional */
 #define PROP_EDIT_OFF			0
 #define PROP_EDIT_ON			1
-#define PROP_EDIT_CONNECTED	2
+#define PROP_EDIT_CONNECTED		2
+#define PROP_EDIT_PROJECTED		3
 
 /* toolsettings->weightuser */
 enum {

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-06-20 13:10:47 UTC (rev 57607)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-06-20 13:24:07 UTC (rev 57608)
@@ -120,6 +120,8 @@
 EnumPropertyItem proportional_editing_items[] = {
 	{PROP_EDIT_OFF, "DISABLED", ICON_PROP_OFF, "Disable", "Proportional Editing disabled"},
 	{PROP_EDIT_ON, "ENABLED", ICON_PROP_ON, "Enable", "Proportional Editing enabled"},
+	{PROP_EDIT_PROJECTED, "PROJECTED", ICON_PROP_ON, "Projected (2D)",
+	                      "Proportional Editing using screen space locations"},
 	{PROP_EDIT_CONNECTED, "CONNECTED", ICON_PROP_CON, "Connected",
 	                      "Proportional Editing using connected geometry only"},
 	{0, NULL, 0, NULL, NULL}




More information about the Bf-blender-cvs mailing list