void SetLabel (int NId, int Label) { if (Label > LabelLimit + 1) { Label = MaxLabel; } int OldLabel = LabelsV[NId]; LabelsV[NId] = Label; LabelCounts[OldLabel]--; LabelCounts[Label]++; if (Label != MaxLabel) { LabelLimit = max(LabelLimit, Label); } if (LabelCounts[OldLabel] == 0) { CheckGap (OldLabel); } }
void FlatTriangleFanTree::FillGaps(const AFlatGeoPoint &origin, ReachFanParms &parms) { // worth checking for gaps? if (vs.size() > 2 && parms.rpolars.IsTurningReachEnabled()) { // now check gaps const RoutePoint o(origin, RoughAltitude(0)); RouteLink e_last(RoutePoint(*vs.begin(), RoughAltitude(0)), o, parms.task_proj); for (auto x_last = vs.cbegin(), end = vs.cend(), x = x_last + 1; x != end; x_last = x++) { if (TooClose(*x, origin) || TooClose(*x_last, origin)) continue; const RouteLink e(RoutePoint(*x, RoughAltitude(0)), o, parms.task_proj); // check if children need to be added CheckGap(origin, e_last, e, parms); e_last = e; } } }