From 127100d27bdad67c16dad3aeb77e6b5e6629b8b6 Mon Sep 17 00:00:00 2001 From: zguiy <1415466602@qq.com> Date: Tue, 19 May 2026 15:08:02 +0800 Subject: [PATCH] 1 --- index.html | 15 +++++++++--- src/babylonjs/AppModel.ts | 49 ++++++++++++++++++--------------------- src/kernel/Adapter.ts | 4 ++-- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/index.html b/index.html index 5448067..5313ae9 100644 --- a/index.html +++ b/index.html @@ -352,10 +352,15 @@
- - + 13 + + + + 10 + + - +
@@ -749,9 +754,13 @@ // 移除按钮事件 document.getElementById('remove-model-btn').addEventListener('click', () => { const pickedMesh = window.getCurrentPickedMesh(); + console.log(pickedMesh); + if (pickedMesh) { const meshName = pickedMesh.name; const modelName = kernel.model.findModelNameByMesh(pickedMesh); + console.log(modelName); + const success = kernel.model.removeByName(modelName); if (success) { console.log('模型已移除'); diff --git a/src/babylonjs/AppModel.ts b/src/babylonjs/AppModel.ts index 5131763..4a591ca 100644 --- a/src/babylonjs/AppModel.ts +++ b/src/babylonjs/AppModel.ts @@ -169,7 +169,7 @@ export class AppModel extends Monobehiver { const newName = `${originalName}_${modelId}`; const clonedMaterial = originalMaterial.clone(newName); clonedMaterials.set(originalName, clonedMaterial); - + } // 应用克隆的材质 @@ -177,7 +177,7 @@ export class AppModel extends Monobehiver { } }); - + } /** 为网格设置阴影(投射和接收) */ @@ -268,9 +268,9 @@ export class AppModel extends Monobehiver { */ private async addSingle(modelName: string, modelId: string, modelUrl: string, modelControlType?: ModelControlType, drag?: DragConfig, transform?: ModelTransform): Promise { // 检查是否已存在 - const existingMeshes = this.modelDic.Get(modelName+'_'+modelId); + const existingMeshes = this.modelDic.Get(modelName + '_' + modelId); if (existingMeshes?.length && !existingMeshes[0].isDisposed()) { - console.log(`模型 ${modelName+modelId} 已存在,直接显示`); + console.log(`模型 ${modelName + modelId} 已存在,直接显示`); this.showMeshes(existingMeshes); return { success: true, meshes: existingMeshes }; } @@ -285,11 +285,11 @@ export class AppModel extends Monobehiver { this.cloneMaterials(result.meshes, modelId); // 存储模型 - result.meshes = this.createModelRoot(modelName+'_'+modelId, result.meshes); - this.modelDic.Set(modelName+'_'+modelId, result.meshes); + result.meshes = this.createModelRoot(modelName + '_' + modelId, result.meshes); + this.modelDic.Set(modelName + '_' + modelId, result.meshes); // 存储元数据 - this.modelMetadataDic.Set(modelName+'_'+modelId, { + this.modelMetadataDic.Set(modelName + '_' + modelId, { modelName: modelName, modelId: modelId, modelUrl: modelUrl, @@ -300,12 +300,12 @@ export class AppModel extends Monobehiver { // 应用 transform if (transform) { - this.applyTransform(modelName+'_'+modelId, transform); + this.applyTransform(modelName + '_' + modelId, transform); } // 配置拖拽功能 if (drag) { - this.mainApp.appModelDrag?.configureDrag(modelName+'_'+modelId, drag); + this.mainApp.appModelDrag?.configureDrag(modelName + '_' + modelId, drag); } // 更新 GameManager 的字典 @@ -340,10 +340,10 @@ export class AppModel extends Monobehiver { this.cloneMaterials(result.meshes, modelId); result.meshes = this.createModelRoot(modelName, result.meshes); - this.modelDic.Set(modelName+'_'+modelId, result.meshes); + this.modelDic.Set(modelName + '_' + modelId, result.meshes); // 存储元数据 - this.modelMetadataDic.Set(modelName+'_'+modelId, { + this.modelMetadataDic.Set(modelName + '_' + modelId, { modelName: modelName, modelId: modelId, modelUrl: modelUrl, @@ -354,12 +354,12 @@ export class AppModel extends Monobehiver { // 应用 transform if (transform) { - this.applyTransform(modelName+'_'+modelId, transform); + this.applyTransform(modelName + '_' + modelId, transform); } // 配置拖拽功能 if (drag) { - this.mainApp.appModelDrag?.configureDrag(modelName+'_'+modelId, drag); + this.mainApp.appModelDrag?.configureDrag(modelName + '_' + modelId, drag); } } @@ -436,11 +436,6 @@ export class AppModel extends Monobehiver { const keys = this.modelDic.Keys(); for (const key of keys) { const meshes = this.modelDic.Get(key); - meshes.forEach(mesh => { - console.log(mesh.uniqueId); - console.log(mesh.name); - - }); if (meshes?.some(m => m === mesh || m.uniqueId === mesh.uniqueId)) { return key; @@ -456,7 +451,7 @@ export class AppModel extends Monobehiver { */ remove(meshOrName: AbstractMesh | string): boolean { let mesh: AbstractMesh | undefined; - + // 判断传入的是对象还是字符串 if (typeof meshOrName === 'string') { @@ -483,8 +478,8 @@ export class AppModel extends Monobehiver { * @param modelConfig 模型配置对象 */ async replaceModel(modelConfig: ModelMetadata): Promise { - - + + this.removeByName(modelConfig.modelId); return await this.addSingle( @@ -501,19 +496,19 @@ export class AppModel extends Monobehiver { * 销毁指定模型 * @param modelName 模型名称 */ - removeByName(modelName: string): void { + removeByName(modelName: string): boolean { const meshes = this.modelDic.Get(modelName); if (!meshes?.length) { console.warn(`Model not found: ${modelName}`); - return; + return false; } this.getModelTransformTargets(meshes).forEach(mesh => mesh.dispose(false, true)); this.modelDic.Remove(modelName); this.modelMetadataDic.Remove(modelName); this.mainApp.gameManager?.updateDictionaries(); - - + return true; + } /** @@ -522,8 +517,8 @@ export class AppModel extends Monobehiver { */ removeAll(): void { const modelNames = this.modelDic.Keys(); - - + + modelNames.forEach(modelName => { const meshes = this.modelDic.Get(modelName); diff --git a/src/kernel/Adapter.ts b/src/kernel/Adapter.ts index a9d4161..e2db1ce 100644 --- a/src/kernel/Adapter.ts +++ b/src/kernel/Adapter.ts @@ -34,8 +34,8 @@ export class KernelAdapter { * 销毁指定模型 * @param modelName 模型名称 */ - removeByName: (modelName: string): void => { - this.mainApp.appModel.removeByName(modelName); + removeByName: (modelName: string): boolean => { + return this.mainApp.appModel.removeByName(modelName); }, /** * 根据网格移除所属的整个模型