From bb1d18a4e7ec2da01ccd29a7b9fa5bc17b14c322 Mon Sep 17 00:00:00 2001 From: yuding <1023798085@qq.com> Date: Sat, 28 Feb 2026 10:08:52 +0800 Subject: [PATCH] refactor(toolbar): pass registry to all button factories Toolbar component now receives registry from ButtonGroupManager options and passes it to all 16 toolbar button factory functions. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- .../toolbar/buttons/ai-chat/index.ts | 6 ++-- .../toolbar/buttons/fullscreen/index.ts | 3 +- .../toolbar/buttons/home/index.ts | 5 ++- .../toolbar/buttons/info/index.ts | 6 ++-- .../button-group/toolbar/buttons/map/index.ts | 6 ++-- .../toolbar/buttons/measure/index.ts | 5 ++- .../toolbar/buttons/property/index.ts | 5 ++- .../buttons/section/section-axis/index.ts | 5 ++- .../buttons/section/section-box/index.ts | 5 ++- .../buttons/section/section-menu/index.ts | 3 +- .../buttons/section/section-plane/index.ts | 5 ++- .../toolbar/buttons/setting/index.ts | 3 +- .../toolbar/buttons/walk/walk-bird/index.ts | 3 +- .../toolbar/buttons/walk/walk-menu/index.ts | 5 ++- .../toolbar/buttons/walk/walk-person/index.ts | 3 +- .../toolbar/buttons/zoom-box/index.ts | 5 ++- src/components/button-group/toolbar/index.ts | 31 ++++++++++--------- 17 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/components/button-group/toolbar/buttons/ai-chat/index.ts b/src/components/button-group/toolbar/buttons/ai-chat/index.ts index 3c08de3..3d5dbd3 100644 --- a/src/components/button-group/toolbar/buttons/ai-chat/index.ts +++ b/src/components/button-group/toolbar/buttons/ai-chat/index.ts @@ -1,9 +1,9 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; + +export const createAiChatButton = (registry: ManagerRegistry): ButtonConfig => { -export const createAiChatButton = (): ButtonConfig => { - const registry = ManagerRegistry.getInstance(); registry.on('aiChat:opened', () => { registry.toolbar?.setBtnActive('aiChat', true); diff --git a/src/components/button-group/toolbar/buttons/fullscreen/index.ts b/src/components/button-group/toolbar/buttons/fullscreen/index.ts index 9cd34d5..dffd83d 100644 --- a/src/components/button-group/toolbar/buttons/fullscreen/index.ts +++ b/src/components/button-group/toolbar/buttons/fullscreen/index.ts @@ -1,7 +1,8 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; -export const createFullscreenButton = (): ButtonConfig => { +export const createFullscreenButton = (_registry?: ManagerRegistry): ButtonConfig => { return { id: 'fullscreen', groupId: 'group-2', diff --git a/src/components/button-group/toolbar/buttons/home/index.ts b/src/components/button-group/toolbar/buttons/home/index.ts index 48f1399..ef8563f 100644 --- a/src/components/button-group/toolbar/buttons/home/index.ts +++ b/src/components/button-group/toolbar/buttons/home/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; -export const createHomeButton = (): ButtonConfig => { +export const createHomeButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'home', groupId: 'group-1', @@ -12,7 +12,6 @@ export const createHomeButton = (): ButtonConfig => { keepActive: false, onClick: (button) => { console.log('首页按钮被点击:', button.id); - const registry = ManagerRegistry.getInstance(); registry.engine3d?.CameraGoHome(); } }; diff --git a/src/components/button-group/toolbar/buttons/info/index.ts b/src/components/button-group/toolbar/buttons/info/index.ts index 502c6ab..0f17dd4 100644 --- a/src/components/button-group/toolbar/buttons/info/index.ts +++ b/src/components/button-group/toolbar/buttons/info/index.ts @@ -1,9 +1,9 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; + +export const createInfoButton = (registry: ManagerRegistry): ButtonConfig => { -export const createInfoButton = (): ButtonConfig => { - const registry = ManagerRegistry.getInstance(); return { id: 'info', diff --git a/src/components/button-group/toolbar/buttons/map/index.ts b/src/components/button-group/toolbar/buttons/map/index.ts index 7b2dd4f..0bb06d7 100644 --- a/src/components/button-group/toolbar/buttons/map/index.ts +++ b/src/components/button-group/toolbar/buttons/map/index.ts @@ -1,9 +1,9 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; + +export const createMapButton = (registry: ManagerRegistry): ButtonConfig => { -export const createMapButton = (): ButtonConfig => { - const registry = ManagerRegistry.getInstance(); return { id: 'map', diff --git a/src/components/button-group/toolbar/buttons/measure/index.ts b/src/components/button-group/toolbar/buttons/measure/index.ts index b8a201c..ed3a131 100644 --- a/src/components/button-group/toolbar/buttons/measure/index.ts +++ b/src/components/button-group/toolbar/buttons/measure/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; -export const createMeasureButton = (): ButtonConfig => { +export const createMeasureButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'measure', groupId: 'group-1', @@ -11,7 +11,6 @@ export const createMeasureButton = (): ButtonConfig => { icon: getIcon('测量'), keepActive: true, onClick: (button) => { - const registry = ManagerRegistry.getInstance(); if (button.isActive) { registry.measure?.show(); } else { diff --git a/src/components/button-group/toolbar/buttons/property/index.ts b/src/components/button-group/toolbar/buttons/property/index.ts index d946124..6da1e08 100644 --- a/src/components/button-group/toolbar/buttons/property/index.ts +++ b/src/components/button-group/toolbar/buttons/property/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; -export const createPropertyButton = (): ButtonConfig => { +export const createPropertyButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'property', groupId: 'group-1', @@ -12,7 +12,6 @@ export const createPropertyButton = (): ButtonConfig => { icon: getIcon('文档'), onClick: () => { console.log('构件详情按钮被点击'); - const registry = ManagerRegistry.getInstance(); registry.componentDetail?.show(); } }; diff --git a/src/components/button-group/toolbar/buttons/section/section-axis/index.ts b/src/components/button-group/toolbar/buttons/section/section-axis/index.ts index 5d0cab2..97c5f7b 100644 --- a/src/components/button-group/toolbar/buttons/section/section-axis/index.ts +++ b/src/components/button-group/toolbar/buttons/section/section-axis/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createSectionAxisButton = (): ButtonConfig => { +export const createSectionAxisButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'section-axis', groupId: 'group-1', @@ -14,7 +14,6 @@ export const createSectionAxisButton = (): ButtonConfig => { label: 'toolbar.sectionAxis', icon: getIcon('轴向剖切'), onClick: (button) => { - const registry = ManagerRegistry.getInstance(); if (button.isActive) { registry.sectionAxis?.show(); } else { diff --git a/src/components/button-group/toolbar/buttons/section/section-box/index.ts b/src/components/button-group/toolbar/buttons/section/section-box/index.ts index 0357a3b..0e6f689 100644 --- a/src/components/button-group/toolbar/buttons/section/section-box/index.ts +++ b/src/components/button-group/toolbar/buttons/section/section-box/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createSectionBoxButton = (): ButtonConfig => { +export const createSectionBoxButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'section-box', groupId: 'group-1', @@ -15,7 +15,6 @@ export const createSectionBoxButton = (): ButtonConfig => { icon: getIcon('剖切盒'), onClick: (button) => { console.log('剖切盒被点击:', button.id, '激活状态:', button.isActive); - const registry = ManagerRegistry.getInstance(); if (button.isActive) { registry.sectionBox?.show(); } else { diff --git a/src/components/button-group/toolbar/buttons/section/section-menu/index.ts b/src/components/button-group/toolbar/buttons/section/section-menu/index.ts index 1e3c9ee..8052c95 100644 --- a/src/components/button-group/toolbar/buttons/section/section-menu/index.ts +++ b/src/components/button-group/toolbar/buttons/section/section-menu/index.ts @@ -1,7 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createSectionMenuButton = (): ButtonConfig => { +export const createSectionMenuButton = (_registry?: ManagerRegistry): ButtonConfig => { return { id: 'section', groupId: 'group-1', diff --git a/src/components/button-group/toolbar/buttons/section/section-plane/index.ts b/src/components/button-group/toolbar/buttons/section/section-plane/index.ts index 9cd15d7..9d1177d 100644 --- a/src/components/button-group/toolbar/buttons/section/section-plane/index.ts +++ b/src/components/button-group/toolbar/buttons/section/section-plane/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createSectionPlaneButton = (): ButtonConfig => { +export const createSectionPlaneButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'section-plane', groupId: 'group-1', @@ -15,7 +15,6 @@ export const createSectionPlaneButton = (): ButtonConfig => { icon: getIcon('拾曲面剖切'), onClick: (button) => { console.log('拾取面剖切被点击:', button.id, '激活状态:', button.isActive); - const registry = ManagerRegistry.getInstance(); if (button.isActive) { registry.sectionPlane?.show(); } else { diff --git a/src/components/button-group/toolbar/buttons/setting/index.ts b/src/components/button-group/toolbar/buttons/setting/index.ts index 104a825..39bfe7b 100644 --- a/src/components/button-group/toolbar/buttons/setting/index.ts +++ b/src/components/button-group/toolbar/buttons/setting/index.ts @@ -1,7 +1,8 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; -export const createSettingButton = (): ButtonConfig => { +export const createSettingButton = (_registry?: ManagerRegistry): ButtonConfig => { return { id: 'setting', groupId: 'group-2', diff --git a/src/components/button-group/toolbar/buttons/walk/walk-bird/index.ts b/src/components/button-group/toolbar/buttons/walk/walk-bird/index.ts index 53cd197..db7ca4c 100644 --- a/src/components/button-group/toolbar/buttons/walk/walk-bird/index.ts +++ b/src/components/button-group/toolbar/buttons/walk/walk-bird/index.ts @@ -1,7 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createWalkBirdButton = (): ButtonConfig => { +export const createWalkBirdButton = (_registry?: ManagerRegistry): ButtonConfig => { return { id: 'walk-bird', groupId: 'group-1', diff --git a/src/components/button-group/toolbar/buttons/walk/walk-menu/index.ts b/src/components/button-group/toolbar/buttons/walk/walk-menu/index.ts index b145dde..5e18159 100644 --- a/src/components/button-group/toolbar/buttons/walk/walk-menu/index.ts +++ b/src/components/button-group/toolbar/buttons/walk/walk-menu/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createWalkMenuButton = (): ButtonConfig => { +export const createWalkMenuButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'walk', groupId: 'group-1', @@ -12,7 +12,6 @@ export const createWalkMenuButton = (): ButtonConfig => { icon: getIcon('漫游'), onClick: () => { console.log('漫游按钮被点击'); - const registry = ManagerRegistry.getInstance(); registry.walkControl?.show(); } }; diff --git a/src/components/button-group/toolbar/buttons/walk/walk-person/index.ts b/src/components/button-group/toolbar/buttons/walk/walk-person/index.ts index 4c4d405..940508a 100644 --- a/src/components/button-group/toolbar/buttons/walk/walk-person/index.ts +++ b/src/components/button-group/toolbar/buttons/walk/walk-person/index.ts @@ -1,7 +1,8 @@ import type { ButtonConfig } from '../../../../index.type'; import { getIcon } from '../../../../../../utils/icon-manager'; +import type { ManagerRegistry } from '../../../../../../core/manager-registry'; -export const createWalkPersonButton = (): ButtonConfig => { +export const createWalkPersonButton = (_registry?: ManagerRegistry): ButtonConfig => { return { id: 'walk-person', groupId: 'group-1', diff --git a/src/components/button-group/toolbar/buttons/zoom-box/index.ts b/src/components/button-group/toolbar/buttons/zoom-box/index.ts index b7cc557..8393e73 100644 --- a/src/components/button-group/toolbar/buttons/zoom-box/index.ts +++ b/src/components/button-group/toolbar/buttons/zoom-box/index.ts @@ -1,8 +1,8 @@ import type { ButtonConfig } from '../../../index.type'; import { getIcon } from '../../../../../utils/icon-manager'; -import { ManagerRegistry } from '../../../../../core/manager-registry'; +import type { ManagerRegistry } from '../../../../../core/manager-registry'; -export const createZoomBoxButton = (): ButtonConfig => { +export const createZoomBoxButton = (registry: ManagerRegistry): ButtonConfig => { return { id: 'zoom-box', groupId: 'group-1', @@ -11,7 +11,6 @@ export const createZoomBoxButton = (): ButtonConfig => { label: 'toolbar.zoomBox', icon: getIcon('框选放大'), onClick: () => { - const registry = ManagerRegistry.getInstance(); registry.engine3d?.activateZoomBox(); } }; diff --git a/src/components/button-group/toolbar/index.ts b/src/components/button-group/toolbar/index.ts index 6ab8f76..caa5b24 100644 --- a/src/components/button-group/toolbar/index.ts +++ b/src/components/button-group/toolbar/index.ts @@ -1,9 +1,12 @@ import { BimButtonGroup } from '../index'; +import type { ManagerRegistry } from '../../../core/manager-registry'; export class Toolbar extends BimButtonGroup { public async init(): Promise { await super.init(); + const registry = this.options.registry as ManagerRegistry; + const { createHomeButton } = await import('./buttons/home'); const { createZoomBoxButton } = await import('./buttons/zoom-box'); const { createWalkMenuButton } = await import('./buttons/walk/walk-menu'); @@ -21,21 +24,21 @@ export class Toolbar extends BimButtonGroup { this.addGroup('group-1'); - this.addButton(createHomeButton()); - this.addButton(createZoomBoxButton()); - this.addButton(createMeasureButton()); - this.addButton(createSectionMenuButton()); - this.addButton(createSectionPlaneButton()); - this.addButton(createSectionAxisButton()); - this.addButton(createSectionBoxButton()); - this.addButton(createWalkMenuButton()); - this.addButton(createMapButton()); - this.addButton(createPropertyButton()); + this.addButton(createHomeButton(registry)); + this.addButton(createZoomBoxButton(registry)); + this.addButton(createMeasureButton(registry)); + this.addButton(createSectionMenuButton(registry)); + this.addButton(createSectionPlaneButton(registry)); + this.addButton(createSectionAxisButton(registry)); + this.addButton(createSectionBoxButton(registry)); + this.addButton(createWalkMenuButton(registry)); + this.addButton(createMapButton(registry)); + this.addButton(createPropertyButton(registry)); this.addGroup('group-2'); - this.addButton(createAiChatButton()); - this.addButton(createSettingButton()); - this.addButton(createInfoButton()); - this.addButton(createFullscreenButton()); + this.addButton(createAiChatButton(registry)); + this.addButton(createSettingButton(registry)); + this.addButton(createInfoButton(registry)); + this.addButton(createFullscreenButton(registry)); this.render(); }