[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15175] trunk/blender/source/blender/src/ transform.c: PATCH: [#13656] Bad rotation computing for manual rotation higher than 180 degrees

Martin Poirier theeth at yahoo.com
Mon Jun 9 18:54:54 CEST 2008


Revision: 15175
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15175
Author:   theeth
Date:     2008-06-09 18:54:54 +0200 (Mon, 09 Jun 2008)

Log Message:
-----------
PATCH: [#13656] Bad rotation computing for manual rotation higher than 180 degrees

By Fabrice Tiercelin

This enables rotation angles of more than 180 degrees to result in the same rotation applied to the object (the result used to be clamps between -180 - 180 of the initial rotation).

The patch had to be modified to deal with IPO keys properly

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

Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c	2008-06-09 16:49:33 UTC (rev 15174)
+++ trunk/blender/source/blender/src/transform.c	2008-06-09 16:54:54 UTC (rev 15175)
@@ -2530,15 +2530,22 @@
 				/* are there ipo keys? */
 				if(td->tdi) {
 					TransDataIpokey *tdi= td->tdi;
+					float current_rot[3];
 					float rot[3];
 					
+					/* current IPO value for compatible euler */
+					current_rot[0] = tdi->rotx[0];
+					current_rot[1] = tdi->roty[0];
+					current_rot[2] = tdi->rotz[0];
+					VecMulf(current_rot, (float)(M_PI_2 / 9.0));
+					
 					/* calculate the total rotatation in eulers */
 					VecAddf(eul, td->ext->irot, td->ext->drot);
 					EulToMat3(eul, obmat);
 					/* mat = transform, obmat = object rotation */
 					Mat3MulMat3(fmat, mat, obmat);
 					
-					Mat3ToCompatibleEul(fmat, eul, td->ext->irot);
+					Mat3ToCompatibleEul(fmat, eul, current_rot);
 					
 					/* correct back for delta rot */
 					if(tdi->flag & TOB_IPODROT) {
@@ -2567,7 +2574,7 @@
 					/* mat = transform, obmat = object rotation */
 					Mat3MulMat3(fmat, smat, obmat);
 					
-					Mat3ToCompatibleEul(fmat, eul, td->ext->irot);
+					Mat3ToCompatibleEul(fmat, eul, td->ext->rot);
 					
 					/* correct back for delta rot */
 					VecSubf(eul, eul, td->ext->drot);





More information about the Bf-blender-cvs mailing list