From 1ea6b68442a7e0df11e12e74a3b2ffc15640a797 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sat, 24 Mar 2012 22:52:32 +0100 Subject: powerstroke: spiro join: more robust detection of tangent direction. fixes incorrect rounding for some paths. (bzr r11129) --- src/live_effects/lpe-powerstroke.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/live_effects/lpe-powerstroke.cpp b/src/live_effects/lpe-powerstroke.cpp index 678b5cc67..d3843dc92 100644 --- a/src/live_effects/lpe-powerstroke.cpp +++ b/src/live_effects/lpe-powerstroke.cpp @@ -5,7 +5,7 @@ /* Authors: * Johan Engelen * - * Copyright (C) 2010-2011 Authors + * Copyright (C) 2010-2012 Authors * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -388,9 +388,13 @@ Geom::Path path_from_piecewise_fix_cusps( Geom::Piecewise Geom::Point tang1 = unitTangentAt(B[prev_i],1); Geom::Point tang2 = unitTangentAt(B[i],0); + Geom::Point direction = B[i].at0() - B[prev_i].at1(); + double tang1_sign = dot(direction,tang1); + double tang2_sign = dot(direction,tang2); + Spiro::spiro_cp *controlpoints = g_new (Spiro::spiro_cp, 4); - controlpoints[0].x = (B[prev_i].at1() - sign*cusp.width*tang1)[Geom::X]; - controlpoints[0].y = (B[prev_i].at1() - sign*cusp.width*tang1)[Geom::Y]; + controlpoints[0].x = (B[prev_i].at1() - tang1_sign*tang1)[Geom::X]; + controlpoints[0].y = (B[prev_i].at1() - tang1_sign*tang1)[Geom::Y]; controlpoints[0].ty = '{'; controlpoints[1].x = B[prev_i].at1()[Geom::X]; controlpoints[1].y = B[prev_i].at1()[Geom::Y]; @@ -398,8 +402,8 @@ Geom::Path path_from_piecewise_fix_cusps( Geom::Piecewise controlpoints[2].x = B[i].at0()[Geom::X]; controlpoints[2].y = B[i].at0()[Geom::Y]; controlpoints[2].ty = '['; - controlpoints[3].x = (B[i].at0() + sign*cusp.width*tang2)[Geom::X]; - controlpoints[3].y = (B[i].at0() + sign*cusp.width*tang2)[Geom::Y]; + controlpoints[3].x = (B[i].at0() + tang2_sign*tang2)[Geom::X]; + controlpoints[3].y = (B[i].at0() + tang2_sign*tang2)[Geom::Y]; controlpoints[3].ty = '}'; Geom::Path spiro; -- cgit v1.2.3