All 16 managers now receive ManagerRegistry instance through constructor
instead of calling ManagerRegistry.getInstance(). This enables each
BimEngine instance to have its own isolated set of managers.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Replace static getInstance() pattern with public constructor to enable
multiple independent BimEngine instances on the same page. BaseManager
and BaseDialogManager now accept registry via constructor parameter.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
- Add i18n translations for quick select menu (zh-CN, en-US)
- Add 8 model operation methods to Engine layer
- Add 8 proxy methods to EngineManager layer
- Implement right-click menu handlers for hide/translucent/isolate/show all
- Add quick select submenu (same type/level/level+type)
- Replace console.log placeholders with actual API calls
- Add unified MEASURE_TYPES config in types/measure.ts
- Export MEASURE_MODES_ORDERED, ENGINE_TYPE_TO_MODE, MODE_TO_ENGINE_TYPE
- Refactor measure-dialog-manager to use centralized config
- Refactor measure-panel to use MEASURE_TYPES for icons/order/valueType
- Simplify engine/index.ts measureMap with dynamic key access
- Add measure settings API (saveMeasureSetting) with cache sync
- Add direct engine event listening for measure-changed and section-move
- Update i18n keys for 8 measure modes
Listen for 'section-move' event from underlying engine and emit as 'section:move'.
Currently outputs to console for debugging.
Event type: { x?: {min, max}, y?: {min, max}, z?: {min, max} }
Update all three section dialogs to support hide/show toggle:
SectionAxisDialogManager:
- onHideToggle now calls hideSection()/recoverSection()
SectionBoxDialogManager:
- onHideToggle now calls hideSection()/recoverSection()
SectionPlanePanel:
- Add isHidden state tracking
- Change onHide to onHideToggle(isHidden)
- Add setHiddenState/getHiddenState methods
- Update button to toggle active state
SectionPlaneDialogManager:
- Switch to onHideToggle callback
- Call hideSection()/recoverSection() based on toggle state
Behavior: Click hide button to hide section, click again to recover.
Add new methods for temporary section plane visibility control:
- hideSection(): Hide section plane temporarily (calls engine.clipping.disabled())
- recoverSection(): Recover hidden section plane (calls engine.clipping.recover())
Update SectionPlaneDialogManager to use hideSection() instead of direct API call.
Add comprehensive documentation for:
- activeSection(mode): Unified activation API with mode descriptions
- getCurrentSectionMode(): Current mode getter
- setSectionBoxRange(range): Box range setter with percentage format
- deactivateSection(): Unified deactivation
Includes @param, @returns, @remarks, and @example sections in Chinese.
- Replace old state variables with currentSectionMode
- Implement unified activeSection(mode) for all clipping types (x/y/z/box/face)
- Remove deprecated methods: activateSectionAxis, activateSectionBox, etc.
- Use new underlying API: engine.clipping.active(mode)
- Code reduction: ~175 lines → ~38 lines (78% reduction)
- Update iflow-engine-base from 1.0.1 to 1.0.5
- Change default engine version from v1 to v2
- Add pauseRendering() and resumeRendering() methods
- Add switch model feature in demos
- Update model URLs in demos
- Add new documentation files