[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13529] trunk/blender/source/blender/src: == Transform Snap ==

Martin Poirier theeth at yahoo.com
Sun Feb 3 01:42:00 CET 2008


Revision: 13529
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13529
Author:   theeth
Date:     2008-02-03 01:42:00 +0100 (Sun, 03 Feb 2008)

Log Message:
-----------
== Transform Snap ==

Snapping for Resize
First draft, there might be some things to iron out.

Minor terminology fixes in CTO (custom transform orientation).

Modified Paths:
--------------
    trunk/blender/source/blender/src/transform.c
    trunk/blender/source/blender/src/transform_snap.c

Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c	2008-02-02 23:58:05 UTC (rev 13528)
+++ trunk/blender/source/blender/src/transform.c	2008-02-03 00:42:00 UTC (rev 13529)
@@ -193,10 +193,10 @@
 		return -1;
 
 	if (confirm == 0) {
-		if (set && pupmenu("Custom Space %t|Add and Use Active Object%x1") != 1) {
+		if (set && pupmenu("Custom Orientation %t|Add and Use Active Object%x1") != 1) {
 			return -1;
 		}
-		else if (set == 0 && pupmenu("Custom Space %t|Add Active Object%x1") != 1) {
+		else if (set == 0 && pupmenu("Custom Orientation %t|Add Active Object%x1") != 1) {
 			return -1;
 		}
 	}
@@ -210,10 +210,10 @@
 	char menu[64];
 	
 	if (set) {
-		sprintf(menu, "Custom Space %%t|Add and Use %s%%x1", text);
+		sprintf(menu, "Custom Orientation %%t|Add and Use %s%%x1", text);
 	}
 	else {
-		sprintf(menu, "Custom Space %%t|Add %s%%x1", text);
+		sprintf(menu, "Custom Orientation %%t|Add %s%%x1", text);
 	}
 	
 	if (pupmenu(menu) == 1) {
@@ -2626,6 +2626,8 @@
 		constraintNumInput(t, size);
 	}
 
+	applySnapping(t, size);
+
 	SizeToMat3(size, mat);
 
 	if (t->con.applySize) {

Modified: trunk/blender/source/blender/src/transform_snap.c
===================================================================
--- trunk/blender/source/blender/src/transform_snap.c	2008-02-02 23:58:05 UTC (rev 13528)
+++ trunk/blender/source/blender/src/transform_snap.c	2008-02-03 00:42:00 UTC (rev 13529)
@@ -78,6 +78,7 @@
 
 void ApplySnapTranslation(TransInfo *t, float vec[3]);
 void ApplySnapRotation(TransInfo *t, float *vec);
+void ApplySnapResize(TransInfo *t, float *vec);
 
 void CalcSnapGrid(TransInfo *t, float *vec);
 void CalcSnapGeometry(TransInfo *t, float *vec);
@@ -89,6 +90,7 @@
 
 float RotationBetween(TransInfo *t, float p1[3], float p2[3]);
 float TranslationBetween(TransInfo *t, float p1[3], float p2[3]);
+float ResizeBetween(TransInfo *t, float p1[3], float p2[3]);
 
 /* Modes */
 #define NOT_SELECTED 0
@@ -303,6 +305,16 @@
 			t->tsnap.targetSnap = TargetSnapMedian;
 		}
 		break;
+	case TFM_RESIZE:
+		t->tsnap.applySnap = ApplySnapResize;
+		t->tsnap.distance = ResizeBetween;
+		
+		// Can't do TARGET_CENTER with resize, use TARGET_MEDIAN instead
+		if (G.scene->snap_target == SCE_SNAP_TARGET_CENTER) {
+			t->tsnap.modeTarget = SNAP_MEDIAN;
+			t->tsnap.targetSnap = TargetSnapMedian;
+		}
+		break;
 	default:
 		t->tsnap.applySnap = NULL;
 		break;
@@ -326,6 +338,15 @@
 	}
 }
 
+void ApplySnapResize(TransInfo *t, float vec[3])
+{
+	if (t->tsnap.modeTarget == SNAP_CLOSEST) {
+		vec[0] = vec[1] = vec[2] = t->tsnap.dist;
+	}
+	else {
+		vec[0] = vec[1] = vec[2] = ResizeBetween(t, t->tsnap.snapTarget, t->tsnap.snapPoint);
+	}
+}
 
 /********************** DISTANCE **************************/
 
@@ -390,6 +411,29 @@
 	return angle;
 }
 
+float ResizeBetween(TransInfo *t, float p1[3], float p2[3])
+{
+	float d1[3], d2[3], center[3];
+	
+	VECCOPY(center, t->center);	
+	if(t->flag & (T_EDIT|T_POSE)) {
+		Object *ob= G.obedit?G.obedit:t->poseobj;
+		Mat4MulVecfl(ob->obmat, center);
+	}
+
+	VecSubf(d1, p1, center);
+	VecSubf(d2, p2, center);
+	
+	if (t->con.applyRot != NULL && (t->con.mode & CON_APPLY)) {
+		float tmp[3];
+		
+		t->con.applyVec(t, NULL, d1, d1, tmp);
+		t->con.applyVec(t, NULL, d2, d2, tmp);
+	}
+	
+	return VecLength(d2) / VecLength(d1);
+}
+
 /********************** CALC **************************/
 
 void CalcSnapGrid(TransInfo *t, float *vec)





More information about the Bf-blender-cvs mailing list