[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52024] trunk/blender/source/blender/ editors/transform: Option for shrink-fatten to maintain shell thickness ( hold Alt).

Campbell Barton ideasman42 at gmail.com
Fri Nov 9 06:37:40 CET 2012


Revision: 52024
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52024
Author:   campbellbarton
Date:     2012-11-09 05:37:36 +0000 (Fri, 09 Nov 2012)
Log Message:
-----------
Option for shrink-fatten to maintain shell thickness (hold Alt).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-11-09 04:20:17 UTC (rev 52023)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-11-09 05:37:36 UTC (rev 52024)
@@ -1223,8 +1223,10 @@
 				break;
 			case LEFTALTKEY:
 			case RIGHTALTKEY:
-				if (t->spacetype == SPACE_SEQ)
+				if (ELEM(t->spacetype ,SPACE_SEQ, SPACE_VIEW3D)) {
 					t->flag |= T_ALT_TRANSFORM;
+					t->redraw |= TREDRAW_HARD;
+				}
 
 				break;
 			default:
@@ -1262,8 +1264,10 @@
 //			break;
 			case LEFTALTKEY:
 			case RIGHTALTKEY:
-				if (t->spacetype == SPACE_SEQ)
+				if (ELEM(t->spacetype, SPACE_SEQ, SPACE_VIEW3D)) {
 					t->flag &= ~T_ALT_TRANSFORM;
+					t->redraw |= TREDRAW_HARD;
+				}
 
 				break;
 			default:
@@ -3947,10 +3951,8 @@
 }
 
 
-
 int ShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
 {
-	float vec[3];
 	float distance;
 	int i;
 	char str[64];
@@ -3978,17 +3980,20 @@
 	t->values[0] = -distance;
 
 	for (i = 0; i < t->total; i++, td++) {
+		float tdistance;  /* temp dist */
 		if (td->flag & TD_NOACTION)
 			break;
 
 		if (td->flag & TD_SKIP)
 			continue;
 
-		copy_v3_v3(vec, td->axismtx[2]);
-		mul_v3_fl(vec, distance);
-		mul_v3_fl(vec, td->factor);
+		/* get the final offset */
+		tdistance = distance * td->factor;
+		if (td->ext && (t->flag & T_ALT_TRANSFORM)) {
+			tdistance *= td->ext->isize[0];  /* shell factor */
+		}
 
-		add_v3_v3v3(td->loc, td->iloc, vec);
+		madd_v3_v3v3fl(td->loc, td->iloc, td->axismtx[2], tdistance);
 	}
 
 	recalcData(t);

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-11-09 04:20:17 UTC (rev 52023)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-11-09 05:37:36 UTC (rev 52024)
@@ -1917,6 +1917,10 @@
 		tx->size = vs->radius;
 		td->val = vs->radius;
 	}
+	else if (t->mode == TFM_SHRINKFATTEN) {
+		td->ext = tx;
+		tx->isize[0] = BM_vert_calc_shell_factor(eve);
+	}
 }
 
 static void createTransEditVerts(TransInfo *t)
@@ -2029,7 +2033,11 @@
 	else t->total = countsel;
 
 	tob = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Mesh EditMode)");
-	if (t->mode == TFM_SKIN_RESIZE) {
+	if (ELEM(t->mode, TFM_SKIN_RESIZE, TFM_SHRINKFATTEN)) {
+		/* warning, this is overkill, we only need 2 extra floats,
+		 * but this stores loads of extra stuff, for TFM_SHRINKFATTEN its even more overkill
+		 * since we may not use the 'alt' transform mode to maintain shell thickness,
+		 * but with generic transform code its hard to lazy init vars */
 		tx = t->ext = MEM_callocN(t->total * sizeof(TransDataExtension),
 		                          "TransObData ext");
 	}




More information about the Bf-blender-cvs mailing list