UNPKG

@itwin/measure-tools-react

Version:
73 lines 2.85 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import { IModelConnection } from "@itwin/core-frontend"; import { IModelApp } from "@itwin/core-frontend"; import { SheetMeasurementsHelper } from "./SheetMeasurementHelper.js"; export class DrawingDataCache { constructor() { this._drawingTypeCache = new Map(); this._viewportModelChangedListeners = new Map(); this.setupEvents(); // Populate initial viewports for (const vp of IModelApp.viewManager) this.addViewport(vp); } static getInstance() { if (DrawingDataCache._instance === undefined) { DrawingDataCache._instance = new DrawingDataCache(); } return DrawingDataCache._instance; } setupEvents() { // If an imodel closes, clear the cache for it IModelConnection.onClose.addListener((imodel) => { this._drawingTypeCache.delete(imodel); }); // Listen for new viewports opening IModelApp.viewManager.onViewOpen.addListener((vp) => { this.addViewport(vp); }); // Listen for viewports closing, this also is called when IModelApp shuts down IModelApp.viewManager.onViewClose.addListener((vp) => { this.dropViewport(vp); }); } addViewport(vp) { vp.onViewedModelsChanged.addListener((viewport) => { if (!viewport.view.isSheetView()) return; void this.querySheetDrawingData(viewport.iModel, viewport.view.id); }); } dropViewport(vp) { const listener = this._viewportModelChangedListeners.get(vp); if (listener) { listener(); this._viewportModelChangedListeners.delete(vp); } } getSheetDrawingDataForViewport(vp) { if (!vp.view.isSheetView()) return []; const cache = this._drawingTypeCache.get(vp.iModel); if (cache) return cache.get(vp.view.id) ?? []; return []; } async querySheetDrawingData(imodel, viewedModelID) { let cache = this._drawingTypeCache.get(imodel); if (!cache) { cache = new Map(); this._drawingTypeCache.set(imodel, cache); } let sheetData = cache.get(viewedModelID); if (!sheetData) { sheetData = await SheetMeasurementsHelper.getSheetTypes(imodel, viewedModelID); cache.set(viewedModelID, sheetData); } return sheetData; } } //# sourceMappingURL=DrawingTypeDataCache.js.map