import {Checker,ColorField,ControlRow,Inspector,RangeControl,Select} from '@nodedc/ui-react'; import type {SceneSettings,PointColorMode,PointPalette} from './sceneSettings'; const colorModeOptions: Array<{ value: PointColorMode; label: string; description: string }> = [ { value: "intensity", label: "Интенсивность", description: "Значение отражённого сигнала" }, { value: "height", label: "Высота Z", description: "Градиент по вертикальной координате" }, { value: "distance", label: "Расстояние", description: "Дальность точки от сенсора" }, { value: "rgb", label: "RGB", description: "Цвет, если он присутствует в данных" }, { value: "class", label: "Класс", description: "Категория внешнего модуля восприятия" }, ]; const paletteOptions: Array<{ value: PointPalette; label: string; description: string }> = [ { value: "turbo", label: "Turbo", description: "Контрастный спектральный градиент" }, { value: "viridis", label: "Viridis", description: "Равномерный перцептивный градиент" }, { value: "plasma", label: "Plasma", description: "Тёплый контрастный градиент" }, { value: "grayscale", label: "Серый", description: "Монохромное отображение" }, { value: "custom", label: "Свой цвет", description: "Один назначенный цвет" }, ]; export function SceneDisplayControls({displayDraft,stageDisplayPatch,commitDisplayPatch,flushDisplaySettings,replayPresented=false}:{ displayDraft:SceneSettings;stageDisplayPatch:(patch:Partial)=>void; commitDisplayPatch:(patch:Partial)=>void;flushDisplaySettings:()=>void;replayPresented?:boolean; }) { return (
`${value.toFixed(1)} пкс`} onChange={(pointSize) => stageDisplayPatch({ pointSize })} />
stageDisplayPatch({ palette })} />
{displayDraft.palette === "custom" || displayDraft.colorMode === "class" ? (
stageDisplayPatch({ customColor })} />
) : null} {replayPresented ? (

Первый новый режим читает индекс архивных точек. Следующие палитры переключаются из подготовленного цветового кэша без переэкспорта геометрии.

) : null} ), }, { id: "history", label: "Накопление и время", description: "История облака и траектория", content: (
(value === 0 ? "Только кадр" : `${value} с`)} onChange={(accumulationSeconds) => stageDisplayPatch({ accumulationSeconds })} />
Линия пути устройства в координатах сцены commitDisplayPatch({ showTrajectory })} />
), }, { id: "scene", label: "Окружение сцены", description: "Сетка, подписи и камеры", content: (
commitDisplayPatch({ showGrid })} />
Появятся после подключения семантических сущностей undefined} />
Камерный канал пока не подключён undefined} />
), }, ]} /> ); }