FramingPanel
The imaging planner's tool: describe a sensor and a focal length, and the panel
both states the field in degrees and lays that rectangle on the sky through
engine.showFieldOfView(). Composes <ToolPanel>,
<Button>, <Field>,
<Slider> and <HudReadout>.
Framing
Sensor
36.0 × 24.0 mm
Focal length 200 mm
Rotation 0°
Position angle — measured from celestial north, so the frame holds its orientation against the stars rather than against the screen.
Sampling
Microns — gives arcsec per pixel
Field
10.29° × 6.87°
Diagonal
12.35°
Scale
—″/px
Enter a pixel pitch to see whether you are sampling well.
Select a deep-sky object to check it against this frame.
Every control is live. The readouts are computed
by fieldOfView() and pixelScale() from
src/Engine/Observation.ts, which is why they work here with no engine
running; only the rectangle on the sky needs the map.
On the map it is one of the tools: the instrument bar opens it.
Worked examples
Rendered at build time by the panel's own maths. The arctangent form matters at wide field: the small-angle approximation everyone quotes puts a full frame at 200 mm nearly a degree and a half wrong.
| Sensor | Focal | Field | Diagonal | Scale |
|---|---|---|---|---|
| Full frame · 36×24 mm | 200 mm | 10.29° × 6.87° | 12.35° | 6.13″/px at 5.94 µm |
| APS-C · 23.5×15.7 mm | 200 mm | 6.72° × 4.50° | 8.08° | 3.88″/px at 3.76 µm |
| Micro 4/3 · 17.3×13 mm | 135 mm | 7.33° × 5.51° | 9.16° | 5.74″/px at 3.76 µm |
| 1" · 13.2×8.8 mm | 1000 mm | 0.76° × 0.50° | 0.91° | 0.50″/px at 2.4 µm |
Activation
The panel is one of the map's tools, so it is inert until the instrument bar
opens it: hidden, inert, holding no engine resources and drawing
nothing. A page adds it once and pays nothing until the observer asks for it.
--- import FramingPanel from '../design/compositions/FramingPanel.astro'; --- <FramingPanel />
Then any of:
openTool('framing') // from design/compositions/tool-bus, or the bar's own button
closeTool('framing')
F // keyboard, when no field has focus It no longer announces a state of its own and no longer force-closes the layers list to take the column — InstrumentBar owns which tool is on screen, and this component owns only what the rectangle on the sky does. Escape closes it, like every other tool.
Behaviour
- The rectangle is pinned to sky coordinates, so it rides the sky as it turns and stays on the target through a time scrub.
- It centres on the current selection —
dso:select,star:select— and on the view centre when there is none. Use view centre re-pins it to wherever the camera is looking. - Selecting a deep-sky object compares its catalogued major axis against the frame and says plainly whether it fits, fits only lengthways, or needs a mosaic.
- Closing the panel, or navigating to a page without it, removes the annotation — the engine survives navigation and would otherwise keep the rectangle forever.
- Optics are remembered in
localStorageunderwhatthestar:optics.Persistence.tsmodels one fixed progress record and exposes no generic slot, and a camera setting does not justify widening a file three other panels share.
Placement
placement="hud" (the default) docks the card into the
map's left tool slot, where the shared <ToolPanel> shell gives it
its width, its ceiling and its way out. placement="inline" — used
above — leaves it in the page flow for documentation, where the
--hud-* layout variables do not exist.