[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26633] trunk/blender: Bugfix #20971: IK Joints Inexplicably Stiff In Recent Blender 2.5 Builds

Joshua Leung aligorith at gmail.com
Fri Feb 5 23:03:19 CET 2010


Revision: 26633
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26633
Author:   aligorith
Date:     2010-02-05 23:03:19 +0100 (Fri, 05 Feb 2010)

Log Message:
-----------
Bugfix #20971: IK Joints Inexplicably Stiff In Recent Blender 2.5 Builds

- IK-Solver interfaces were still converting units from degrees to radians. Made these all use radians now.

- Tried to fix the DOF limits drawing. This is still not totally functional again yet, but at least there are visible lines now.

Modified Paths:
--------------
    trunk/blender/intern/iksolver/intern/IK_QSegment.cpp
    trunk/blender/source/blender/editors/space_view3d/drawarmature.c

Modified: trunk/blender/intern/iksolver/intern/IK_QSegment.cpp
===================================================================
--- trunk/blender/intern/iksolver/intern/IK_QSegment.cpp	2010-02-05 21:23:07 UTC (rev 26632)
+++ trunk/blender/intern/iksolver/intern/IK_QSegment.cpp	2010-02-05 22:03:19 UTC (rev 26633)
@@ -368,21 +368,21 @@
 		return;
 	
 	if (axis == 1) {
-		lmin = MT_clamp(lmin, -180, 180);
-		lmax = MT_clamp(lmax, -180, 180);
+		lmin = MT_clamp(lmin, -M_PI, M_PI);
+		lmax = MT_clamp(lmax, -M_PI, M_PI);
 
-		m_min_y = MT_radians(lmin);
-		m_max_y = MT_radians(lmax);
+		m_min_y = lmin;
+		m_max_y = lmax;
 
 		m_limit_y = true;
 	}
 	else {
 		// clamp and convert to axis angle parameters
-		lmin = MT_clamp(lmin, -180, 180);
-		lmax = MT_clamp(lmax, -180, 180);
+		lmin = MT_clamp(lmin, -M_PI, M_PI);
+		lmax = MT_clamp(lmax, -M_PI, M_PI);
 
-		lmin = sin(MT_radians(lmin)*0.5);
-		lmax = sin(MT_radians(lmax)*0.5);
+		lmin = sin(lmin*0.5);
+		lmax = sin(lmax*0.5);
 
 		if (axis == 0) {
 			m_min[0] = -lmax;
@@ -611,11 +611,11 @@
 		return;
 	
 	// clamp and convert to axis angle parameters
-	lmin = MT_clamp(lmin, -180, 180);
-	lmax = MT_clamp(lmax, -180, 180);
+	lmin = MT_clamp(lmin, -M_PI, M_PI);
+	lmax = MT_clamp(lmax, -M_PI, M_PI);
 
-	m_min = MT_radians(lmin);
-	m_max = MT_radians(lmax);
+	m_min = lmin;
+	m_max = lmax;
 
 	m_limit = true;
 }
@@ -750,11 +750,11 @@
 		return;
 	
 	// clamp and convert to axis angle parameters
-	lmin = MT_clamp(lmin, -180, 180);
-	lmax = MT_clamp(lmax, -180, 180);
+	lmin = MT_clamp(lmin, -M_PI, M_PI);
+	lmax = MT_clamp(lmax, -M_PI, M_PI);
 
-	lmin = sin(MT_radians(lmin)*0.5);
-	lmax = sin(MT_radians(lmax)*0.5);
+	lmin = sin(lmin*0.5);
+	lmax = sin(lmax*0.5);
 
 	// put center of ellispe in the middle between min and max
 	MT_Scalar offset = 0.5*(lmin + lmax);
@@ -896,11 +896,11 @@
 		return;
 
 	// clamp and convert to axis angle parameters
-	lmin = MT_clamp(lmin, -180, 180);
-	lmax = MT_clamp(lmax, -180, 180);
+	lmin = MT_clamp(lmin, -M_PI, M_PI);
+	lmax = MT_clamp(lmax, -M_PI, M_PI);
 
-	lmin = MT_radians(lmin);
-	lmax = MT_radians(lmax);
+	lmin = lmin;
+	lmax = lmax;
 
 	if (axis == 1) {
 		m_min_twist = lmin;

Modified: trunk/blender/source/blender/editors/space_view3d/drawarmature.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawarmature.c	2010-02-05 21:23:07 UTC (rev 26632)
+++ trunk/blender/source/blender/editors/space_view3d/drawarmature.c	2010-02-05 22:03:19 UTC (rev 26633)
@@ -1479,8 +1479,8 @@
 									float amin[3], amax[3];
 									
 									for (i=0; i<3; i++) {
-										amin[i]= (float)sin(pchan->limitmin[i]*M_PI/360.0);
-										amax[i]= (float)sin(pchan->limitmax[i]*M_PI/360.0);
+										amin[i]= (float)sin(pchan->limitmin[i]);
+										amax[i]= (float)sin(pchan->limitmax[i]);
 									}
 									
 									glScalef(1.0f, -1.0f, 1.0f);
@@ -1498,7 +1498,7 @@
 							
 							/* arcs */
 							if (pchan->ikflag & BONE_IK_ZLIMIT) {
-								theta= 0.5f*(pchan->limitmin[2]+pchan->limitmax[2]);
+								theta= 0.5f*(pchan->limitmin[2]+pchan->limitmax[2]) * (float)(180.0f/M_PI);
 								glRotatef(theta, 0.0f, 0.0f, 1.0f);
 								
 								glColor3ub(50, 50, 255);	// blue, Z axis limit
@@ -1506,7 +1506,7 @@
 								for (a=-16; a<=16; a++) {
 									float fac= ((float)a)/16.0f;
 									
-									phi= fac * (float)(M_PI/360.0f) * (pchan->limitmax[2] - pchan->limitmin[2]);
+									phi= fac * (pchan->limitmax[2] - pchan->limitmin[2]);
 									
 									i= (a == -16) ? 0 : 1;
 									corner[i][0]= (float)sin(phi);
@@ -1520,14 +1520,14 @@
 							}					
 							
 							if (pchan->ikflag & BONE_IK_XLIMIT) {
-								theta= 0.5f * (pchan->limitmin[0] + pchan->limitmax[0]);
+								theta= 0.5f * (pchan->limitmin[0] + pchan->limitmax[0]) * (float)(180.0f/M_PI);
 								glRotatef(theta, 1.0f, 0.0f, 0.0f);
 								
 								glColor3ub(255, 50, 50);	// Red, X axis limit
 								glBegin(GL_LINE_STRIP);
 								for (a=-16; a<=16; a++) {
 									float fac= ((float)a)/16.0f;
-									phi= (float)(0.5*M_PI) + fac * (float)(M_PI/360.0f) * (pchan->limitmax[0] - pchan->limitmin[0]);
+									phi= (float)(0.5*M_PI) + fac * (pchan->limitmax[0] - pchan->limitmin[0]);
 									
 									i= (a == -16) ? 2 : 3;
 									corner[i][0]= 0.0f;





More information about the Bf-blender-cvs mailing list