summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2016-05-16 22:25:15 +0900
committerTomaž Vajngerl <quikee@gmail.com>2016-05-17 11:31:43 +0000
commit37ed508022e0be8b793caa4748cfee634c1c8a9c (patch)
treec5ecb5752b528df4a6dc7af69d55313cdb1a2ffe
parentf935bf47d1928f3b4df9cde600ce365cd63e485d (diff)
tdf#99130 use subdivision on B2DPolygon, angle based subdivision
Remove the subdivider we used until now as there is a better way to subdivide a polygon with getDefaultAdaptiveSubdivision, which in additiona also caches the result. The subdivider used in getDefaultAdaptiveSubdivision was a limited count based subdivider so this exchanges that with an angle based one which gives much better results. Change-Id: I95c009ccf3d54305df0d8eef177cab0df0a23bea Reviewed-on: https://gerrit.libreoffice.org/25033 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r--basegfx/source/polygon/b2dlinegeometry.cxx29
-rw-r--r--basegfx/source/polygon/b2dpolygon.cxx2
-rw-r--r--include/basegfx/polygon/b2dlinegeometry.hxx5
-rw-r--r--vcl/opengl/gdiimpl.cxx4
4 files changed, 2 insertions, 38 deletions
diff --git a/basegfx/source/polygon/b2dlinegeometry.cxx b/basegfx/source/polygon/b2dlinegeometry.cxx
index 2177ff45fb5f..799604f37014 100644
--- a/basegfx/source/polygon/b2dlinegeometry.cxx
+++ b/basegfx/source/polygon/b2dlinegeometry.cxx
@@ -779,35 +779,6 @@ namespace basegfx
namespace tools
{
- B2DPolygon polygonSubdivide(const B2DPolygon& rCandidate, double fMaxAllowedAngle, double fMaxPartOfEdge)
- {
- if(fMaxAllowedAngle > F_PI2)
- {
- fMaxAllowedAngle = F_PI2;
- }
- else if(fMaxAllowedAngle < 0.01 * F_PI2)
- {
- fMaxAllowedAngle = 0.01 * F_PI2;
- }
-
- if(fMaxPartOfEdge > 1.0)
- {
- fMaxPartOfEdge = 1.0;
- }
- else if(fMaxPartOfEdge < 0.01)
- {
- fMaxPartOfEdge = 0.01;
- }
-
- B2DPolygon aCandidate(rCandidate);
- const double fMaxCos(cos(fMaxAllowedAngle));
-
- aCandidate.removeDoublePoints();
- aCandidate = subdivideToSimple(aCandidate, fMaxCos * fMaxCos, fMaxPartOfEdge * fMaxPartOfEdge);
-
- return aCandidate;
- }
-
B2DPolyPolygon createAreaGeometry(
const B2DPolygon& rCandidate,
double fHalfLineWidth,
diff --git a/basegfx/source/polygon/b2dpolygon.cxx b/basegfx/source/polygon/b2dpolygon.cxx
index f46c37729939..5ad06eaedb57 100644
--- a/basegfx/source/polygon/b2dpolygon.cxx
+++ b/basegfx/source/polygon/b2dpolygon.cxx
@@ -483,7 +483,7 @@ public:
{
if(!mpDefaultSubdivision)
{
- const_cast< ImplBufferedData* >(this)->mpDefaultSubdivision.reset(new basegfx::B2DPolygon(basegfx::tools::adaptiveSubdivideByCount(rSource, 9)));
+ const_cast< ImplBufferedData* >(this)->mpDefaultSubdivision.reset(new basegfx::B2DPolygon(basegfx::tools::adaptiveSubdivideByAngle(rSource)));
}
return *mpDefaultSubdivision;
diff --git a/include/basegfx/polygon/b2dlinegeometry.hxx b/include/basegfx/polygon/b2dlinegeometry.hxx
index d336456d0cd3..5aefafbe679b 100644
--- a/include/basegfx/polygon/b2dlinegeometry.hxx
+++ b/include/basegfx/polygon/b2dlinegeometry.hxx
@@ -138,11 +138,6 @@ namespace basegfx
double fMaxPartOfEdge = 0.4,
double fMiterMinimumAngle = (15.0 * F_PI180));
- BASEGFX_DLLPUBLIC B2DPolygon polygonSubdivide(
- const B2DPolygon& rCandidate,
- double fMaxAllowedAngle = (12.5 * F_PI180),
- double fMaxPartOfEdge = 0.4);
-
} // end of namespace tools
} // end of namespace basegfx
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 904834472a51..bba462f3cf72 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -2064,9 +2064,7 @@ bool OpenGLSalGraphicsImpl::drawPolyLine(
basegfx::B2DPolygon aPolygon(rPolygon);
if (aPolygon.areControlPointsUsed())
- aPolygon = basegfx::tools::polygonSubdivide(aPolygon, 5 * F_PI180);
- else
- aPolygon.removeDoublePoints();
+ aPolygon = aPolygon.getDefaultAdaptiveSubdivision();
DrawPolyLine(aPolygon, fLineWidth, eLineJoin, eLineCap, fMiterMinimumAngle);
}