[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