feat(3d): refine scene controls and camera views
Generic Container CI/CD / test-build-publish (push) Successful in 2m20s
Frontend CI/CD v2 / build-test-publish-and-deploy (push) Successful in 2m20s

Keep the control panel geometry stable when toggling building context, and use accessible switch controls to prevent focus-driven movement. Add browser coverage for camera framing, opacity, responsive layout, and the default 6x pipe scale.
This commit is contained in:
2026-09-14 15:41:44 +08:00
parent 69ad145e75
commit a9b25b94d8
11 changed files with 567 additions and 56 deletions
@@ -38,7 +38,7 @@ import {
type SceneRuntimeState,
} from "./sceneProtocol";
const SCENE_URL = "/three-dimensional/zjb/v29/preview.html?host=platform2";
const SCENE_URL = "/three-dimensional/zjb/v29/preview.html?host=platform2&v=32-context-opacity";
const SCENE_LOAD_TIMEOUT_MS = 30_000;
const initialRuntimeState: SceneRuntimeState = {
@@ -48,7 +48,7 @@ const initialRuntimeState: SceneRuntimeState = {
roofVisible: true,
displayMode: "global",
style: {
scale: 8,
scale: 6,
mode: "uniform",
color: "#098ed0",
missingColor: "#89949d",
@@ -68,6 +68,7 @@ const initialRuntimeState: SceneRuntimeState = {
appearance: {
preset: "day",
exposure: 0.95,
contextOpacity: 0.4,
shadows: true,
effects: true,
quality: "standard",
@@ -128,7 +129,7 @@ export default function ThreeDimensionalScene() {
const [runtimeState, setRuntimeState] =
useState<SceneRuntimeState>(initialRuntimeState);
const [selection, setSelection] = useState<SceneAssetSelection | null>(null);
const [controlsOpen, setControlsOpen] = useState(false);
const [controlsOpen, setControlsOpen] = useState(true);
const [controlTab, setControlTab] = useState<ControlTab>("scene");
const [timelineOpen, setTimelineOpen] = useState(true);
const [pressureDevices, setPressureDevices] = useState<PressureDevice[]>([]);