120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
"""
 | 
						|
 | 
						|
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()
 |