Example #1
0
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;
  }
}
Example #2
0
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;
  }
}