Write a proper definition for ValueNode_BLine::create_new().
[synfig.git] / synfig-core / trunk / src / synfig / valuenode_bline.cpp
index 49e9cb5..4f0b923 100644 (file)
@@ -79,7 +79,12 @@ radial_interpolation(const Vector& a, const Vector& b, float c)
        affine_combo<Angle,float> ang_combo;
 
        Real mag(mag_combo(a.mag(),b.mag(),c));
-       Angle ang(ang_combo(Angle::tan(a[1],a[0]),Angle::tan(b[1],b[0]),c));
+       Angle angle_a(Angle::tan(a[1],a[0]));
+       Angle angle_b(Angle::tan(b[1],b[0]));
+       float diff = Angle::deg(angle_b - angle_a).get();
+       if (diff < -180) angle_b += Angle::deg(360);
+       else if (diff > 180) angle_a += Angle::deg(360);
+       Angle ang(ang_combo(angle_a, angle_b, c));
 
        return Point( mag*Angle::cos(ang).get(),mag*Angle::sin(ang).get() );
 }
@@ -257,7 +262,7 @@ synfig::find_closest_point(const ValueBase &bline, const Point &pos, Real &radiu
                {
                        closest = d;
                        best_time = time;
-                       best_index = i;
+                       best_index = 0;
                        best_point = curve(best_time);
                }
        }
@@ -853,8 +858,7 @@ ValueNode_BLine::get_local_name()const
 LinkableValueNode*
 ValueNode_BLine::create_new()const
 {
-       assert(0);
-       return 0;
+       return new ValueNode_BLine();
 }
 
 bool