""" Windrose und Windroseflex Benötigt 6 Werte Hauptwerte: AWA, AWS, TWD, TWS Nebenwerte: DBT, STW, oder COG, SOG """ import cairo import math from .page import Page class WindRose(Page): def draw(self, ctx): # Rahmen cx = 200 cy = 150 r = 110 ctx.set_line_width(3) ctx.arc(cx, cy, r + 9, 0, 2*math.pi) ctx.stroke() ctx.arc(cx, cy, r - 11, 0, 2*math.pi) ctx.stroke() for angle in range(0, 360, 10): if angle % 30 != 0: x, y = self.rotate((cx, cy), ((cx, cy - r),), angle)[0] ctx.arc(x, y, 2, 0, 2*math.pi) ctx.fill() else: p = ((cx, cy - r + 10), (cx, cy - r - 10), (cx, cy - r + 30)) pr = self.rotate((cx, cy), p, angle) ctx.move_to(*pr[0]) ctx.line_to(*pr[1]) ctx.stroke() self.draw_text_center(ctx, *pr[2], str(angle)) ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD) # Namen ctx.set_font_size(24) ctx.move_to(10, 95) # links oben ctx.show_text("AWA") ctx.move_to(335, 95) # rechts oben ctx.show_text("TWD") ctx.move_to(10, 220) # links unten ctx.show_text("AWS") ctx.move_to(335, 220) # rechts unten ctx.show_text("TWS") # Units ctx.set_font_size(16) ctx.move_to(10, 115) # links oben ctx.show_text("Deg") ctx.move_to(335, 115) # rechts oben ctx.show_text("Deg") ctx.move_to(10, 190) # links unten ctx.show_text("kn") ctx.move_to(335, 190) # rechts unten ctx.show_text("kn") # Horiz. Trennlinien #ctx.rectangle(0, 149, 60, 3) #ctx.fill() ctx.set_line_width(3) # links ctx.move_to(0, 149) ctx.line_to(60, 149) # rechts ctx.move_to(340, 149) ctx.line_to(400, 149) ctx.stroke() # Meßwerte ctx.select_font_face("DSEG7 Classic") ctx.set_font_size(40) # links oben ctx.move_to(10, 65) ctx.show_text("148") # rechts oben ctx.move_to(295, 65) ctx.show_text("---") # links unten ctx.move_to(10, 270) ctx.show_text("46.7") # rechts unten ctx.move_to(295, 270) ctx.show_text("77.8") ctx.set_font_size(32) # innen oben ctx.move_to(160, 130) ctx.show_text("38.9") # innen unten ctx.move_to(160, 200) ctx.show_text("19.9") ctx.stroke() # Zeiger angle = 148 p = ((cx - 1, cy - (r - 15)), (cx + 1, cy - (r - 15)), (cx + 4, cy), (cx - 4, cy)) zeiger = self.rotate((cx, cy), p, angle) ctx.move_to(*zeiger[0]) for point in zeiger[1:]: ctx.line_to(*point) ctx.fill() ctx.set_source_rgb(*self.bgcolor) ctx.arc(cx, cy, 8, 0, 2*math.pi) ctx.fill() ctx.set_source_rgb(*self.fgcolor) ctx.arc(cx, cy, 7, 0, 2*math.pi) ctx.fill()