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;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to