MCPcopy Create free account
hub / github.com/AngusJohnson/Clipper2 / TidyEdges

Method TidyEdges

CPP/Clipper2Lib/src/clipper.rectclip.cpp:665–841  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

663 }
664
665 void RectClip64::TidyEdges(size_t idx, OutPt2List& cw, OutPt2List& ccw)
666 {
667 if (ccw.empty()) return;
668 bool isHorz = ((idx == 1) || (idx == 3));
669 bool cwIsTowardLarger = ((idx == 1) || (idx == 2));
670 size_t i = 0, j = 0;
671 OutPt2* p1, * p2, * p1a, * p2a, * op, * op2;
672
673 while (i < cw.size())
674 {
675 p1 = cw[i];
676 if (!p1 || p1->next == p1->prev)
677 {
678 cw[i++] = nullptr;
679 j = 0;
680 continue;
681 }
682
683 size_t jLim = ccw.size();
684 while (j < jLim &&
685 (!ccw[j] || ccw[j]->next == ccw[j]->prev)) ++j;
686
687 if (j == jLim)
688 {
689 ++i;
690 j = 0;
691 continue;
692 }
693
694 if (cwIsTowardLarger)
695 {
696 // p1 >>>> p1a;
697 // p2 <<<< p2a;
698 p1 = cw[i]->prev;
699 p1a = cw[i];
700 p2 = ccw[j];
701 p2a = ccw[j]->prev;
702 }
703 else
704 {
705 // p1 <<<< p1a;
706 // p2 >>>> p2a;
707 p1 = cw[i];
708 p1a = cw[i]->prev;
709 p2 = ccw[j]->prev;
710 p2a = ccw[j];
711 }
712
713 if ((isHorz && !HasHorzOverlap(p1->pt, p1a->pt, p2->pt, p2a->pt)) ||
714 (!isHorz && !HasVertOverlap(p1->pt, p1a->pt, p2->pt, p2a->pt)))
715 {
716 ++j;
717 continue;
718 }
719
720 // to get here we're either splitting or rejoining
721 bool isRejoining = cw[i]->owner_idx != ccw[j]->owner_idx;
722

Callers

nothing calls this directly

Calls 5

HasHorzOverlapFunction · 0.85
HasVertOverlapFunction · 0.85
SetNewOwnerFunction · 0.85
UncoupleEdgeFunction · 0.85
AddToEdgeFunction · 0.85

Tested by

no test coverage detected