[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14037] trunk/blender/source/blender: == Align to Transform Orientation ==

Martin Poirier theeth at yahoo.com
Mon Mar 10 01:27:19 CET 2008


Revision: 14037
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14037
Author:   theeth
Date:     2008-03-10 01:27:17 +0100 (Mon, 10 Mar 2008)

Log Message:
-----------
== Align to Transform Orientation ==

New rotation alignement fonction

Rotates objects/Pose bones to match the selected transform orientation.

Can be used to align to view, active object (normal) and custom transform orientations.

Accessible in the Object -> Transform submenu and through the hotkey Ctrl-Alt-A (which was previously a fall through for Apply but only Ctrl-A and Ctrl-Shift-A did anything special).

Can be eventually made to work in edit mode (not too hard).

Modified Paths:
--------------
    trunk/blender/source/blender/include/BIF_transform.h
    trunk/blender/source/blender/include/transform.h
    trunk/blender/source/blender/src/header_view3d.c
    trunk/blender/source/blender/src/space.c
    trunk/blender/source/blender/src/transform.c

Modified: trunk/blender/source/blender/include/BIF_transform.h
===================================================================
--- trunk/blender/source/blender/include/BIF_transform.h	2008-03-09 22:55:49 UTC (rev 14036)
+++ trunk/blender/source/blender/include/BIF_transform.h	2008-03-10 00:27:17 UTC (rev 14037)
@@ -62,6 +62,7 @@
 #define TFM_BAKE_TIME		23
 #define TFM_BEVEL			24
 #define TFM_BWEIGHT			25
+#define TFM_ALIGN			26
 
 /* TRANSFORM CONTEXTS */
 #define CTX_NONE			0

Modified: trunk/blender/source/blender/include/transform.h
===================================================================
--- trunk/blender/source/blender/include/transform.h	2008-03-09 22:55:49 UTC (rev 14036)
+++ trunk/blender/source/blender/include/transform.h	2008-03-10 00:27:17 UTC (rev 14037)
@@ -373,6 +373,9 @@
 void initMirror(TransInfo *t);
 int Mirror(TransInfo *t, short mval[2]);
 
+void initAlign(TransInfo *t);
+int Align(TransInfo *t, short mval[2]);
+
 /*********************** transform_conversions.c ********** */
 struct ListBase;
 void flushTransIpoData(TransInfo *t);

Modified: trunk/blender/source/blender/src/header_view3d.c
===================================================================
--- trunk/blender/source/blender/src/header_view3d.c	2008-03-09 22:55:49 UTC (rev 14036)
+++ trunk/blender/source/blender/src/header_view3d.c	2008-03-10 00:27:17 UTC (rev 14037)
@@ -1786,6 +1786,10 @@
 	case 20:
 		G.scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
 		break;
+	case 21:
+		initTransform(TFM_ALIGN, CTX_NO_PET|CTX_AUTOCONFIRM);
+		Transform();
+		break;
 	}
 	allqueue(REDRAWVIEW3D, 0);
 }
@@ -1835,6 +1839,7 @@
 	if (!G.obedit) {
 		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
 		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
+		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align to Transform Orientation", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
 	}
 	
 	if (BIF_snappingSupported())

Modified: trunk/blender/source/blender/src/space.c
===================================================================
--- trunk/blender/source/blender/src/space.c	2008-03-09 22:55:49 UTC (rev 14036)
+++ trunk/blender/source/blender/src/space.c	2008-03-10 00:27:17 UTC (rev 14037)
@@ -1743,7 +1743,15 @@
 				break;
 				
 			case AKEY:
-				if(G.qual & LR_CTRLKEY) apply_object();	/* also with shift! */
+				if (G.obedit == 0 && G.qual == (LR_CTRLKEY|LR_ALTKEY)) {
+					if(okee("Align to Transform Orientation")) {
+						initTransform(TFM_ALIGN, CTX_NO_PET|CTX_AUTOCONFIRM);
+						Transform();
+					}
+				}
+				else if(G.qual & LR_CTRLKEY) { /* also with shift! */
+					apply_object();	
+				}
 				else if((G.qual==LR_SHIFTKEY)) {
 					toolbox_n_add();
 				}

Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c	2008-03-09 22:55:49 UTC (rev 14036)
+++ trunk/blender/source/blender/src/transform.c	2008-03-10 00:27:17 UTC (rev 14037)
@@ -943,6 +943,7 @@
 	if(Trans.spacetype==SPACE_VIEW3D) {
 		calc_manipulator_stats(curarea);
 		Mat3CpyMat4(Trans.spacemtx, G.vd->twmat);
+		Mat3Ortho(Trans.spacemtx);
 	}
 	else
 		Mat3One(Trans.spacemtx);
@@ -1041,6 +1042,9 @@
 	case TFM_BWEIGHT:
 		initBevelWeight(&Trans);
 		break;
+	case TFM_ALIGN:
+		initAlign(&Trans);
+		break;
 	}
 }
 
@@ -4024,6 +4028,61 @@
 	return 1;
 }
 
+/* ************************** ALIGN *************************** */
+
+void initAlign(TransInfo *t) 
+{
+	t->flag |= T_NO_CONSTRAINT;
+	
+	t->transform = Align;
+}
+
+int Align(TransInfo *t, short mval[2])
+{
+	TransData *td = t->data;
+	float center[3];
+	int i;
+
+	/* saving original center */
+	VECCOPY(center, t->center);
+
+	for(i = 0 ; i < t->total; i++, td++)
+	{
+		float mat[3][3], invmat[3][3];
+		
+		if (td->flag & TD_NOACTION)
+			break;
+
+		if (td->flag & TD_SKIP)
+			continue;
+		
+		/* around local centers */
+		if (t->flag & (T_OBJECT|T_POSE)) {
+			VECCOPY(t->center, td->center);
+		}
+		else {
+			if(G.scene->selectmode & SCE_SELECT_FACE) {
+				VECCOPY(t->center, td->center);
+			}
+		}
+
+		Mat3Inv(invmat, td->axismtx);
+		
+		Mat3MulMat3(mat, t->spacemtx, invmat);	
+
+		ElementRotation(t, td, mat);
+	}
+
+	/* restoring original center */
+	VECCOPY(t->center, center);
+		
+	recalcData(t);
+
+	headerprint("Align");
+	
+	return 1;
+}
+
 /* ************************** ANIM EDITORS - TRANSFORM TOOLS *************************** */
 
 /* ---------------- Special Helpers for Various Settings ------------- */





More information about the Bf-blender-cvs mailing list