From c992660011a3c588262336719e9c8b1665271a60 Mon Sep 17 00:00:00 2001
From: zguiy <1415466602@qq.com>
Date: Fri, 24 Apr 2026 19:39:58 +0800
Subject: [PATCH] 1
---
index.html | 6 ++++--
index.js | 16 +++++-----------
src/babylonjs/AppModel.ts | 36 +++++++++++++++++++++++++++++++++---
src/babylonjs/MainApp.ts | 2 +-
4 files changed, 43 insertions(+), 17 deletions(-)
diff --git a/index.html b/index.html
index c7edc6e..d924757 100644
--- a/index.html
+++ b/index.html
@@ -277,6 +277,7 @@
+
@@ -418,7 +419,7 @@
const modelUrl = `https://sdk.zguiy.com/resurces/model/${currentText}.glb`;
console.log('替换百叶模型:', modelUrl);
try {
- await kernel.model.replace('百叶', modelUrl);
+ await kernel.model.replace('卷帘小', modelUrl);
console.log(`百叶模型已替换为 ${currentText}`);
} catch (error) {
console.error(`百叶模型替换失败:`, error);
@@ -512,7 +513,8 @@
document.getElementById('remove-model-btn').addEventListener('click', () => {
const pickedMesh = window.getCurrentPickedMesh();
if (pickedMesh) {
- const success = kernel.model.remove(pickedMesh);
+ const meshName = pickedMesh.name;
+ const success = kernel.model.remove(meshName);
if (success) {
console.log('模型已移除');
// 关闭信息框
diff --git a/index.js b/index.js
index 4320302..e6cd064 100644
--- a/index.js
+++ b/index.js
@@ -16,10 +16,9 @@ const config = {
kernel.init(config);
-kernel.model.add("百叶窗小","https://sdk.zguiy.com/resurces/model/百叶窗小.glb")
-kernel.model.add("卷帘大","https://sdk.zguiy.com/resurces/model/卷帘大.glb")
-kernel.model.add("卷帘小","https://sdk.zguiy.com/resurces/model/卷帘小.glb")
-kernel.model.add("小桌","https://sdk.zguiy.com/resurces/model/小桌.glb")
+kernel.model.add("卷帘大", "https://sdk.zguiy.com/resurces/model/卷帘大.glb")
+kernel.model.add("卷帘小", "https://sdk.zguiy.com/resurces/model/卷帘小.glb")
+kernel.model.add("小桌", "https://sdk.zguiy.com/resurces/model/小桌.glb")
kernel.on('model:load:progress', (data) => {
console.log('模型加载事件', data);
@@ -34,9 +33,6 @@ kernel.on('model:loaded', (data) => {
if (progressContainer) {
progressContainer.style.display = 'none';
}
-
-
-
});
kernel.on('all:ready', (data) => {
@@ -46,12 +42,10 @@ kernel.on('all:ready', (data) => {
attribute: 'alpha',
value: 0.5,
});
-
-
kernel.hotspot.render([
{
id: "h1",
- type:'hotspot',
+ type: 'hotspot',
name: "卷帘门",
meshName: "Valve_01",
icon: "https://bpic.588ku.com/element_pic/20/06/30/d1046b01afc0b9586844350d131f4daf.jpg!/fw/253/quality/90/unsharp/true/compress/true",
@@ -90,7 +84,7 @@ kernel.on('model:click', (data) => {
document.getElementById('info-position').textContent = `坐标: [${position.x.toFixed(2)}, ${position.y.toFixed(2)}, ${position.z.toFixed(2)}]`;
// 将DOM附加到点击的3D坐标(会自动显示)
- kernel.domTo3D.attach('model-info', infoDiv, [position.x, position.y, position.z], { x: -2, y: -2});
+ kernel.domTo3D.attach('model-info', infoDiv, [position.x, position.y, position.z], { x: -2, y: -2 });
}
});
diff --git a/src/babylonjs/AppModel.ts b/src/babylonjs/AppModel.ts
index fe9d6c3..9654c3c 100644
--- a/src/babylonjs/AppModel.ts
+++ b/src/babylonjs/AppModel.ts
@@ -291,6 +291,21 @@ export class AppModel extends Monobehiver {
});
}
+ /**
+ * 根据 mesh 名称查找 mesh 对象
+ * @param meshName mesh 名称
+ * @returns mesh 对象,未找到返回 undefined
+ */
+ private findMeshByName(meshName: string): AbstractMesh | undefined {
+ const keys = this.modelDic.Keys();
+ for (const key of keys) {
+ const meshes = this.modelDic.Get(key);
+ const found = meshes?.find(m => m.name === meshName);
+ if (found) return found;
+ }
+ return undefined;
+ }
+
/**
* 根据 mesh 查找所属的模型名称
* @param mesh 网格对象
@@ -308,11 +323,24 @@ export class AppModel extends Monobehiver {
}
/**
- * 根据 mesh 移除所属的整个模型
- * @param mesh 网格对象
+ * 根据 mesh 或 mesh 名称移除所属的整个模型
+ * @param meshOrName 网格对象或网格名称
* @returns 是否成功移除
*/
- remove(mesh: AbstractMesh): boolean {
+ remove(meshOrName: AbstractMesh | string): boolean {
+ let mesh: AbstractMesh | undefined;
+
+ // 判断传入的是对象还是字符串
+ if (typeof meshOrName === 'string') {
+ mesh = this.findMeshByName(meshOrName);
+ if (!mesh) {
+ console.warn(`未找到名为 ${meshOrName} 的网格`);
+ return false;
+ }
+ } else {
+ mesh = meshOrName;
+ }
+
const modelName = this.findModelNameByMesh(mesh);
if (modelName) {
this.removeByName(modelName);
@@ -328,6 +356,8 @@ export class AppModel extends Monobehiver {
* @param newModelUrl 新模型URL
*/
async replaceModel(modelName: string, newModelUrl: string): Promise {
+ console.log( modelName,this.modelDic);
+
this.removeByName(modelName);
return await this.addSingle(modelName, newModelUrl);
}
diff --git a/src/babylonjs/MainApp.ts b/src/babylonjs/MainApp.ts
index 24a072d..6e56a9e 100644
--- a/src/babylonjs/MainApp.ts
+++ b/src/babylonjs/MainApp.ts
@@ -93,6 +93,6 @@ export class MainApp {
async dispose(): Promise {
this.appModel?.clean();
this.appEnv?.clean();
- this.appHotspot?.clear();
+ // this.appHotspot?.clear();
}
}