Skip to content

Commit

Permalink
Fix issue that z is not properly set in some cases when clipping po…
Browse files Browse the repository at this point in the history
…lygon (#6955)

Fix issue that `z` is not properly set in some cases when clipping the polygon (#6933)

Apply the patch from https://sourceforge.net/p/polyclipping/bugs/160/
  • Loading branch information
Noisyfox authored Oct 3, 2024
1 parent 5bb42bc commit 53b08f2
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/clipper/clipper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2290,7 +2290,11 @@ void Clipper::ProcessHorizontal(TEdge *horzEdge)

if (horzEdge->OutIdx >= 0 && !IsOpen) //note: may be done multiple times
{
op1 = AddOutPt(horzEdge, e->Curr);
#ifdef CLIPPERLIB_USE_XYZ
if (dir == dLeftToRight) SetZ(e->Curr, *horzEdge, *e);
else SetZ(e->Curr, *e, *horzEdge);
#endif
op1 = AddOutPt(horzEdge, e->Curr);
TEdge* eNextHorz = m_SortedEdges;
while (eNextHorz)
{
Expand Down Expand Up @@ -2614,7 +2618,10 @@ void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)
{
e->Curr.x() = TopX( *e, topY );
e->Curr.y() = topY;
}
#ifdef CLIPPERLIB_USE_XYZ
e->Curr.z() = topY == e->Top.y() ? e->Top.z() : (topY == e->Bot.y() ? e->Bot.z() : 0);
#endif
}

//When StrictlySimple and 'e' is being touched by another edge, then
//make sure both edges have a vertex here ...
Expand Down

0 comments on commit 53b08f2

Please sign in to comment.