[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