[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38256] trunk/blender/source/blender/ blenkernel/intern/curve.c: Fox #27866: Curve handle snaps/ locks when it shouldnt

Sergey Sharybin g.ulairi at gmail.com
Sat Jul 9 16:22:53 CEST 2011


Revision: 38256
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38256
Author:   nazgul
Date:     2011-07-09 14:22:52 +0000 (Sat, 09 Jul 2011)
Log Message:
-----------
Fox #27866: Curve handle snaps/locks when it shouldnt

It was a precision error in calchandleNurb. Do not align handles
along handle which si too short.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/curve.c

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2011-07-09 10:43:22 UTC (rev 38255)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2011-07-09 14:22:52 UTC (rev 38256)
@@ -2431,6 +2431,7 @@
 {
 	float *p1,*p2,*p3, pt[3];
 	float dx1,dy1,dz1,dx,dy,dz,vx,vy,vz,len,len1,len2;
+	const float eps= 1e-5;
 
 	if(bezt->h1==0 && bezt->h2==0) return;
 
@@ -2587,30 +2588,38 @@
 
 	if(bezt->f1 & SELECT) { /* order of calculation */
 		if(bezt->h2==HD_ALIGN) {	/* aligned */
-			len= len2/len1;
-			p2[3]= p2[0]+len*(p2[0]-p2[-3]);
-			p2[4]= p2[1]+len*(p2[1]-p2[-2]);
-			p2[5]= p2[2]+len*(p2[2]-p2[-1]);
+			if(len1>eps) {
+				len= len2/len1;
+				p2[3]= p2[0]+len*(p2[0]-p2[-3]);
+				p2[4]= p2[1]+len*(p2[1]-p2[-2]);
+				p2[5]= p2[2]+len*(p2[2]-p2[-1]);
+			}
 		}
 		if(bezt->h1==HD_ALIGN) {
-			len= len1/len2;
-			p2[-3]= p2[0]+len*(p2[0]-p2[3]);
-			p2[-2]= p2[1]+len*(p2[1]-p2[4]);
-			p2[-1]= p2[2]+len*(p2[2]-p2[5]);
+			if(len2>eps) {
+				len= len1/len2;
+				p2[-3]= p2[0]+len*(p2[0]-p2[3]);
+				p2[-2]= p2[1]+len*(p2[1]-p2[4]);
+				p2[-1]= p2[2]+len*(p2[2]-p2[5]);
+			}
 		}
 	}
 	else {
 		if(bezt->h1==HD_ALIGN) {
-			len= len1/len2;
-			p2[-3]= p2[0]+len*(p2[0]-p2[3]);
-			p2[-2]= p2[1]+len*(p2[1]-p2[4]);
-			p2[-1]= p2[2]+len*(p2[2]-p2[5]);
+			if(len2>eps) {
+				len= len1/len2;
+				p2[-3]= p2[0]+len*(p2[0]-p2[3]);
+				p2[-2]= p2[1]+len*(p2[1]-p2[4]);
+				p2[-1]= p2[2]+len*(p2[2]-p2[5]);
+			}
 		}
 		if(bezt->h2==HD_ALIGN) {	/* aligned */
-			len= len2/len1;
-			p2[3]= p2[0]+len*(p2[0]-p2[-3]);
-			p2[4]= p2[1]+len*(p2[1]-p2[-2]);
-			p2[5]= p2[2]+len*(p2[2]-p2[-1]);
+			if(len1>eps) {
+				len= len2/len1;
+				p2[3]= p2[0]+len*(p2[0]-p2[-3]);
+				p2[4]= p2[1]+len*(p2[1]-p2[-2]);
+				p2[5]= p2[2]+len*(p2[2]-p2[-1]);
+			}
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list