| 2706 | } |
| 2707 | |
| 2708 | void ClipperBase::DoTopOfScanbeam(const int64_t y) |
| 2709 | { |
| 2710 | sel_ = nullptr; // sel_ is reused to flag horizontals (see PushHorz below) |
| 2711 | Active* e = actives_; |
| 2712 | while (e) |
| 2713 | { |
| 2714 | //nb: 'e' will never be horizontal here |
| 2715 | if (e->top.y == y) |
| 2716 | { |
| 2717 | e->curr_x = e->top.x; |
| 2718 | if (IsMaxima(*e)) |
| 2719 | { |
| 2720 | e = DoMaxima(*e); // TOP OF BOUND (MAXIMA) |
| 2721 | continue; |
| 2722 | } |
| 2723 | else |
| 2724 | { |
| 2725 | //INTERMEDIATE VERTEX ... |
| 2726 | if (IsHotEdge(*e)) AddOutPt(*e, e->top); |
| 2727 | UpdateEdgeIntoAEL(e); |
| 2728 | if (IsHorizontal(*e)) |
| 2729 | PushHorz(*e); // horizontals are processed later |
| 2730 | } |
| 2731 | } |
| 2732 | else // i.e. not the top of the edge |
| 2733 | e->curr_x = TopX(*e, y); |
| 2734 | |
| 2735 | e = e->next_in_ael; |
| 2736 | } |
| 2737 | } |
| 2738 | |
| 2739 | |
| 2740 | Active* ClipperBase::DoMaxima(Active& e) |
nothing calls this directly
no test coverage detected