virtual void OnPaint(Canvas &canvas) override { canvas.ClearWhite(); const GeoPoint a(Angle::Degrees(7.70722), Angle::Degrees(51.052)); const GeoPoint b(Angle::Degrees(11.5228), Angle::Degrees(50.3972)); WindowProjection projection; projection.SetScreenOrigin(canvas.GetWidth() / 2, canvas.GetHeight() / 2); projection.SetGeoLocation(a.Middle(b)); projection.SetScreenSize(canvas.GetSize()); projection.SetScaleFromRadius(fixed(400000)); projection.UpdateScreenBounds(); canvas.SelectBlackPen(); canvas.SelectHollowBrush(); RasterPoint pa = projection.GeoToScreen(a); canvas.DrawCircle(pa.x, pa.y, 4); RasterPoint pb = projection.GeoToScreen(b); canvas.DrawCircle(pb.x, pb.y, 4); RenderFAISector(canvas, projection, a, b, false, settings); }
void Airspaces::VisitIntersecting(const GeoPoint &loc, const GeoPoint &end, AirspaceIntersectionVisitor& visitor) const { if (empty()) return; // nothing to do FlatRay ray(task_projection.project(loc), task_projection.project(end)); const GeoPoint c = loc.Middle(end); Airspace bb_target(c, task_projection); int mrange = task_projection.project_range(c, loc.Distance(end) / 2); IntersectingAirspaceVisitorAdapter adapter(loc, end, ray, visitor); airspace_tree.visit_within_range(bb_target, -mrange, adapter); #ifdef INSTRUMENT_TASK n_queries++; #endif }
void Airspaces::VisitIntersecting(const GeoPoint &loc, const GeoPoint &end, AirspaceIntersectionVisitor& visitor) const { if (empty()) // nothing to do return; const GeoPoint c = loc.Middle(end); Airspace bb_target(c, task_projection); int projected_range = task_projection.ProjectRangeInteger(c, loc.Distance(end) / 2); IntersectingAirspaceVisitorAdapter adapter(loc, end, task_projection, visitor); airspace_tree.visit_within_range(bb_target, -projected_range, adapter); #ifdef INSTRUMENT_TASK n_queries++; #endif }