From 4dcb4eb2b2f020f90b8bc66b198a7e7414690da6 Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Sat, 14 Sep 2013 18:34:53 +0200 Subject: [PATCH] When creating a new entry in a BLine, make the tangents the adequate to fit the shape. It needs two extra actions to update adjacent BLinepoint tangents. --- synfig-core/src/synfig/valuenode_bline.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/synfig-core/src/synfig/valuenode_bline.cpp b/synfig-core/src/synfig/valuenode_bline.cpp index 0dc6eb2008a..d4a72f2b260 100644 --- a/synfig-core/src/synfig/valuenode_bline.cpp +++ b/synfig-core/src/synfig/valuenode_bline.cpp @@ -606,12 +606,15 @@ ValueNode_BLine::create_list_entry(int index, Time time, Real origin) next=(*list[next_i].value_node)(time); prev=(*list[prev_i].value_node)(time); etl::hermite curve(prev.get_vertex(),next.get_vertex(),prev.get_tangent2(),next.get_tangent1()); - etl::derivative< etl::hermite > deriv(curve); - bline_point.set_vertex(curve(origin)); + etl::hermite left; + etl::hermite right; + curve.subdivide(&left, &right, origin); + bline_point.set_vertex(left[3]); bline_point.set_width((next.get_width()-prev.get_width())*origin+prev.get_width()); - bline_point.set_tangent1(deriv(origin)*min(1.0-origin,origin)); - bline_point.set_tangent2(bline_point.get_tangent1()); - bline_point.set_split_tangent_both(false); + bline_point.set_split_tangent_radius(true); + bline_point.set_split_tangent_angle(false); + bline_point.set_tangent1((left[2]-left[3])*-3); + bline_point.set_tangent2((right[1]-right[0])*3); bline_point.set_origin(origin); } ret.index=index;