From 2e948026a3997f099cd48c6de80b66d1c8eca8f8 Mon Sep 17 00:00:00 2001 From: Zzc <1373857752@qq.com> Date: Tue, 25 Nov 2025 11:40:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(3d-situational-awareness):=20=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=E5=AE=9E=E4=BD=93=E6=B7=BB=E5=8A=A0=E7=9B=B4=E5=88=B0?= =?UTF-8?q?=E5=9C=B0=E5=BD=A2=E5=87=86=E5=A4=87=E5=B0=B1=E7=BB=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将模拟点和路径起始标记的添加从初始化过程的早期阶段移动到地形完全加载之后。这通过确保CLAMP_TO_GROUND正确生效来防止标记在相机飞行期间漂浮。添加了渲染请求以触发即时渲染。 --- .../3DSituationalAwarenessRefactor/index.vue | 71 +++++++++++++------ 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue index b7be8de..1e98532 100644 --- a/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue +++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/index.vue @@ -694,28 +694,30 @@ const initializeScene = async () => { }, }) - // 3. 添加模拟点位(人员和设备) - const allMockPoints = mockDataService.getAllMockPoints() - allMockPoints.forEach((point) => { - const config = - point.type === 'soldier' - ? mockDataService.createPersonnelEntityConfig(point, soldierIcon) - : mockDataService.createDeviceEntityConfig(point, deviceIcon) - viewer.entities.add(config) - }) - console.log(`[index.vue] 已添加 ${allMockPoints.length} 个模拟点位`) + // 3. 添加模拟点位(人员和设备)- 已移至步骤10.5(地形就绪后) + // 原因:在地形加载前添加会导致相机飞行时标记悬浮 + // const allMockPoints = mockDataService.getAllMockPoints() + // allMockPoints.forEach((point) => { + // const config = + // point.type === 'soldier' + // ? mockDataService.createPersonnelEntityConfig(point, soldierIcon) + // : mockDataService.createDeviceEntityConfig(point, deviceIcon) + // viewer.entities.add(config) + // }) + // console.log(`[index.vue] 已添加 ${allMockPoints.length} 个模拟点位`) - // 4. 添加路径起点标记(用于"一键启动") - const allPaths = mockDataService.getAllAnimationPaths() - Object.entries(allPaths).forEach(([pathId, path]) => { - const icon = path.metadata.type === 'soldier' ? soldierIcon : deviceIcon - const config = mockDataService.createPathStartMarkerConfig( - { ...path, id: pathId }, - icon - ) - viewer.entities.add(config) - }) - console.log('[index.vue] 已添加 3 个路径起点标记') + // 4. 添加路径起点标记(用于"一键启动")- 已移至步骤10.5(地形就绪后) + // 原因:在地形加载前添加会导致相机飞行时标记悬浮 + // const allPaths = mockDataService.getAllAnimationPaths() + // Object.entries(allPaths).forEach(([pathId, path]) => { + // const icon = path.metadata.type === 'soldier' ? soldierIcon : deviceIcon + // const config = mockDataService.createPathStartMarkerConfig( + // { ...path, id: pathId }, + // icon + // ) + // viewer.entities.add(config) + // }) + // console.log('[index.vue] 已添加 3 个路径起点标记') // 5. 设置地图点击事件监听 mapClickHandler.setupClickHandler(viewer, registerEventHandler, registerPostRenderListener) @@ -781,6 +783,33 @@ const initializeScene = async () => { console.log('[index.vue] 等待地形完全就绪...') await new Promise(resolve => setTimeout(resolve, 1000)) + // 10.5. 添加模拟点位和路径起点标记(在地形就绪后) + console.log('[index.vue] 添加模拟点位...') + const allMockPoints = mockDataService.getAllMockPoints() + allMockPoints.forEach((point) => { + const config = + point.type === 'soldier' + ? mockDataService.createPersonnelEntityConfig(point, soldierIcon) + : mockDataService.createDeviceEntityConfig(point, deviceIcon) + viewer.entities.add(config) + }) + console.log(`[index.vue] 已添加 ${allMockPoints.length} 个模拟点位`) + + // 添加路径起点标记(用于"一键启动") + const allPaths = mockDataService.getAllAnimationPaths() + Object.entries(allPaths).forEach(([pathId, path]) => { + const icon = path.metadata.type === 'soldier' ? soldierIcon : deviceIcon + const config = mockDataService.createPathStartMarkerConfig( + { ...path, id: pathId }, + icon + ) + viewer.entities.add(config) + }) + console.log('[index.vue] 已添加 3 个路径起点标记') + + // 触发立即渲染,确保 CLAMP_TO_GROUND 生效 + viewer.scene.requestRender() + // 11. 加载应急资源数据(在地形就绪后) console.log('[index.vue] 加载应急资源数据...') await loadEmergencyResources(DISASTER_CENTER.lon, DISASTER_CENTER.lat)