diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-02-02 21:24:36 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-02-02 21:24:36 +0000 |
| commit | 53933f5fea9d07d1ba6304b88439fba257ee8c34 (patch) | |
| tree | 21f94cd05346fc1236751bb1db3e0850e5aece54 /src/2geom/ellipse.cpp | |
| parent | Translations. French translation minor update. (diff) | |
| download | inkscape-53933f5fea9d07d1ba6304b88439fba257ee8c34.tar.gz inkscape-53933f5fea9d07d1ba6304b88439fba257ee8c34.zip | |
update to latest 2geom !
(bzr r10025)
Diffstat (limited to 'src/2geom/ellipse.cpp')
| -rw-r--r-- | src/2geom/ellipse.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/2geom/ellipse.cpp b/src/2geom/ellipse.cpp index 8030ea517..bea99e5dd 100644 --- a/src/2geom/ellipse.cpp +++ b/src/2geom/ellipse.cpp @@ -170,7 +170,7 @@ void Ellipse::set(std::vector<Point> const& points) } -SVGEllipticalArc +EllipticalArc * Ellipse::arc(Point const& initial, Point const& inner, Point const& final, bool _svg_compliant) { @@ -212,21 +212,27 @@ Ellipse::arc(Point const& initial, Point const& inner, Point const& final, } } - SVGEllipticalArc ea( initial, ray(X), ray(Y), rot_angle(), - large_arc_flag, sweep_flag, final, _svg_compliant); - return ea; + EllipticalArc *ret_arc; + if (_svg_compliant) { + ret_arc = new SVGEllipticalArc(initial, ray(X), ray(Y), rot_angle(), + large_arc_flag, sweep_flag, final); + } else { + ret_arc = new EllipticalArc(initial, ray(X), ray(Y), rot_angle(), + large_arc_flag, sweep_flag, final); + } + return ret_arc; } -Ellipse Ellipse::transformed(Matrix const& m) const +Ellipse Ellipse::transformed(Affine const& m) const { double cosrot = std::cos(rot_angle()); double sinrot = std::sin(rot_angle()); - Matrix A( ray(X) * cosrot, ray(X) * sinrot, + Affine A( ray(X) * cosrot, ray(X) * sinrot, -ray(Y) * sinrot, ray(Y) * cosrot, 0, 0 ); Point new_center = center() * m; - Matrix M = m.without_translation(); - Matrix AM = A * M; + Affine M = m.withoutTranslation(); + Affine AM = A * M; if ( are_near(AM.det(), 0) ) { double angle; @@ -250,11 +256,11 @@ Ellipse Ellipse::transformed(Matrix const& m) const } std::vector<double> coeff = implicit_form_coefficients(); - Matrix Q( coeff[0], coeff[1]/2, + Affine Q( coeff[0], coeff[1]/2, coeff[1]/2, coeff[2], 0, 0 ); - Matrix invm = M.inverse(); + Affine invm = M.inverse(); Q = invm * Q ; std::swap( invm[1], invm[2] ); Q *= invm; |
