Files
WearSignalK2/codegen/compass-rose.py
2023-11-23 23:16:51 +01:00

62 lines
3.1 KiB
Python
Executable File

#!/usr/bin/python3
# application to print out the required code to draw a compass rose
# of size 1 by 1 in quadrant 1
import font
from matrix import Vector, Matrix, pi
from math import cos, sin, pi
major_len=0.3
middle_len=0.15
minor_len=0.1
print("val compass_rose = ")
# North
print(" Design(listOf(Vector(0.0F, 0.5F), Vector(0.0F, {}F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Red))) +".format(0.5-(major_len/2)))
# N
gmap = font.glyph_map("timesr.jhf")
vglyph, width = font.typeset(gmap, ["capn"])
xform = Matrix.rotation(pi).multiply(Matrix.scale(0.08/width))
vglyph = Vector(0.0, 0.3).translate(xform.multiply(vglyph))
print(" {} +".format(font.toKotlin(vglyph, "1.5F", "Color.Red")))
# East
print(" Design(listOf(Vector(0.5F, 0.0F), Vector({}F, 0.0F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(0.5-(major_len/2)))
# South
print(" Design(listOf(Vector(0.0F, -0.5F), Vector(0.0F, {}F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(-0.5+major_len/2))
# West
print(" Design(listOf(Vector(-0.5F, 0.0F), Vector({}F, 0.0F)), listOf(Design.Trace(listOf(0, 1), 5.0F, Color.Gray))) +".format(-0.5+major_len/2))
# NE
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4)/2, sin(pi/4)/2, cos(pi/4)*(1-middle_len)/2, sin(pi/4)*(1-middle_len)/2))
# NW
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4 + pi/2)/2, sin(pi/4 + pi/2)/2, cos(pi/4 + pi/2)*(1-middle_len)/2, sin(pi/4 + pi/2)*(1-middle_len)/2))
# SW
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4 + pi)/2, sin(pi/4 + pi)/2, cos(pi/4 + pi)*(1-middle_len)/2, sin(pi/4 + pi)*(1-middle_len)/2))
# SE
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 3.0F, Color.Gray))) +"
.format(cos(pi/4 + pi + pi/2)/2, sin(pi/4 + pi + pi/2)/2, cos(pi/4 + pi + pi/2)*(1-middle_len)/2, sin(pi/4 + pi + pi/2)*(1-middle_len)/2))
# minor markings are 3 markers within the other markers, 8 sections of 3 markers.
for i in range(0,8):
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +"
.format(cos( i*pi/4 + pi/16 )/2, sin( i*pi/4 + pi/16)/2, cos( i*pi/4 + pi/16 )*(1-minor_len)/2, sin( i*pi/4 + pi/16)*(1-minor_len)/2))
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +"
.format(cos( i*pi/4 + 2*pi/16 )/2, sin( i*pi/4 + 2*pi/16)/2, cos( i*pi/4 + 2*pi/16 )*(1-minor_len)/2, sin( i*pi/4 + 2*pi/16)*(1-minor_len)/2))
print(" Design(listOf(Vector({}F, {}F), Vector({}F, {}F)), listOf(Design.Trace(listOf(0, 1), 1.0F, Color.Gray))) +"
.format(cos( i*pi/4 + 3*pi/16 )/2, sin( i*pi/4 + 3*pi/16)/2, cos( i*pi/4 + 3*pi/16 )*(1-minor_len)/2, sin( i*pi/4 + 3*pi/16)*(1-minor_len)/2))
print(" Design(emptyList(), emptyList())")