| 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 |
nothing calls this directly
no test coverage detected