MCPcopy Create free account
hub / github.com/MapServer/MapServer / SetWindingCount

Method SetWindingCount

renderers/agg/src/clipper.cpp:846–903  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

844//------------------------------------------------------------------------------
845
846void Clipper::SetWindingCount(TEdge &edge)
847{
848 TEdge *e = edge.prevInAEL;
849 //find the edge of the same polytype that immediately preceeds 'edge' in AEL
850 while ( e && e->polyType != edge.polyType ) e = e->prevInAEL;
851 if ( !e )
852 {
853 edge.windCnt = edge.windDelta;
854 edge.windCnt2 = 0;
855 e = m_ActiveEdges; //ie get ready to calc windCnt2
856 } else if ( IsNonZeroFillType(edge) )
857 {
858 //nonZero filling ...
859 if ( e->windCnt * e->windDelta < 0 )
860 {
861 if (Abs(e->windCnt) > 1)
862 {
863 if (e->windDelta * edge.windDelta < 0) edge.windCnt = e->windCnt;
864 else edge.windCnt = e->windCnt + edge.windDelta;
865 } else
866 edge.windCnt = e->windCnt + e->windDelta + edge.windDelta;
867 } else
868 {
869 if ( Abs(e->windCnt) > 1 && e->windDelta * edge.windDelta < 0)
870 edge.windCnt = e->windCnt;
871 else if ( e->windCnt + edge.windDelta == 0 )
872 edge.windCnt = e->windCnt;
873 else edge.windCnt = e->windCnt + edge.windDelta;
874 }
875 edge.windCnt2 = e->windCnt2;
876 e = e->nextInAEL; //ie get ready to calc windCnt2
877 } else
878 {
879 //even-odd filling ...
880 edge.windCnt = 1;
881 edge.windCnt2 = e->windCnt2;
882 e = e->nextInAEL; //ie get ready to calc windCnt2
883 }
884
885 //update windCnt2 ...
886 if ( IsNonZeroAltFillType(edge) )
887 {
888 //nonZero filling ...
889 while ( e != &edge )
890 {
891 edge.windCnt2 += e->windDelta;
892 e = e->nextInAEL;
893 }
894 } else
895 {
896 //even-odd filling ...
897 while ( e != &edge )
898 {
899 edge.windCnt2 = (edge.windCnt2 == 0) ? 1 : 0;
900 e = e->nextInAEL;
901 }
902 }
903}

Callers

nothing calls this directly

Calls 1

AbsFunction · 0.85

Tested by

no test coverage detected