From e921b6600462cb03ed35918f9ba2fe7c89dfa386 Mon Sep 17 00:00:00 2001 From: luoyifan Date: Thu, 5 Jun 2025 17:54:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=A2=E9=80=89=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/ModelUtils.ts | 23 ++++++++++++++++++++++- src/core/controls/SelectInspect.ts | 7 ++++--- src/core/engine/Viewport.ts | 6 ++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/core/ModelUtils.ts b/src/core/ModelUtils.ts index 3abd3ec..cd4d521 100644 --- a/src/core/ModelUtils.ts +++ b/src/core/ModelUtils.ts @@ -140,7 +140,27 @@ export function deletePointByKeyboard() { const entityId = viewport.state.selectedEntityId if (!entityId) { - system.msg('没有选中任何点') + const multiSelectedEntityIds = viewport.state.multiSelectedEntityIds + if (!multiSelectedEntityIds && multiSelectedEntityIds.length === 0) { + system.msg('请选中要删除的实体', 'error') + return + } + + const stateManager = viewport.stateManager + stateManager.beginStateUpdate() + const deleteItems = _.remove(stateManager.vdata.items, (item) => multiSelectedEntityIds.includes(item.id)) + stateManager.endStateUpdate() + if (deleteItems.length === 0) { + system.msg('没有找到要删除的实体', 'error') + } else { + system.msg('删除了 ' + deleteItems.length + ' 个实体') + } + for (const deleteEntityId of multiSelectedEntityIds) { + EventBus.dispatch('entityDeleted', { + deleteEntityId: deleteEntityId + }) + viewport.selectInspect.clearRedSelectionBoxes() + } return } @@ -161,6 +181,7 @@ export function deletePointByKeyboard() { }) system.msg('删除 [' + entityId + ']') + viewport.selectInspect.clearSelectionBox() } export function escByKeyboard() { diff --git a/src/core/controls/SelectInspect.ts b/src/core/controls/SelectInspect.ts index 62c3eff..e008579 100644 --- a/src/core/controls/SelectInspect.ts +++ b/src/core/controls/SelectInspect.ts @@ -167,7 +167,7 @@ export default class SelectInspect implements IControls { * 更新选中对象的包围盒线框 */ updateSelectionBox(selectedObject: THREE.Object3D) { - this.disposeSelectionBox() + this.clearSelectionBox() if (!selectedObject) { return @@ -214,11 +214,12 @@ export default class SelectInspect implements IControls { puFn = undefined // 销毁选择工具 - this.disposeSelectionBox() + this.clearSelectionBox() this.disposeRect() + this.clearRedSelectionBoxes() } - disposeSelectionBox() { + clearSelectionBox() { if (this.selectionBox) { this.viewport.scene.remove(this.selectionBox) this.selectionBox.geometry.dispose() diff --git a/src/core/engine/Viewport.ts b/src/core/engine/Viewport.ts index c87036f..8928f32 100644 --- a/src/core/engine/Viewport.ts +++ b/src/core/engine/Viewport.ts @@ -37,10 +37,12 @@ export default class Viewport { dragControl: any // EsDragControls animationFrameId: any = null scene: SceneHelp + selectInspect = new SelectInspect() + mouseMoveInspect = new MouseMoveInspect() tools: IControls[] = [ - new MouseMoveInspect(), - new SelectInspect() + markRaw(this.selectInspect), + markRaw(this.mouseMoveInspect) ] // 状态管理器