summaryrefslogtreecommitdiffstats
path: root/basegfx/source/polygon/b2dtrapezoid.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basegfx/source/polygon/b2dtrapezoid.cxx')
-rw-r--r--basegfx/source/polygon/b2dtrapezoid.cxx80
1 files changed, 40 insertions, 40 deletions
diff --git a/basegfx/source/polygon/b2dtrapezoid.cxx b/basegfx/source/polygon/b2dtrapezoid.cxx
index 36c0c483a291..5648aa3be81c 100644
--- a/basegfx/source/polygon/b2dtrapezoid.cxx
+++ b/basegfx/source/polygon/b2dtrapezoid.cxx
@@ -422,61 +422,61 @@ namespace basegfx::trapezoidhelper
void solveHorizontalEdges(TrDeSimpleEdges& rTrDeSimpleEdges)
{
- if(!rTrDeSimpleEdges.empty() && !maTrDeEdgeEntries.empty())
+ if(rTrDeSimpleEdges.empty() || maTrDeEdgeEntries.empty())
+ return;
+
+ // there were horizontal edges. These can be excluded, but
+ // cuts with other edges need to be solved and added before
+ // ignoring them
+ for(const TrDeSimpleEdge & rHorEdge : rTrDeSimpleEdges)
{
- // there were horizontal edges. These can be excluded, but
- // cuts with other edges need to be solved and added before
- // ignoring them
- for(const TrDeSimpleEdge & rHorEdge : rTrDeSimpleEdges)
- {
- // get horizontal edge as candidate; prepare its range and fixed Y
- const B1DRange aRange(rHorEdge.getStart().getX(), rHorEdge.getEnd().getX());
- const double fFixedY(rHorEdge.getStart().getY());
+ // get horizontal edge as candidate; prepare its range and fixed Y
+ const B1DRange aRange(rHorEdge.getStart().getX(), rHorEdge.getEnd().getX());
+ const double fFixedY(rHorEdge.getStart().getY());
+
+ // loop over traversing edges
+ TrDeEdgeEntries::iterator aCurrent(maTrDeEdgeEntries.begin());
- // loop over traversing edges
- TrDeEdgeEntries::iterator aCurrent(maTrDeEdgeEntries.begin());
+ do
+ {
+ // get compare edge
+ TrDeEdgeEntries::reference aCompare(*aCurrent++);
- do
+ if(fTools::lessOrEqual(aCompare.getEnd().getY(), fFixedY))
{
- // get compare edge
- TrDeEdgeEntries::reference aCompare(*aCurrent++);
+ // edge ends above horizontal edge, continue
+ continue;
+ }
- if(fTools::lessOrEqual(aCompare.getEnd().getY(), fFixedY))
- {
- // edge ends above horizontal edge, continue
- continue;
- }
+ if(fTools::moreOrEqual(aCompare.getStart().getY(), fFixedY))
+ {
+ // edge starts below horizontal edge, continue
+ continue;
+ }
- if(fTools::moreOrEqual(aCompare.getStart().getY(), fFixedY))
- {
- // edge starts below horizontal edge, continue
- continue;
- }
+ // vertical overlap, get horizontal range
+ const B1DRange aCompareRange(aCompare.getStart().getX(), aCompare.getEnd().getX());
- // vertical overlap, get horizontal range
- const B1DRange aCompareRange(aCompare.getStart().getX(), aCompare.getEnd().getX());
+ if(aRange.overlaps(aCompareRange))
+ {
+ // possible cut, get cut point
+ const B2DPoint aSplit(aCompare.getCutPointForGivenY(fFixedY));
- if(aRange.overlaps(aCompareRange))
+ if(fTools::more(aSplit.getX(), aRange.getMinimum())
+ && fTools::less(aSplit.getX(), aRange.getMaximum()))
{
- // possible cut, get cut point
- const B2DPoint aSplit(aCompare.getCutPointForGivenY(fFixedY));
+ // cut is in XRange of horizontal edge, potentially needed cut
+ B2DPoint* pNewPoint = maNewPoints.allocatePoint(aSplit);
- if(fTools::more(aSplit.getX(), aRange.getMinimum())
- && fTools::less(aSplit.getX(), aRange.getMaximum()))
+ if(!splitEdgeAtGivenPoint(aCompare, *pNewPoint, aCurrent))
{
- // cut is in XRange of horizontal edge, potentially needed cut
- B2DPoint* pNewPoint = maNewPoints.allocatePoint(aSplit);
-
- if(!splitEdgeAtGivenPoint(aCompare, *pNewPoint, aCurrent))
- {
- maNewPoints.freeIfLast(pNewPoint);
- }
+ maNewPoints.freeIfLast(pNewPoint);
}
}
}
- while(aCurrent != maTrDeEdgeEntries.end()
- && fTools::less(aCurrent->getStart().getY(), fFixedY));
}
+ while(aCurrent != maTrDeEdgeEntries.end()
+ && fTools::less(aCurrent->getStart().getY(), fFixedY));
}
}