From 44925388afbf69c9350b8bfa3672ad540f44ed20 Mon Sep 17 00:00:00 2001 From: zguiy <1415466602@qq.com> Date: Mon, 25 May 2026 10:43:25 +0800 Subject: [PATCH] 1 --- index.html | 65 ++++++++-- src/babylonjs/AppDropZone.ts | 237 +++++++++++++++++++++++++++++++++++ src/babylonjs/AppEngin.ts | 2 - src/babylonjs/AppModel.ts | 29 +++++ src/babylonjs/MainApp.ts | 2 + 5 files changed, 320 insertions(+), 15 deletions(-) diff --git a/index.html b/index.html index ef795a6..7676253 100644 --- a/index.html +++ b/index.html @@ -453,7 +453,7 @@
@@ -911,23 +911,62 @@ // 生成放置区域按钮事件 let dropZoneVisible = false; - document.getElementById('dropzone-btn').addEventListener('click', () => { - if (!dropZoneVisible) { + document.getElementById('dropzone-btn').addEventListener('click', async () => { + const { wallName, index } = dropzone_data; + // 先正常放置模型 + await window.AppLogic.getEvent(dropzone_data, sku); - // 更新按钮文字 - document.getElementById('dropzone-btn').textContent = '隐藏放置区域'; - console.log('已生成并显示放置区域'); - } else { - // 隐藏放置区域 - kernel.dropZone.hideAll(); - dropZoneVisible = false; + // 检查该墙面是否已满 + const zones = kernel.dropZone.getPlacementZones(); + const wallZones = zones.filter(z => z.wallName === wallName); - // 更新按钮文字 - document.getElementById('dropzone-btn').textContent = '生成放置区域'; - console.log('已隐藏放置区域'); + // 获取该墙面已放置的模型 + const placedModels = kernel.dropZone.getPlacedModels(wallName); + + // 如果该墙面所有区域都已占用 + if (placedModels.length === wallZones.length) { + console.log(`${wallName} 墙面已满,自动排列模型`); + + // 按区域索引排序 + const sortedZones = wallZones.sort((a, b) => a.index - b.index); + + // 重新排列模型到对应区域 + placedModels.forEach((model, idx) => { + const targetZone = sortedZones[idx]; + const { position, rotation } = targetZone.transform; + + // 移动模型到目标位置 + kernel.transform.position({ + modelId: model.modelId, + vector3: position + }); + + kernel.transform.rotation({ + modelId: model.modelId, + vector3: rotation + }); + + // 禁用该模型的拖拽 + kernel.model.setDragEnabled(model.modelId, false); + }); + + console.log('模型已自动排列并禁用拖拽'); } + // if (!dropZoneVisible) { + // // 更新按钮文字 + // document.getElementById('dropzone-btn').textContent = '隐藏放置区域'; + // console.log('已生成并显示放置区域'); + // } else { + // // 隐藏放置区域 + // kernel.dropZone.hideAll(); + // dropZoneVisible = false; + + // // 更新按钮文字 + // document.getElementById('dropzone-btn').textContent = '生成放置区域'; + // console.log('已隐藏放置区域'); + // } }); // 初始化放置区域配置数据(只需设置一次) diff --git a/src/babylonjs/AppDropZone.ts b/src/babylonjs/AppDropZone.ts index d6c00e9..938fee8 100644 --- a/src/babylonjs/AppDropZone.ts +++ b/src/babylonjs/AppDropZone.ts @@ -21,6 +21,7 @@ export class AppDropZone { private scene: Scene; private placementWall: AppPlacementWall; private appModel: AppModel | null = null; + private mainApp: any = null; // 内部映射:放置区域 -> 模型ID private zoneModelMap: Map