fix(3d): restore complete SCADA scene context
The scene previously returned early when realtime rows were absent and selected map-tier assets for network mode, hiding SCADA markers and station interiors and floors. Use SCADA timestamps as valid frames, render node-aligned monitor markers, and pin the full network context in the manifest regression test. Keep the timeline close action inside its drag header.
This commit is contained in:
@@ -157,6 +157,28 @@ const resolveCommonFrameTime = (
|
||||
)[0];
|
||||
};
|
||||
|
||||
const resolveNearestRowTime = <T extends { time: string }>(
|
||||
queryTime: Date,
|
||||
rows: T[],
|
||||
) => {
|
||||
const target = queryTime.getTime();
|
||||
const candidates = Array.from(
|
||||
new Set(
|
||||
rows
|
||||
.map((row) => toTimestamp(row.time))
|
||||
.filter(
|
||||
(time): time is number =>
|
||||
time !== null &&
|
||||
Math.abs(time - target) <= SCENE_FRAME_TOLERANCE_MS,
|
||||
),
|
||||
),
|
||||
);
|
||||
if (candidates.length === 0) return null;
|
||||
return candidates.sort(
|
||||
(left, right) => Math.abs(left - target) - Math.abs(right - target),
|
||||
)[0];
|
||||
};
|
||||
|
||||
const normalizeLinkStatus = (
|
||||
value: number | null,
|
||||
): SceneLinkResult["status"] => {
|
||||
@@ -210,7 +232,13 @@ export const buildSceneFrame = ({
|
||||
simulationUnits?: NetworkResultUnits;
|
||||
}): SceneFrame => {
|
||||
const selectedTime = queryTime.toISOString();
|
||||
const frameTime = resolveCommonFrameTime(queryTime, nodeRows, linkRows);
|
||||
const simulationFrameTime = resolveCommonFrameTime(
|
||||
queryTime,
|
||||
nodeRows,
|
||||
linkRows,
|
||||
);
|
||||
const frameTime =
|
||||
simulationFrameTime ?? resolveNearestRowTime(queryTime, scadaRows);
|
||||
if (frameTime === null) {
|
||||
return {
|
||||
selectedTime,
|
||||
@@ -313,7 +341,10 @@ export const buildSceneFrame = ({
|
||||
missingLinks: Math.max(0, model.linkIds.size - Object.keys(links).length),
|
||||
ignoredElements,
|
||||
},
|
||||
warnings: [],
|
||||
warnings:
|
||||
simulationFrameTime === null
|
||||
? ["当前时刻无在线模拟结果,已显示 SCADA 监测点。"]
|
||||
: [],
|
||||
};
|
||||
};
|
||||
|
||||
@@ -404,5 +435,5 @@ export const fetchSceneFrame = async ({
|
||||
scadaRows,
|
||||
simulationUnits: networkOptions,
|
||||
});
|
||||
return { ...frame, warnings };
|
||||
return { ...frame, warnings: [...frame.warnings, ...warnings] };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user