OBP60v/pages/skyview.py

85 lines
2.2 KiB
Python

"""
Satelliteninfos
- Sat mit Fix: ausgefüllter Kreis
- Sat ohne fix: leerer Kreis
- Slots für 12 SNR-Balken
"""
import cairo
import math
from .page import Page
class SkyView(Page):
def __init__(self, pageno, cfg, boatdata):
super().__init__(pageno, cfg, boatdata)
def pol2cart(azimuth, elevation):
'''
Polar to Cartesian coordinates within the horizon circle.
azimuth in radians
x = math.sin(azimuth) * elevation * self.radius
y = math.cos(azimuth) * elevation * self.radius
'''
pass
# (x, y) = self.pol2cart(sat.az, sat.el)
def draw(self, ctx):
# Name
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
#ctx.set_font_size(32)
#self.draw_text_center(ctx, 200, 40, "Satellite Info")
# Spezialseite
cx = 130
cy = 150
r = 125
r1 = r / 2
ctx.set_line_width(1.5)
ctx.arc(cx, cy, r, 0, 2*math.pi)
ctx.stroke()
ctx.arc(cx, cy, r1, 0, 2*math.pi)
ctx.stroke()
ctx.set_dash([4, 4], 0)
ctx.move_to(cx, cy - r)
ctx.line_to(cx, cy + r)
ctx.move_to(cx - r, cy)
ctx.line_to(cx + r, cy)
ctx.stroke()
ctx.set_dash([], 0)
# Signal/Noise Balken
ctx.set_font_size(16)
ctx.move_to(325, 34)
ctx.show_text("SNR")
ctx.stroke()
ctx.set_line_width(1.5)
ctx.rectangle(270, 20, 125, 257)
# Beispieldaten
ctx.set_line_width(0.5)
for s in range(12):
y = 30 + (s + 1) * 20
ctx.move_to(275, y)
ctx.show_text(f"{s:02d}")
ctx.rectangle(305, y-12, 85, 14)
ctx.stroke()
ctx.set_line_width(1.0)
for s in self.bd.sat.values():
x = cx + math.sin(s.azimuth) * s.elevation * r
y = cy + math.cos(s.azimuth) * s.elevation * r
ctx.arc(x, y, 4, 0, 2*math.pi)
ctx.move_to(x+4, y+4)
ctx.show_text(f"{s.prn_num}")
ctx.stroke()
# Satellitenliste mit SNR-Balken sortiert nach nummer
for prn_num in sorted(self.bd.sat):
print(prn_num)