Files
bim_engine/src/managers/section-axis-dialog-manager.ts

146 lines
4.3 KiB
TypeScript
Raw Normal View History

/**
*
*
*/
import { BaseDialogManager } from '../core/base-dialog-manager';
import { ManagerRegistry } from '../core/manager-registry';
2025-12-24 19:02:34 +08:00
import { SectionAxisPanel } from '../components/section-axis-panel';
import type { SectionAxis } from '../components/section-axis-panel/types';
/**
*
* BaseDialogManager X/Y/Z
2025-12-24 19:02:34 +08:00
*/
export class SectionAxisDialogManager extends BaseDialogManager {
/** 轴向剖切面板实例 */
2025-12-24 19:02:34 +08:00
private panel: SectionAxisPanel | null = null;
constructor(registry: ManagerRegistry) {
super(registry);
}
/** 对话框唯一标识 */
protected get dialogId(): string {
return 'section-axis-dialog';
2025-12-24 19:02:34 +08:00
}
/** 对话框标题(国际化 key */
protected get dialogTitle(): string {
return 'sectionAxis.dialogTitle';
}
/** 对话框宽度 */
protected get dialogWidth(): number {
return 240;
2025-12-24 19:02:34 +08:00
}
/**
*
*
2025-12-24 19:02:34 +08:00
*/
protected getDialogPosition(): { x: number; y: number } {
const container = this.registry.container;
if (!container) return { x: 100, y: 100 };
2025-12-24 19:02:34 +08:00
const containerWidth = container.clientWidth;
const containerHeight = container.clientHeight;
const paddingRight = 20;
const paddingBottom = 50;
2025-12-24 19:02:34 +08:00
return {
x: containerWidth - this.dialogWidth - paddingRight,
y: containerHeight - paddingBottom - 200
};
}
/**
*
*
*/
protected createContent(): HTMLElement {
2025-12-24 19:02:34 +08:00
this.panel = new SectionAxisPanel({
defaultAxis: 'x',
defaultHidden: false,
onHideToggle: (isHidden) => {
console.log('[SectionAxisDialogManager] 隐藏切换:', isHidden);
if (isHidden) {
this.registry.engine3d?.hideSection();
} else {
this.registry.engine3d?.recoverSection();
}
2025-12-24 19:02:34 +08:00
},
onReverse: () => {
// 反向功能:第三方引擎无 API仅输出日志
console.log('[SectionAxisDialogManager] 反向剖切(暂不支持)');
2025-12-24 19:02:34 +08:00
},
onAxisChange: (axis) => {
console.log('[SectionAxisDialogManager] 切换轴向:', axis);
this.registry.engine3d?.activeSection(axis);
2025-12-24 19:02:34 +08:00
}
});
this.panel.init();
return this.panel.element;
}
2025-12-24 19:02:34 +08:00
/** 对话框创建后的回调,自适应高度 */
protected onDialogCreated(): void {
this.dialog?.fitHeight(false);
// 检查 Engine 是否已初始化
if (!this.registry.engine3d) {
console.error('[SectionAxisDialogManager] Engine not initialized. Call initEngine() first.');
return;
}
// 自动激活默认轴向剖切X轴
this.registry.engine3d.activeSection('x');
}
2025-12-24 19:02:34 +08:00
/** 对话框关闭时的回调,取消工具栏按钮激活状态 */
protected onDialogClose(): void {
this.registry.toolbar?.setBtnActive('section-axis', false);
2025-12-24 19:02:34 +08:00
}
/** 销毁前的清理,销毁面板实例 */
protected onBeforeDestroy(): void {
this.registry.engine3d?.deactivateSection();
if (this.panel) {
this.panel.destroy();
this.panel = null;
}
2025-12-24 19:02:34 +08:00
}
/**
*
* @returns
2025-12-24 19:02:34 +08:00
*/
public getHiddenState(): boolean {
return this.panel?.getHiddenState() ?? false;
}
/**
*
* @param isHidden
2025-12-24 19:02:34 +08:00
*/
public setHiddenState(isHidden: boolean): void {
this.panel?.setHiddenState(isHidden);
}
/**
*
* @returns 'x' | 'y' | 'z'
2025-12-24 19:02:34 +08:00
*/
public getActiveAxis(): SectionAxis {
return this.panel?.getActiveAxis() ?? 'x';
}
/**
*
* @param axis
2025-12-24 19:02:34 +08:00
*/
public setActiveAxis(axis: SectionAxis): void {
this.panel?.setActiveAxis(axis);
}
}