void Visit(const AirspacePolygon& airspace) { if (!prepare_polygon(airspace.GetPoints())) return; bool fill_airspace = m_warnings.is_warning(airspace) || m_warnings.is_inside(airspace); GLEnable stencil(GL_STENCIL_TEST); if (!m_warnings.is_acked(airspace)) { if (!fill_airspace) { // set stencil for filling (bit 0) set_fillstencil(); draw_prepared(); } // fill interior without overpainting any previous outlines { setup_interior(airspace, !fill_airspace); GLEnable blend(GL_BLEND); draw_prepared(); } if (!fill_airspace) { // clear fill stencil (bit 0) clear_fillstencil(); draw_prepared(); } } // draw outline setup_outline(airspace); draw_prepared(); }
static void GetPolygonPoints(std::vector<RasterPoint> &pts, const AirspacePolygon &airspace, const RasterPoint pt, unsigned radius) { GeoBounds bounds = airspace.GetGeoBounds(); GeoPoint center = bounds.GetCenter(); fixed geo_heigth = bounds.GetGeoHeight(); fixed geo_width = bounds.GetGeoWidth(); fixed geo_size = std::max(geo_heigth, geo_width); WindowProjection projection; projection.SetScreenSize({radius * 2, radius * 2}); projection.SetScreenOrigin(pt.x, pt.y); projection.SetGeoLocation(center); projection.SetScale(fixed(radius * 2) / geo_size); projection.SetScreenAngle(Angle::Zero()); projection.UpdateScreenBounds(); const SearchPointVector &border = airspace.GetPoints(); pts.reserve(border.size()); for (auto it = border.begin(), it_end = border.end(); it != it_end; ++it) pts.push_back(projection.GeoToScreen(it->GetLocation())); }
void Visit(const AirspacePolygon& airspace) { if (m_warnings.is_acked(airspace)) return; buffer_render_start(); set_buffer_pens(airspace); draw_search_point_vector(airspace.GetPoints()); }
void VisitPolygon(const AirspacePolygon &airspace) { if (warnings.IsAcked(airspace)) return; AirspaceClass airspace_class = airspace.GetType(); if (settings.classes[airspace_class].fill_mode == AirspaceClassRendererSettings::FillMode::NONE) return; BufferRenderStart(); SetBufferPens(airspace); DrawSearchPointVector(airspace.GetPoints()); }
void VisitPolygon(const AirspacePolygon &airspace) { if (!PreparePolygon(airspace.GetPoints())) return; if (!warning_manager.IsAcked(airspace) && SetupInterior(airspace)) { // fill interior without overpainting any previous outlines GLEnable blend(GL_BLEND); DrawPrepared(); } // draw outline if (SetupOutline(airspace)) DrawPrepared(); }
void Visit(const AirspacePolygon& airspace) { if (!prepare_polygon(airspace.GetPoints())) return; if (!m_warnings.is_acked(airspace)) { // fill interior without overpainting any previous outlines { setup_interior(airspace); GLEnable blend(GL_BLEND); draw_prepared(); } } // draw outline setup_outline(airspace); draw_prepared(); }
void VisitPolygon(const AirspacePolygon &airspace) { if (!PreparePolygon(airspace.GetPoints())) return; const AirspaceClassRendererSettings &class_settings = settings.classes[airspace.GetType()]; bool fill_airspace = warning_manager.HasWarning(airspace) || warning_manager.IsInside(airspace) || class_settings.fill_mode == AirspaceClassRendererSettings::FillMode::ALL; if (!warning_manager.IsAcked(airspace) && class_settings.fill_mode != AirspaceClassRendererSettings::FillMode::NONE) { GLEnable stencil(GL_STENCIL_TEST); if (!fill_airspace) { // set stencil for filling (bit 0) SetFillStencil(); DrawPrepared(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } // fill interior without overpainting any previous outlines { SetupInterior(airspace, !fill_airspace); GLEnable blend(GL_BLEND); DrawPrepared(); } if (!fill_airspace) { // clear fill stencil (bit 0) ClearFillStencil(); DrawPrepared(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } } // draw outline if (SetupOutline(airspace)) DrawPrepared(); }
static void DrawPolygon(Canvas &canvas, const AirspacePolygon &airspace, const RasterPoint pt, unsigned radius) { if (IsAncientHardware()) { canvas.Rectangle(pt.x - radius, pt.y - radius, pt.x + radius, pt.y + radius); return; } GeoBounds bounds = airspace.GetGeoBounds(); GeoPoint center = bounds.GetCenter(); fixed geo_heigth = GeoPoint(center.longitude, bounds.north).Distance( GeoPoint(center.longitude, bounds.south)); fixed geo_width = GeoPoint(bounds.west, center.latitude).Distance( GeoPoint(bounds.east, center.latitude)); fixed geo_size = std::max(geo_heigth, geo_width); WindowProjection projection; projection.SetScreenSize(radius * 2, radius * 2); projection.SetScreenOrigin(pt.x, pt.y); projection.SetGeoLocation(center); projection.SetScale(fixed(radius * 2) / geo_size); projection.SetScreenAngle(Angle::Zero()); projection.UpdateScreenBounds(); const SearchPointVector &border = airspace.GetPoints(); std::vector<RasterPoint> pts; pts.reserve(border.size()); for (auto it = border.begin(), it_end = border.end(); it != it_end; ++it) pts.push_back(projection.GeoToScreen(it->get_location())); canvas.polygon(&pts[0], (unsigned)pts.size()); }
void VisitPolygon(const AirspacePolygon &airspace) { DrawPolygon(airspace.GetPoints()); }
void VisitPolygon(const AirspacePolygon &airspace) { DrawSearchPointVector(airspace.GetPoints()); }
void Visit(const AirspacePolygon& airspace) { setup_canvas(airspace); draw(airspace.GetPoints()); }
void VisitPolygon(const AirspacePolygon &airspace) { if (SetupCanvas(airspace)) DrawPolygon(airspace.GetPoints()); }