From dc63f94e44d2d9c7f8e3d14b0cb0fe820db361d8 Mon Sep 17 00:00:00 2001 From: yuding <1023798085@qq.com> Date: Wed, 28 Jan 2026 11:24:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(engine-manager):=20=E6=9A=B4=E9=9C=B2?= =?UTF-8?q?=E6=BC=AB=E6=B8=B8=E5=8A=9F=E8=83=BD=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/engine-manager.ts | 112 +++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/managers/engine-manager.ts b/src/managers/engine-manager.ts index b313932..5d07104 100644 --- a/src/managers/engine-manager.ts +++ b/src/managers/engine-manager.ts @@ -8,6 +8,7 @@ import { RightKeyManager } from './right-key-manager'; import { infoMenuButton } from '../components/menu/buttons/info'; import { homeMenuButton } from '../components/menu/buttons/home'; import type { MeasureMode } from '../types/measure'; +import type { SectionBoxRange } from '../components/section-box-panel/types'; /** * 3D 引擎管理器 @@ -195,6 +196,49 @@ export class EngineManager extends BaseManager { return this.engineInstance.getCurrentSectionAxis(); } + /** 激活剖切盒 */ + public activateSectionBox(): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.activateSectionBox(); + } + + /** 停用剖切盒 */ + public deactivateSectionBox(): void { + if (!this.engineInstance) { + return; + } + this.engineInstance.deactivateSectionBox(); + } + + /** 设置剖切盒范围(百分比 0-100) */ + public setSectionBoxRange(range: SectionBoxRange): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.setSectionBoxRange(range); + } + + /** 适应剖切盒到模型 */ + public fitSectionBoxToModel(): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.fitSectionBoxToModel(); + } + + /** 重置剖切盒 */ + public resetSectionBox(): void { + if (!this.engineInstance) { + return; + } + this.engineInstance.resetSectionBox(); + } + /** 激活框选放大功能 */ public activateZoomBox(): void { if (!this.engineInstance) { @@ -204,6 +248,74 @@ export class EngineManager extends BaseManager { this.engineInstance.activateZoomBox(); } + // ==================== 漫游功能 ==================== + + /** 激活第一人称漫游模式 */ + public activateFirstPersonMode(): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.activateFirstPersonMode(); + } + + /** 停用第一人称漫游模式 */ + public deactivateFirstPersonMode(): void { + if (!this.engineInstance) { + return; + } + this.engineInstance.deactivateFirstPersonMode(); + } + + /** + * 设置漫游移动速度 + * @param speed 移动速度 + */ + public setWalkSpeed(speed: number): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.setWalkSpeed(speed); + } + + /** + * 设置漫游重力开关 + * @param enabled 是否启用重力 + */ + public setWalkGravity(enabled: boolean): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.setWalkGravity(enabled); + } + + /** + * 设置漫游碰撞检测开关 + * @param enabled 是否启用碰撞检测 + */ + public setWalkCollision(enabled: boolean): void { + if (!this.engineInstance) { + console.warn('[EngineManager] 3D Engine not initialized.'); + return; + } + this.engineInstance.setWalkCollision(enabled); + } + + /** + * 获取漫游模式是否激活 + * @returns 是否处于漫游模式 + */ + public isFirstPersonModeActive(): boolean { + if (!this.engineInstance) { + return false; + } + return this.engineInstance.isFirstPersonModeActive(); + } + + // ==================== 结束:漫游功能 ==================== + /** 销毁引擎管理器 */ public destroy(): void { if (this.engineInstance) {