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()
 |