FERS 1.0.0
The Flexible Extensible Radar Simulator
Loading...
Searching...
No Matches
GlobalParametersInspector.tsx
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
3
4import {
5 Box,
6 FormControl,
7 InputLabel,
8 MenuItem,
9 Select,
10 TextField,
11} from '@mui/material';
12import { useScenarioStore, GlobalParameters } from '@/stores/scenarioStore';
13import { NumberField, Section } from './InspectorControls';
14
15interface GlobalParametersInspectorProps {
16 item: GlobalParameters;
17}
18
19export function GlobalParametersInspector({
20 item,
21}: GlobalParametersInspectorProps) {
22 const { updateItem } = useScenarioStore.getState();
23 const handleChange = (path: string, value: unknown) =>
24 updateItem(item.id, path, value);
25
26 return (
27 <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
28 <TextField
29 label="Simulation Name"
30 variant="outlined"
31 size="small"
32 fullWidth
33 value={item.simulation_name}
34 onChange={(e) =>
35 handleChange('simulation_name', e.target.value)
36 }
37 />
38 <NumberField
39 label="Start Time (s)"
40 value={item.start}
41 onChange={(v) => handleChange('start', v)}
42 />
43 <NumberField
44 label="End Time (s)"
45 value={item.end}
46 onChange={(v) => handleChange('end', v)}
47 />
48 <NumberField
49 label="Output Sampling Rate (Hz)"
50 value={item.rate}
51 onChange={(v) => handleChange('rate', v)}
52 />
53 <NumberField
54 label="Internal Sim Sampling Rate (Hz)"
55 value={item.simSamplingRate}
56 onChange={(v) => handleChange('simSamplingRate', v)}
57 />
58 <NumberField
59 label="Speed of Light (m/s)"
60 value={item.c}
61 onChange={(v) => handleChange('c', v)}
62 />
63 <NumberField
64 label="Random Seed"
65 value={item.random_seed}
66 onChange={(v) => handleChange('random_seed', v)}
67 />
68 <NumberField
69 label="ADC Bits"
70 value={item.adc_bits}
71 onChange={(v) => handleChange('adc_bits', v)}
72 />
73 <NumberField
74 label="Oversample Ratio"
75 value={item.oversample_ratio}
76 onChange={(v) => handleChange('oversample_ratio', v)}
77 />
78
79 <Section title="Georeference">
80 <NumberField
81 label="Origin Latitude (deg)"
82 value={item.origin.latitude}
83 onChange={(v) => handleChange('origin.latitude', v)}
84 />
85 <NumberField
86 label="Origin Longitude (deg)"
87 value={item.origin.longitude}
88 onChange={(v) => handleChange('origin.longitude', v)}
89 />
90 <NumberField
91 label="Origin Altitude (m)"
92 value={item.origin.altitude}
93 onChange={(v) => handleChange('origin.altitude', v)}
94 />
95 <FormControl fullWidth size="small">
96 <InputLabel>Coordinate System</InputLabel>
97 <Select
98 label="Coordinate System"
99 value={item.coordinateSystem.frame}
100 onChange={(e) =>
101 handleChange(
102 'coordinateSystem.frame',
103 e.target.value
104 )
105 }
106 >
107 <MenuItem value="ENU">ENU (East-North-Up)</MenuItem>
108 <MenuItem value="UTM">UTM</MenuItem>
109 <MenuItem value="ECEF">ECEF</MenuItem>
110 </Select>
111 </FormControl>
112 {item.coordinateSystem.frame === 'UTM' && (
113 <>
114 <NumberField
115 label="UTM Zone"
116 value={item.coordinateSystem.zone ?? null}
117 onChange={(v) =>
118 handleChange('coordinateSystem.zone', v)
119 }
120 />
121 <FormControl fullWidth size="small">
122 <InputLabel>UTM Hemisphere</InputLabel>
123 <Select
124 label="UTM Hemisphere"
125 value={item.coordinateSystem.hemisphere ?? 'N'}
126 onChange={(e) =>
127 handleChange(
128 'coordinateSystem.hemisphere',
129 e.target.value
130 )
131 }
132 >
133 <MenuItem value="N">North</MenuItem>
134 <MenuItem value="S">South</MenuItem>
135 </Select>
136 </FormControl>
137 </>
138 )}
139 </Section>
140 </Box>
141 );
142}