diff options
| author | Martin Owens <doctormo@gmail.com> | 2014-03-27 01:33:44 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2014-03-27 01:33:44 +0000 |
| commit | 5a4fb2325f60d292b47330f540b26a3279341c90 (patch) | |
| tree | d2aa7967be25450b83e625025366c618101ae49f /src/livarot/PathConversion.cpp | |
| parent | The Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff) | |
| parent | Remove Snap menu item and improve grid menu item text (diff) | |
| download | inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.tar.gz inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.zip | |
Commit a merge to trunk, with probabal errors
(bzr r11073.1.36)
Diffstat (limited to 'src/livarot/PathConversion.cpp')
| -rw-r--r-- | src/livarot/PathConversion.cpp | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/src/livarot/PathConversion.cpp b/src/livarot/PathConversion.cpp index ed5f03f80..42df898e6 100644 --- a/src/livarot/PathConversion.cpp +++ b/src/livarot/PathConversion.cpp @@ -119,15 +119,12 @@ void Path::ConvertWithBackData(double treshhold) if ( nbInterm >= 1 ) { Geom::Point bx = curX; - Geom::Point cx = curX; - Geom::Point dx = curX; + Geom::Point dx = nData->p; + Geom::Point cx = 2 * bx - dx; - dx = nData->p; ip++; nData = dynamic_cast<PathDescrIntermBezierTo *>(descr_cmd[ip]); - cx = 2 * bx - dx; - for (int k = 0; k < nbInterm - 1; k++) { bx = cx; cx = dx; @@ -323,15 +320,12 @@ void Path::Convert(double treshhold) RecBezierTo(midX, curX, nextX, treshhold, 8); } else if ( nbInterm > 1 ) { Geom::Point bx = curX; - Geom::Point cx = curX; - Geom::Point dx = curX; + Geom::Point dx = nData->p; + Geom::Point cx = 2 * bx - dx; - dx = nData->p; ip++; nData = dynamic_cast<PathDescrIntermBezierTo *>(descr_cmd[ip]); - cx = 2 * bx - dx; - for (int k = 0; k < nbInterm - 1; k++) { bx = cx; cx = dx; @@ -565,15 +559,12 @@ void Path::ConvertEvenLines(double treshhold) RecBezierTo(midX, curX, nextX, treshhold, 8, 4 * treshhold); } else if ( nbInterm > 1 ) { Geom::Point bx = curX; - Geom::Point cx = curX; - Geom::Point dx = curX; + Geom::Point dx = nData->p; + Geom::Point cx = 2 * bx - dx; - dx = nData->p; ip++; nData = dynamic_cast<PathDescrIntermBezierTo *>(descr_cmd[ip]); - cx = 2 * bx - dx; - for (int k = 0; k < nbInterm - 1; k++) { bx = cx; cx = dx; @@ -822,13 +813,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; @@ -838,7 +830,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 ); + AddPoint( cb.vector() * ar * cbangle + dr ); } } else { @@ -850,7 +842,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); + AddPoint( cb.vector() * ar * cbangle + dr); } } } @@ -965,13 +957,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; @@ -981,7 +974,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 { @@ -993,7 +986,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)); } } } @@ -1083,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; @@ -1099,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 { @@ -1110,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)); } } } |
