Sous le capot
Heclium est une application Windows native, écrite entièrement en C++23, avec WinUI 3 pour l'interface et Direct2D pour le dessin. Pas de moteur de jeu, pas de .NET, pas de technologie web, et aucune bibliothèque tierce : uniquement le langage et ce que fournit Windows.
La pile technique
| Langage | C++23 (Visual Studio, compilateur MSVC) |
|---|---|
| Interface | WinUI 3 (Windows App SDK 1.8), en C++/WinRT et XAML |
| Dessin | Direct2D sur Direct3D 11, dans une chaîne d'échange DXGI affichée par un SwapChainPanel |
| Réseau | WinHTTP (nouveautés, téléchargement des cartes avec reprise) |
| Données | Windows.Data.Json, compression LZMS de Windows, empreintes SHA-256 par BCrypt |
| Astronomie | bibliothèque maison, commune à Heclium, Ephemeridium et Astrosynium |
Le C++ moderne au quotidien
Le code tire parti des dernières normes du langage : les erreurs remontent par std::expected plutôt que par exceptions ou codes de retour, les textes se composent avec std::format, les données se parcourent avec std::span et std::ranges. Les tâches longues s'écrivent en coroutines (co_await) : la recherche d'éclipses ou le chargement des cartes tournent en arrière-plan sans jamais figer l'interface, et les téléchargements ont leur propre std::jthread, arrêté proprement par un std::stop_token.
Le rendu
Le globe est entièrement recalculé à chaque image, au rythme de l'écran : la boucle d'animation suit CompositionTarget::Rendering de WinUI, et Direct2D dessine directement dans la chaîne d'échange, à la résolution réelle de l'écran quelle que soit la mise à l'échelle de Windows.
La Terre est tracée en projection orthographique. Les cartes sont découpées en zones de 2° : seules les zones visibles sont traitées, les segments hors de l'écran ou derrière l'horizon sont écartés avant d'arriver à Direct2D, et chaque couche (terres, lacs, frontières, rivières) devient une seule géométrie. Résultat : une animation fluide en plein écran 4K, tout en continuant à tourner et zoomer le globe.
Les cartes
Les côtes, lacs, frontières et rivières viennent de la base publique GSHHG. Un outil maison en C++ les convertit dans un format propre à Heclium : coordonnées entières au dix-millionième de degré (un centimètre environ), découpage en zones, points de raccord alignés exactement d'une zone à l'autre. Les fichiers passent ainsi de 575 à 156 Mo.
Les résolutions courantes sont livrées avec Heclium ; les plus détaillées se téléchargent depuis le logiciel, en paquets compressés et vérifiés par SHA-256, puis se chargent sans redémarrer.
L'astronomie
Les positions du Soleil et de la Lune viennent des théories VSOP87 et ELP2000-82, dans une bibliothèque d'éphémérides d'environ 22 000 lignes partagée avec mes autres logiciels d'astronomie. L'écart entre le temps des astronomes et le temps universel (ΔT) est exact depuis 1972, grâce aux secondes intercalaires.
Les éclipses sont calculées par intersection des cônes d'ombre et de pénombre de la Lune avec l'ellipsoïde terrestre, entièrement en calcul vectoriel. La recherche d'éclipses parcourt les nouvelles lunes et trouve le maximum de chacune ; sur 2023-2029, elle retrouve exactement les 16 éclipses publiées, avec les durées de totalité au dixième de seconde.
L'installation
L'installeur est lui aussi écrit en C++, sans outil tiers : une application Win32 d'environ 1 100 lignes qui embarque Heclium compressé en LZMS et vérifie chaque fichier par SHA-256. Il installe pour tous les utilisateurs ou pour soi seul, sait se faire silencieux en ligne de commande, et fournit la désinstallation.
Heclium embarque le Windows App SDK et la bibliothèque C++ nécessaires : rien d'autre à installer, pas de « redistribuable » Visual C++. Le tout tient dans un installeur de 28 Mo.
En chiffres
- Heclium : environ 9 200 lignes de C++ ;
- bibliothèque d'astronomie : environ 22 000 lignes ;
- installeur, outil de publication et format de paquet : environ 2 700 lignes ;
- générateur de cartes : environ 950 lignes.
Les articles racontent en détail comment tout cela a été construit.