fix: clarify lidar source and processing result

This commit is contained in:
DCCONSTRUCTIONS
2026-07-26 10:45:18 +03:00
parent 36ea7ea3d8
commit f791b63890
3 changed files with 70 additions and 27 deletions
@@ -3152,6 +3152,10 @@
background: #06070a; background: #06070a;
} }
.lidar-local-surface__stage[data-loading="true"] {
grid-template-columns: minmax(0, 1fr);
}
.lidar-local-surface__stage .lidar-ground-scene, .lidar-local-surface__stage .lidar-ground-scene,
.lidar-local-surface__stage .lidar-ground-scene-placeholder { .lidar-local-surface__stage .lidar-ground-scene-placeholder {
min-height: 30rem; min-height: 30rem;
@@ -3159,6 +3163,33 @@
border-radius: 0; border-radius: 0;
} }
.lidar-local-surface__stage .lidar-ground-scene-placeholder > span {
color: var(--nodedc-text-secondary);
font-size: 0.62rem;
line-height: 1.4;
}
.lidar-local-surface__diagnostics {
display: grid;
gap: 0.72rem;
margin-top: 0.35rem;
border-top: 1px solid var(--station-hairline);
padding-top: 1rem;
}
.lidar-local-surface__diagnostics > header {
display: grid;
gap: 0.24rem;
}
.lidar-local-surface__diagnostics > header p {
max-width: 48rem;
margin: 0;
color: var(--nodedc-text-muted);
font-size: 0.62rem;
line-height: 1.5;
}
.lidar-local-surface__frame { .lidar-local-surface__frame {
display: grid; display: grid;
align-content: start; align-content: start;
@@ -241,12 +241,12 @@ export function LidarLocalSurfacePanel({
> >
<header className="lidar-local-surface__heading"> <header className="lidar-local-surface__heading">
<div> <div>
<span className="section-eyebrow">ЛОКАЛЬНАЯ МОДЕЛЬ LIDAR · L2.6</span> <span className="section-eyebrow">РЕЗУЛЬТАТ ОБРАБОТКИ · L2.6</span>
<h3>Поверхность и наблюдаемые препятствия</h3> <h3>Поверхность и наблюдаемые препятствия</h3>
<p> <p>
Поверхность строится по предыдущему TTL-окну и проверяется на Основной результат выбранного интервала. Поверхность строится по
следующем кадре. Текущий кадр исключён из prediction input; предыдущему TTL-окну и проверяется на следующем кадре; текущий кадр
константа 1,27 м и команды в сканер не используются. и фиксированная высота в prediction input не используются.
</p> </p>
</div> </div>
<StatusBadge <StatusBadge
@@ -314,24 +314,6 @@ export function LidarLocalSurfacePanel({
</div> </div>
) : null} ) : null}
{timeline && review && selectedFrameIndex !== null ? (
<>
<LidarLocalSurfaceTimeline
timeline={timeline}
review={review}
selectedFrameIndex={selectedFrameIndex}
onSelectionStart={captureFrameSelectionScroll}
onSelectFrame={selectFrame}
/>
<LidarLocalSurfaceReviewQueue
review={review}
selectedFrameIndex={selectedFrameIndex}
onSelectionStart={captureFrameSelectionScroll}
onSelectFrame={selectFrame}
/>
</>
) : null}
{frame ? ( {frame ? (
<div <div
className="lidar-local-surface__view-switch" className="lidar-local-surface__view-switch"
@@ -361,7 +343,10 @@ export function LidarLocalSurfacePanel({
</div> </div>
) : null} ) : null}
<div className="lidar-local-surface__stage"> <div
className="lidar-local-surface__stage"
data-loading={!frame ? "true" : undefined}
>
{cloudFrame && frame ? ( {cloudFrame && frame ? (
<LidarGroundPointCloud frame={cloudFrame} mode={surfaceView} /> <LidarGroundPointCloud frame={cloudFrame} mode={surfaceView} />
) : ( ) : (
@@ -369,7 +354,7 @@ export function LidarLocalSurfacePanel({
<StatusBadge tone={error ? "danger" : "accent"}> <StatusBadge tone={error ? "danger" : "accent"}>
{error ? "Ошибка" : "Загрузка"} {error ? "Ошибка" : "Загрузка"}
</StatusBadge> </StatusBadge>
<span>{error ?? "Читаем производную выбранной сцены"}</span> <span>{error ?? "Обработка производной выбранной сцены"}</span>
</div> </div>
)} )}
{frame ? ( {frame ? (
@@ -458,6 +443,31 @@ export function LidarLocalSurfacePanel({
</aside> </aside>
) : null} ) : null}
</div> </div>
{timeline && review && selectedFrameIndex !== null ? (
<div className="lidar-local-surface__diagnostics">
<header>
<span className="section-eyebrow">ДИАГНОСТИКА ЗАПИСИ</span>
<p>
График и очередь ниже помогают выбрать кадр для разбора, но не
заменяют визуальную проверку результата выше.
</p>
</header>
<LidarLocalSurfaceTimeline
timeline={timeline}
review={review}
selectedFrameIndex={selectedFrameIndex}
onSelectionStart={captureFrameSelectionScroll}
onSelectFrame={selectFrame}
/>
<LidarLocalSurfaceReviewQueue
review={review}
selectedFrameIndex={selectedFrameIndex}
onSelectionStart={captureFrameSelectionScroll}
onSelectFrame={selectFrame}
/>
</div>
) : null}
</section> </section>
); );
} }
@@ -276,16 +276,18 @@ export function LidarQualityWorkspace({
<header className="panel-heading lidar-field-review__heading"> <header className="panel-heading lidar-field-review__heading">
<div> <div>
<span className="section-eyebrow"> <span className="section-eyebrow">
{fieldReview ? "ОБЛАКО LIDAR · RAVNOVES00" : "ОБЛАКО LIDAR · ЗАПИСЬ"} {fieldReview
? "ИСХОДНАЯ ЗАПИСЬ LIDAR · RAVNOVES00"
: "ИСХОДНАЯ ЗАПИСЬ LIDAR"}
</span> </span>
<h2> <h2>
{fieldReview {fieldReview
? `Городская сцена: ${selectedFieldWindow?.label ?? fieldReview.displayName}` ? `Исходная сцена: ${selectedFieldWindow?.label ?? fieldReview.displayName}`
: `Кадр ${groundFrameIndex + 1} из ${groundBenchmark?.frames ?? 0}`} : `Кадр ${groundFrameIndex + 1} из ${groundBenchmark?.frames ?? 0}`}
</h2> </h2>
<p> <p>
{fieldReview {fieldReview
? "Выберите один из пяти интервалов, вращайте облако мышью и при необходимости включите экспериментальные маски обработки." ? "Накопленное облако LiDAR и кадр камеры — контекст выбранного интервала. Результат обработки L2.6 расположен ниже."
: "Полевая запись на этом хосте не подключена. Показываем доступную запись выбранного LiDAR без подмешивания публичных датасетов."} : "Полевая запись на этом хосте не подключена. Показываем доступную запись выбранного LiDAR без подмешивания публичных датасетов."}
</p> </p>
</div> </div>