import { Card, CardBody, CardHeader, H1, H2, Stack, Table, Text, useHostTheme, } from "cursor/canvas"; /** Y=0 = row of 4; +Y toward audience. Side cans on walls at ±3.5 m. */ const WALL = 3.5; const FIXTURES: { key: string; label: string; kind: "can" | "mover"; x: number; y: number; }[] = [ { key: "c3", label: "#3", kind: "can", x: -1.8, y: 0.0 }, { key: "c4", label: "#4", kind: "can", x: -0.6, y: 0.0 }, { key: "c5", label: "#5", kind: "can", x: 0.6, y: 0.0 }, { key: "c6", label: "#6", kind: "can", x: 1.8, y: 0.0 }, { key: "c2", label: "#2", kind: "can", x: -WALL, y: 1.2 }, { key: "c7", label: "#7", kind: "can", x: WALL, y: 1.2 }, { key: "m1", label: "M1", kind: "mover", x: -0.3, y: 1.1 }, { key: "m2", label: "M2", kind: "mover", x: 0.3, y: 1.1 }, { key: "c1", label: "#1", kind: "can", x: -WALL, y: 2.4 }, { key: "c8", label: "#8", kind: "can", x: WALL, y: 2.4 }, ]; const BUILDING_W = 7; const DEPTH = 2.4; export default function StageMap() { const theme = useHostTheme(); const pad = 0.55; const x0 = -BUILDING_W / 2 - pad; const x1 = BUILDING_W / 2 + pad; const y0 = -0.45; const y1 = DEPTH + 0.55; const vbW = x1 - x0; const vbH = y1 - y0; const px = 88; const svgW = vbW * px; const svgH = vbH * px; const sx = (x: number) => ((x - x0) / vbW) * svgW; const sy = (y: number) => ((y1 - y) / vbH) * svgH; const dim = theme.text.tertiary; const ink = theme.text.primary; const accent = theme.accent.primary; const canFill = theme.fill.tertiary; const stroke = theme.stroke.primary; const onAccent = theme.text.onAccent; function DimH( xA: number, xB: number, y: number, label: string, side: "above" | "below" = "above", ) { const ya = sy(y); const x1p = sx(Math.min(xA, xB)); const x2p = sx(Math.max(xA, xB)); const mid = (x1p + x2p) / 2; const ty = side === "above" ? ya - 8 : ya + 14; return ( {label} ); } function DimV( yA: number, yB: number, x: number, label: string, side: "left" | "right" = "right", ) { const xa = sx(x); const y1p = sy(Math.max(yA, yB)); const y2p = sy(Math.min(yA, yB)); const mid = (y1p + y2p) / 2; const tx = side === "right" ? xa + 8 : xa - 8; return ( {label} ); } return (

Stage map

Building {BUILDING_W} m wide · walls at ±{WALL} m · Y = 0 at row of 4 · +Y toward audience
Plan (audience at bottom) {/* Wall labels */} 3.5 m from centre 3.5 m from centre {DimH(0, -WALL, 1.8, "3.5 m", "above")} {DimH(0, WALL, 1.8, "3.5 m", "below")} centre AUDIENCE row of 4 {DimH(-3.5, 3.5, DEPTH + 0.32, "7.0 m building", "below")} {DimH(0, 0.6, 0, "0.6", "above")} {DimH(0, 1.8, 0, "1.8", "above")} {DimH(0, -0.6, 0, "0.6", "below")} {DimH(0, -1.8, 0, "1.8", "below")} {DimH(0, 0.3, 1.1, "0.3", "above")} {DimV(0, 1.1, 2.4, "1.1 m movers")} {DimV(0, 1.2, 2.4, "1.2 m")} {DimV(0, 2.4, -2.4, "2.4 m", "left")} {FIXTURES.map((f) => { const cx = sx(f.x); const cy = sy(f.y); const r = f.kind === "mover" ? 14 : 12; return ( {f.kind === "mover" ? ( ) : ( )} {f.label} ); })}

Coordinates

Source: integrate_u_patterns.py LAYOUT_M ); }