Supercell Wx Documentation

repository·develop·Indexed 18 days ago

https://github.com/dpaulat/supercell-wx

An open-source weather visualization tool for monitoring live and archived NEXRAD Level 2 and Level 3 data and severe weather alerts on a responsive map. It supports Windows, Linux, and macOS, integrating with services like NEXRAD on AWS, Mapbox, and MapTiler to provide real-time reflectivity and velocity updates.

Tokens
4.4K
Snippets
7
Records
13
Agent score
66%

What's inside Supercell Wx

  1. Overview of Supercell Wx

    develop
    Supercell Wx is an open-source application designed to visualize live and archived NEXRAD Level 2 and Level 3 weather data, alongside severe weather alerts. It features a responsive map that continuously updates with weather products such as reflectivity and velocity, allowing users to monitor weather events in real-time.
  2. Linux System Dependencies

    develop

    To run Supercell Wx on Linux, ensure your system meets the following requirements:

    • Compiler/Library: Support for GCC 13.
    • Graphics: OpenGL 3.3 and OpenGL ES 3.0 support.
    • X11 Users: If using an X11 windowing system, you must have the XCB libraries installed, specifically including xcb-cursor.
  3. Supported Platforms for Supercell Wx

    develop

    Supercell Wx is compatible with the following 64-bit operating systems:

    Windows

    • Windows 10 (version 1809 or later)
    • Windows 11

    Linux

    • Arch Linux (including EndeavourOS, SteamOS/Steam Deck, and other derivatives)
    • Fedora Linux 39+
    • openSUSE Tumbleweed
    • Ubuntu 24.04+
    • NixOS 25.05+
    • Most distributions supporting GCC Standard C++ Library 13+

    macOS

    • macOS 15.0+ for Intel-based Macs
    • macOS 14.0+ for Apple silicon-based Macs
  4. Configure OpenGL surface format

    develop

    Supercell Wx requires a specific OpenGL configuration to support its shaders. It uses a Core Profile. On macOS, it explicitly requests OpenGL version 4.1 Core to ensure shader compatibility.

    // The application internally calls InitializeOpenGL() which sets:
    // - Qt::AA_ShareOpenGLContexts
    // - QSurfaceFormat::CoreProfile
    // - QSurfaceFormat::OpenGL renderable type
    // - Version 4.1 on macOS
  5. Initialize and launch Supercell Wx GUI

    develop

    The Supercell Wx application entrypoint initializes the Qt application, AWS SDK, and various internal managers (Log, Settings, Resource, Task, and Thread managers). It handles command-line argument parsing, theme configuration, privilege checking, and internationalization. If a setup is required, it launches the SetupWizard; otherwise, it launches the MainWindow.

    // The application is typically launched via the compiled binary.
    // Internally, the main loop follows this lifecycle:
    // 1. Parse arguments via scwx::qt::main::ProgramOptions::ParseArguments
    // 2. Initialize managers (LogManager, ApplicationPaths, etc.)
    // 3. Initialize AWS SDK
    // 4. Run SetupWizard if scwx::qt::ui::setup::SetupWizard::IsSetupRequired() is true
    // 5. Launch MainWindow
    // 6. Shutdown managers and AWS SDK
  6. Configure Map API Keys to fix black map issue

    develop

    If the map appears black when loading for the first time, it indicates that a map provider API key has not been configured. You must obtain an API key from one of the following providers:

    1. MapTiler: Does not currently require a credit/debit card.
    2. Mapbox: Requires a credit/debit card, but offers 200,000 free requests per month.
  7. Review Supercell Wx dependencies and licenses

    develop

    Supercell Wx relies on a wide range of third-party libraries for its functionality, including graphics (Qt, Mesa 3D, Vulkan SDK), networking (libcurl, AWS SDK for C++), and geospatial processing (MapLibre Native, GEOS, GeographicLib). Developers should review the following dependency list to understand the project's technical stack and licensing requirements.

    | Dependency | License | Notes |
    | ---------- | ------- | ----- |
    | [{fmt}](https://fmt.dev/) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [AWS SDK for C++](https://aws.amazon.com/sdk-for-cpp/) | [Apache License 2.0](https://spdx.org/licenses/Apache-2.0.html) |
    | [Boost](https://www.boost.org/) | [Boost Software License 1.0](https://spdx.org/licenses/BSL-1.0.html) |
    | [brotli](https://github.com/google/brotli) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [bzip2](https://sourceware.org/bzip2/) | [bzip2 and libbzip2 License v1.0.6](https://spdx.org/licenses/bzip2-1.0.6.html) |
    | [cmake-conan](https://github.com/conan-io/cmake-conan) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [cpr](https://github.com/libcpr/cpr) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [CSS Color Parser](https://github.com/deanm/css-color-parser-js) | [MIT License](https://spdx.org/licenses/MIT.html) | Ported to C++ for MapLibre Native |
    | [Date](https://github.com/HowardHinnant/date) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [Dear ImGui](https://github.com/ocornut/imgui) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [fontconfig](http://fontconfig.org/) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [FreeType](https://freetype.org/) | [Freetype Project License](https://spdx.org/licenses/FTL.html) |
    | [FreeType GL](https://github.com/rougier/freetype-gl) | [BSD 2-Clause with views sentence](https://spdx.org/licenses/BSD-2-Clause-Views.html) |
    | [GeographicLib](https://geographiclib.sourceforge.io/) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [geos](https://libgeos.org/) | [GNU Lesser General Public License v2.1 or later](https://spdx.org/licenses/LGPL-2.1-or-later.html) |
    | [GLAD](https://github.com/Dav1dde/glad) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [GLM](https://github.com/g-truc/glm) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [GoogleTest](https://google.github.io/googletest/) | [BSD 3-Clause "New" or "Revised" License](https://spdx.org/licenses/BSD-3-Clause.html) |
    | [HSLuv](https://www.hsluv.org/) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [libcurl](https://curl.se/libcurl/) | [curl License](https://spdx.org/licenses/curl.html) |
    | [libiconv](https://www.gnu.org/software/libiconv/) | [GNU Lesser General Public License v2.1 or later](https://spdx.org/licenses/LGPL-2.1-or-later.html) |
    | [libjpeg](http://libjpeg.sourceforge.net/) | [Independent JPEG Group License](https://spdx.org/licenses/IJG.html) |
    | [libpng](http://libpng.org/pub/png/libpng.html) | [PNG Reference Library version 2](https://spdx.org/licenses/libpng-2.0.html) |
    | [libtiff](http://libtiff.org/) | [libtiff License](https://spdx.org/licenses/libtiff.html) |
    | [libxml2](http://xmlsoft.org/) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [libzip](https://libzip.org/) | [BSD 3-Clause "New" or "Revised" License](https://spdx.org/licenses/BSD-3-Clause.html) |
    | [MapLibre Native](https://maplibre.org/projects/maplibre-native/) | [BSD 2-Clause "Simplified" License](https://spdx.org/licenses/BSD-2-Clause.html) |
    | [Mesa 3D](https://mesa3d.org/) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [nunicode](https://bitbucket.org/alekseyt/nunicode/src/master/) | [MIT License](https://spdx.org/licenses/MIT.html) | Modified for MapLibre Native |
    | [OpenSSL](https://www.openssl.org/) | [OpenSSL License](https://spdx.org/licenses/OpenSSL.html) |
    | [Qt](https://www.qt.io/) | [GNU Lesser General Public License v3.0 only](https://spdx.org/licenses/LGPL-3.0-only.html) | Qt Core, Qt GUI, Qt Multimedia, Qt Network, Qt OpenGL, Qt Positioning, Qt Serial Port, Qt SQL, Qt SVG, Qt Widgets<br/>Additional Licenses: https://doc.qt.io/qt-6/licenses-used-in-qt.html |
    | [qt6ct](https://github.com/trialuser02/qt6ct) | [BSD 2-Clause "Simplified" License](https://spdx.org/licenses/BSD-2-Clause.html) |
    | [range-v3](https://github.com/ericniebler/range-v3) | [Boost Software License 1.0](https://spdx.org/licenses/BSL-1.0.html)<br/>[MIT License](https://spdx.org/licenses/MIT.html)<br>[Stepanov and McJones, "Elements of Programming" license](https://github.com/ericniebler/range-v3/tree/0.12.0?tab=License-1-ov-file)<br>[SGI C++ Standard Template Library license](https://github.com/ericniebler/range-v3/tree/0.12.0?tab=License-1-ov-file) |
    | [re2](https://github.com/google/re2) | [BSD 3-Clause "New" or "Revised" License](https://spdx.org/licenses/BSD-3-Clause.html) |
    | [spdlog](https://github.com/gabime/spdlog) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [SQLite](https://www.sqlite.org/) | Public Domain |
    | [stb](https://github.com/nothings/stb) | Public Domain |
    | [TextFlowCpp](https://github.com/catchorg/textflowcpp) | [Boost Software License 1.0](https://spdx.org/licenses/BSL-1.0.html) |
    | [Units](https://github.com/nholthaus/units) | [MIT License](https://spdx.org/licenses/MIT.html) |
    | [Vulkan SDK](https://www.vulkan.org/) | [Apache License 2.0](https://spdx.org/licenses/Apache-2.0.html) |
    | [zlib](https://zlib.net/) | [zlib License](https://spdx.org/licenses/Zlib.html) |
  8. Identify Supercell Wx external services

    develop

    Supercell Wx integrates with several external services for weather data, mapping, and updates. Key services include:

    • Weather Warnings: College of DuPage, Iowa Environmental Mesonet, and Weather Pulse LLC.
    • Map Tiles: Mapbox, MapTiler, and OpenFreeMap.
    • Radar Data: NEXRAD on AWS (real-time and archival).
    • Updates: GitHub.
    | Service | Notes |
    | ------- | ----- |
    | [College of DuPage](https://weather.cod.edu/) | Severe weather warnings |
    | [GitHub](https://github.com/) | Supercell Wx updates |
    | [Iowa Environmental Mesonet](https://mesonet.agron.iastate.edu/) | Archived severe weather warnings |
    | [Mapbox](https://www.mapbox.com/) | Vector map tiles |
    | [MapTiler](https://www.maptiler.com/) | Vector map tiles |
    | [OpenFreeMap](https://openfreemap.org/) | Vector map tiles |
    | [NEXRAD on AWS](https://registry.opendata.aws/noaa-nexrad/) | Real-time and archival data from the Next Generation Weather Radar (NEXRAD) network. |
    | [Weather Pulse LLC](https://www.weatherpulse.com/) | Severe weather warnings |
  9. Parse and handle command-line arguments

    develop

    Supercell Wx uses scwx::qt::main::ProgramOptions to process command-line arguments. This includes parsing the arguments and checking for flags that might trigger an immediate exit.

    // Parsing arguments
    scwx::qt::main::ProgramOptions::ParseArguments({argv, static_cast<std::size_t>(argc)});
    
    // Handling arguments (e.g., --help or --version flags)
    bool exit = false;
    scwx::qt::main::ProgramOptions::HandleArguments(exit);
    if (exit) return 0;