diff options
| author | Alvin Penner <penner@vaxxine.com> | 2013-11-02 13:04:00 +0000 |
|---|---|---|
| committer | apenner <penner@vaxxine.com> | 2013-11-02 13:04:00 +0000 |
| commit | 90bb2311a8e87439c8ae845fcf22755e40030d1d (patch) | |
| tree | 93ded2fd5aa7b188ef254a90e40cfef4387e7e06 /src/livarot/PathConversion.cpp | |
| parent | improve clang-format settings (diff) | |
| download | inkscape-90bb2311a8e87439c8ae845fcf22755e40030d1d.tar.gz inkscape-90bb2311a8e87439c8ae845fcf22755e40030d1d.zip | |
more conversions from radians to degrees for arcs (Bug 1239462)
Fixed bugs:
- https://launchpad.net/bugs/1239462
(bzr r12763)
Diffstat (limited to 'src/livarot/PathConversion.cpp')
| -rw-r--r-- | src/livarot/PathConversion.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/livarot/PathConversion.cpp b/src/livarot/PathConversion.cpp index 6fa0c166f..42df898e6 100644 --- a/src/livarot/PathConversion.cpp +++ b/src/livarot/PathConversion.cpp @@ -1076,13 +1076,14 @@ void Path::DoArc(Geom::Point const &iS, Geom::Point const &iE, double sang; double eang; Geom::Point dr_temp; - ArcAnglesAndCenter(iS, iE, rx, ry, angle, large, wise, sang, eang, dr_temp); + ArcAnglesAndCenter(iS, iE, rx, ry, angle*M_PI/180.0, large, wise, sang, eang, dr_temp); Geom::Point dr = dr_temp; /* TODO: This isn't as good numerically as treating iS and iE as primary. E.g. consider the case of low curvature (i.e. very large radius). */ Geom::Scale const ar(rx, ry); - Geom::Rotate cb(angle + sang); + Geom::Rotate cb(sang); + Geom::Rotate cbangle(angle*M_PI/180.0); if (wise) { double const incr = -0.1; @@ -1092,7 +1093,7 @@ void Path::DoArc(Geom::Point const &iS, Geom::Point const &iE, Geom::Rotate const omega(incr); for (double b = sang + incr; b > eang ;b += incr) { cb = omega * cb; - AddPoint(cb.vector() * ar + dr, piece, (sang - b) / (sang - eang)); + AddPoint(cb.vector() * ar * cbangle + dr, piece, (sang - b) / (sang - eang)); } } else { @@ -1103,7 +1104,7 @@ void Path::DoArc(Geom::Point const &iS, Geom::Point const &iE, Geom::Rotate const omega(incr); for (double b = sang + incr ; b < eang ; b += incr) { cb = omega * cb; - AddPoint(cb.vector() * ar + dr, piece, (b - sang) / (eang - sang)); + AddPoint(cb.vector() * ar * cbangle + dr, piece, (b - sang) / (eang - sang)); } } } |
