@itwin/measure-tools-react
Version:
Frontend framework and tools for measurements
73 lines • 2.85 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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