void AirspaceRoute::Synchronise(const Airspaces &master, const AirspacePredicate &_condition, const AGeoPoint &origin, const AGeoPoint &destination) { // @todo: also synchronise with AirspaceWarningManager to filter out items that are // acknowledged. h_min = std::min((int)origin.altitude, std::min((int)destination.altitude, h_min)); h_max = std::max((int)origin.altitude, std::max((int)destination.altitude, h_max)); // @todo: have margin for h_max to allow for climb AirspacePredicateHeightRangeExcludeTwo h_condition(h_min, h_max, origin, destination); const auto and_condition = MakeAndPredicate(h_condition, AirspacePredicateRef(_condition)); const auto predicate = WrapAirspacePredicate(and_condition); if (m_airspaces.SynchroniseInRange(master, origin.Middle(destination), 0.5 * origin.Distance(destination), predicate)) { if (!m_airspaces.IsEmpty()) dirty = true; } }
void AirspaceRoute::Synchronise(const Airspaces& master, const AGeoPoint& origin, const AGeoPoint& destination) { // @todo: also synchronise with AirspaceWarningManager to filter out items that are // acknowledged. h_min = std::min(origin.altitude, std::min(destination.altitude, h_min)); h_max = std::max(origin.altitude, std::max(destination.altitude, h_max)); // @todo: have margin for h_max to allow for climb AirspacePredicateHeightRangeExcludeTwo condition(h_min, h_max, origin, destination); if (m_airspaces.SynchroniseInRange(master, origin.Middle(destination), Half(origin.Distance(destination)), condition)) { if (m_airspaces.size()) dirty = true; } }