Backported a fix from Clipper 6.4.2 for the issue that Clipper Z coordinated has incorrect value because ZFillFunction wasn't called in all cases (https://sourceforge.net/p/polyclipping/bugs/160/). Also, this issue led to duplicity vertices with the same XY coordinates but differ in Z coordinates.
This commit is contained in:
parent
b42e4b2927
commit
46ade54937
3 changed files with 53 additions and 0 deletions
|
@ -2290,6 +2290,12 @@ void Clipper::ProcessHorizontal(TEdge *horzEdge)
|
|||
|
||||
if (horzEdge->OutIdx >= 0 && !IsOpen) //note: may be done multiple times
|
||||
{
|
||||
#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)
|
||||
|
@ -2614,6 +2620,9 @@ 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue