feat: Added Antenna selection to Flex FlexPanel

feat: New settings flexradio to select antennas per band
This commit is contained in:
2026-06-29 23:07:52 +02:00
parent a2401d7fd3
commit a05dd6b3a9
10 changed files with 357 additions and 70 deletions
+10 -9
View File
@@ -164,15 +164,16 @@ export function WorldMap({ fromGrid, toGrid, fromLabel, toLabel, beamAzimuths, b
return out;
};
for (const az of beamAzimuths) {
// Draw the lobe as a single FILLED shape that HUGS the great-circle
// curve: bound it by the two edge radials (az ± half-beamwidth), each a
// great-circle line, joined by a short far cap. Filling between the two
// curved edges follows the arc instead of making a straight triangle.
const edgeL = radial(az - half);
const edgeR = radial(az + half);
const lobe = [[from.lat, from.lon], ...edgeL, ...edgeR.slice().reverse()] as [number, number][];
L.polygon(unwrapLon(lobe) as L.LatLngExpression[],
{ stroke: false, fillColor: '#ff2d2d', fillOpacity: 0.18, smoothFactor: 0 }).addTo(wo);
// Draw the lobe as a DENSE fan of translucent great-circle radials, not
// a filled polygon: a polygon smears badly near the poles on Mercator
// (a poleward beam degenerates into a giant triangle), while each radial
// LINE stays clean at any azimuth. A small angular step makes the lines
// overlap into a solid-looking lobe (no separate strokes), darker near
// the antenna and fanning out toward the front.
for (let b = az - half; b <= az + half + 0.001; b += 0.5) {
const line = unwrapLon([[from.lat, from.lon], ...radial(b)]);
L.polyline(line as L.LatLngExpression[], { color: '#ff2d2d', weight: 6, opacity: 0.10, smoothFactor: 0 }).addTo(wo);
}
const cl = unwrapLon([[from.lat, from.lon], ...radial(az)]);
// Dark casing under the boresight so the bright dashed line stays