import {SVGTemplateResult, svg} from 'lit'; export interface Tickmark { angle: number; type: TickmarkType; text?: string; } export enum TickmarkType { main = 'main', primary = 'primary', secondary = 'secondary', tertiary = 'tertiary', } export enum TickmarkStyle { hinted = 'hinted', regular = 'regular', enhanced = 'enhanced', } export function tickmarkColor(style: TickmarkStyle): string { if (style === TickmarkStyle.hinted) { return 'var(--instrument-frame-tertiary-color)'; } else if (style === TickmarkStyle.regular) { return 'var(--instrument-tick-mark-tertiary-color)'; } else { return 'var(--instrument-tick-mark-primary-color)'; } } export function tickmark( angle: number, tickmarkSize: TickmarkType, style: TickmarkStyle, scale: number, text?: string ): SVGTemplateResult | SVGTemplateResult[] { let innerRadius: number = 328 / 2; let outerRadius: number = 368 / 2; const textRadius = outerRadius + 18 / scale; if (tickmarkSize === TickmarkType.secondary) { innerRadius = 164.5; outerRadius = 172.5; } else if (tickmarkSize === TickmarkType.main) { innerRadius = 320 / 2; outerRadius = 368 / 2; } else if (tickmarkSize === TickmarkType.tertiary) { throw new Error('Tertiary tickmarks are not supported'); } const colorName = tickmarkColor(style); const rad = (angle * Math.PI) / 180; const x1 = Math.sin(rad) * innerRadius; const y1 = -Math.cos(rad) * innerRadius; const x2 = Math.sin(rad) * outerRadius; const y2 = -Math.cos(rad) * outerRadius; const tick = svg``; if (text) { const textX = Math.sin(rad) * textRadius; const textY = -Math.cos(rad) * textRadius; return [ tick, svg`${text}`, ]; } return tick; }