From c220a29b2bb50e4b9bd2674514a32d13915b2d6d Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 08:52:13 -0400 Subject: [PATCH 01/20] drawingTypeCache refactor --- .../src/api/DrawingTypeDataCache.ts | 22 +++++++++++-------- .../src/tools/MeasureAreaTool.ts | 5 ++--- .../src/tools/MeasureDistanceTool.ts | 5 ++--- .../src/tools/MeasureLocationTool.ts | 5 ++--- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 99f38fac0..fb2fbb614 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -9,35 +9,39 @@ import { SheetMeasurementsHelper } from "./SheetMeasurementHelper"; export class DrawingDataCache { - private _drawingTypeCache: SheetMeasurementsHelper.DrawingTypeData[]; + // Goes from viewed model to drawing types + private _drawingTypeCache: Map; + private _sheetChangeListener: VoidFunction[] = []; - public get drawingtypes(): ReadonlyArray { - return this._drawingTypeCache; + public getDrawingtypes(viewedModelID: string): Readonly { + const result = this._drawingTypeCache.get(viewedModelID); + return result ?? []; } - public constructor() { - this._drawingTypeCache = []; + public constructor(imodel: IModelConnection) { + this._drawingTypeCache = new Map(); + this.updateDrawingTypeCache(imodel); } - public async updateDrawingTypeCache(iModel: IModelConnection) { + private async updateDrawingTypeCache(iModel: IModelConnection) { this._sheetChangeListener.forEach((func) => { func(); }); this._sheetChangeListener = []; - this._drawingTypeCache = []; const sheetIds = new Set(); for (const viewport of IModelApp.viewManager) { if (viewport.view.isSheetView()) { this._sheetChangeListener.push(viewport.onViewedModelsChanged.addListener(async () => this.updateDrawingTypeCache(iModel))); - sheetIds.add(viewport.view.id); + if (!this._drawingTypeCache.has(viewport.view.id)) + sheetIds.add(viewport.view.id); } } for (const id of sheetIds) { - this._drawingTypeCache = this._drawingTypeCache.concat(await SheetMeasurementsHelper.getSheetTypes(iModel, id)); + this._drawingTypeCache.set(id, await SheetMeasurementsHelper.getSheetTypes(iModel, id)); } } diff --git a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts index fbcb12159..f2dd182a9 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts @@ -73,8 +73,7 @@ MeasureAreaToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); if (this._enableSheetMeasurements) { - this._drawingTypeCache = new DrawingDataCache(); - await this._drawingTypeCache.updateDrawingTypeCache(this.iModel); + this._drawingTypeCache = new DrawingDataCache(this.iModel); } } @@ -156,7 +155,7 @@ MeasureAreaToolModel } if (this._drawingTypeCache) { - for (const drawing of this._drawingTypeCache.drawingtypes) { + for (const drawing of this._drawingTypeCache.getDrawingtypes(ev.viewport.view.id)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; diff --git a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts index 9b8c2730a..241b71ac0 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts @@ -65,8 +65,7 @@ MeasureDistanceToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); if (this._enableSheetMeasurements) { - this._drawingTypeCache = new DrawingDataCache(); - await this._drawingTypeCache.updateDrawingTypeCache(this.iModel); + this._drawingTypeCache = new DrawingDataCache(this.iModel); } } @@ -134,7 +133,7 @@ MeasureDistanceToolModel } if (this._drawingTypeCache) { - for (const drawing of this._drawingTypeCache.drawingtypes) { + for (const drawing of this._drawingTypeCache.getDrawingtypes(ev.viewport.view.id)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; diff --git a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts index 462b3cfa0..b4571c1a7 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts @@ -87,8 +87,7 @@ MeasureLocationToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); if (this._enableSheetMeasurements) { - this._drawingTypeCache = new DrawingDataCache(); - await this._drawingTypeCache.updateDrawingTypeCache(this.iModel); + this._drawingTypeCache = new DrawingDataCache(this.iModel); } } @@ -163,7 +162,7 @@ MeasureLocationToolModel } if (this._drawingTypeCache) { - for (const drawing of this._drawingTypeCache.drawingtypes) { + for (const drawing of this._drawingTypeCache.getDrawingtypes(ev.viewport.view.id)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; From 2993d0574ab517abf05ee5ccf405225e2a63b376 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 08:53:28 -0400 Subject: [PATCH 02/20] change file --- ...e-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json diff --git a/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json b/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json new file mode 100644 index 000000000..01a8aacfd --- /dev/null +++ b/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "drawingTypeCache refactor", + "packageName": "@itwin/measure-tools-react", + "email": "email not defined", + "dependentChangeType": "patch" +} From 7fc24ee1fb998b5395f9f852a49b675240d2d8a0 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 08:54:43 -0400 Subject: [PATCH 03/20] email --- ...easure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json b/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json index 01a8aacfd..fb6fcdcc9 100644 --- a/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json +++ b/change/@itwin-measure-tools-react-a975c8b3-f40a-4592-9515-0fb48517aa92.json @@ -2,6 +2,6 @@ "type": "minor", "comment": "drawingTypeCache refactor", "packageName": "@itwin/measure-tools-react", - "email": "email not defined", + "email": "125395992+Maxime-Brassard@users.noreply.github.com", "dependentChangeType": "patch" } From 78f41ad7adb83a4e2fc1ae02a438dcbc1ff129bf Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 08:59:29 -0400 Subject: [PATCH 04/20] added clear function --- .../measure-tools/src/api/DrawingTypeDataCache.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index fb2fbb614..bb0c7e96f 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -24,11 +24,19 @@ export class DrawingDataCache { this.updateDrawingTypeCache(imodel); } - private async updateDrawingTypeCache(iModel: IModelConnection) { + public destructor() { + this.clear(); + } + + private clear() { this._sheetChangeListener.forEach((func) => { func(); }); this._sheetChangeListener = []; + } + + private async updateDrawingTypeCache(iModel: IModelConnection) { + this.clear(); const sheetIds = new Set(); From a98546e5e94802e7497a9eb472ba4b26b3b5bf7c Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 09:43:32 -0400 Subject: [PATCH 05/20] made it a singleton --- .../src/api/DrawingTypeDataCache.ts | 22 ++++++++++++++++++- .../src/tools/MeasureAreaTool.ts | 15 +++++-------- .../src/tools/MeasureDistanceTool.ts | 15 +++++-------- .../src/tools/MeasureLocationTool.ts | 15 +++++-------- 4 files changed, 39 insertions(+), 28 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index bb0c7e96f..cefca408f 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -7,7 +7,7 @@ import type { IModelConnection } from "@itwin/core-frontend"; import { IModelApp } from "@itwin/core-frontend"; import { SheetMeasurementsHelper } from "./SheetMeasurementHelper"; -export class DrawingDataCache { +class DrawingDataCache { // Goes from viewed model to drawing types private _drawingTypeCache: Map; @@ -54,3 +54,23 @@ export class DrawingDataCache { } } + +export class DrawingDataCacheSingleton { + + private static _instance: DrawingDataCache | undefined; + private static _onImodelClose: () => void; + + public static initialize(imodel: IModelConnection) { + DrawingDataCacheSingleton._instance = new DrawingDataCache(imodel); + DrawingDataCacheSingleton._onImodelClose = imodel.onClose.addListener(() => { + DrawingDataCacheSingleton._instance?.destructor(); + DrawingDataCacheSingleton._instance = undefined; + DrawingDataCacheSingleton._onImodelClose(); + }) + } + + public static getDrawingtypes(viewedModelID: string): Readonly { + return DrawingDataCacheSingleton._instance?.getDrawingtypes(viewedModelID) ?? []; + } + +} diff --git a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts index f2dd182a9..3d1031ddf 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts @@ -27,7 +27,7 @@ import { MeasureAreaToolModel } from "../toolmodels/MeasureAreaToolModel"; import { MeasureTools } from "../MeasureTools"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCache } from "../api/DrawingTypeDataCache"; +import { DrawingDataCacheSingleton } from "../api/DrawingTypeDataCache"; export class MeasureAreaTool extends MeasurementToolBase< AreaMeasurement, @@ -36,7 +36,6 @@ MeasureAreaToolModel public static override toolId = "MeasureTools.MeasureArea"; public static override iconSpec = "icon-measure-2d"; private _enableSheetMeasurements: boolean; - private _drawingTypeCache?: DrawingDataCache; public static override get flyover() { return MeasureTools.localization.getLocalizedString( @@ -73,7 +72,7 @@ MeasureAreaToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); if (this._enableSheetMeasurements) { - this._drawingTypeCache = new DrawingDataCache(this.iModel); + DrawingDataCacheSingleton.initialize(this.iModel); } } @@ -154,12 +153,10 @@ MeasureAreaToolModel return true; } - if (this._drawingTypeCache) { - for (const drawing of this._drawingTypeCache.getDrawingtypes(ev.viewport.view.id)) { - if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { - if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { - return false; - } + for (const drawing of DrawingDataCacheSingleton.getDrawingtypes(ev.viewport.view.id)) { + if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { + if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + return false; } } } diff --git a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts index 241b71ac0..2d0b4e9b2 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts @@ -26,7 +26,7 @@ import { MeasureTools } from "../MeasureTools"; import { MeasureDistanceToolModel } from "../toolmodels/MeasureDistanceToolModel"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCache } from "../api/DrawingTypeDataCache"; +import { DrawingDataCacheSingleton } from "../measure-tools-react"; export class MeasureDistanceTool extends MeasurementToolBase< DistanceMeasurement, @@ -35,7 +35,6 @@ MeasureDistanceToolModel public static override toolId = "MeasureTools.MeasureDistance"; public static override iconSpec = "icon-measure-distance"; private _enableSheetMeasurements: boolean; - private _drawingTypeCache?: DrawingDataCache; public static override get flyover() { return MeasureTools.localization.getLocalizedString( @@ -65,7 +64,7 @@ MeasureDistanceToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); if (this._enableSheetMeasurements) { - this._drawingTypeCache = new DrawingDataCache(this.iModel); + DrawingDataCacheSingleton.initialize(this.iModel); } } @@ -132,12 +131,10 @@ MeasureDistanceToolModel return true; } - if (this._drawingTypeCache) { - for (const drawing of this._drawingTypeCache.getDrawingtypes(ev.viewport.view.id)) { - if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { - if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { - return false; - } + for (const drawing of DrawingDataCacheSingleton.getDrawingtypes(ev.viewport.view.id)) { + if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { + if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + return false; } } } diff --git a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts index b4571c1a7..6edaff8be 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts @@ -36,7 +36,7 @@ import type { DialogItem, DialogItemValue, DialogPropertySyncItem } from "@itwin import { PropertyDescriptionHelper } from "@itwin/appui-abstract"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata, DrawingMetadataProps } from "../api/Measurement"; -import { DrawingDataCache } from "../api/DrawingTypeDataCache"; +import { DrawingDataCacheSingleton } from "../measure-tools-react"; /** Tool that measure precise locations */ export class MeasureLocationTool extends MeasurementToolBase< @@ -47,7 +47,6 @@ MeasureLocationToolModel public static override iconSpec = "icon-measure-location"; private static readonly useDynamicMeasurementPropertyName = "useDynamicMeasurement"; private _enableSheetMeasurements: boolean; - private _drawingTypeCache?: DrawingDataCache; private static _isUserNotifiedOfGeolocationFailure = false; private _useDynamicMeasurement: boolean = false; @@ -87,7 +86,7 @@ MeasureLocationToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); if (this._enableSheetMeasurements) { - this._drawingTypeCache = new DrawingDataCache(this.iModel); + DrawingDataCacheSingleton.initialize(this.iModel); } } @@ -161,12 +160,10 @@ MeasureLocationToolModel return true; } - if (this._drawingTypeCache) { - for (const drawing of this._drawingTypeCache.getDrawingtypes(ev.viewport.view.id)) { - if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { - if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { - return false; - } + for (const drawing of DrawingDataCacheSingleton.getDrawingtypes(ev.viewport.view.id)) { + if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { + if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + return false; } } } From 6f6c5c38bbdd393b928e20c19e64e40344254f8b Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 09:51:54 -0400 Subject: [PATCH 06/20] renames for clarity --- .../itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index cefca408f..09b8cce56 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -25,10 +25,11 @@ class DrawingDataCache { } public destructor() { - this.clear(); + this.clearListeners(); + this._drawingTypeCache.clear(); } - private clear() { + private clearListeners() { this._sheetChangeListener.forEach((func) => { func(); }); @@ -36,7 +37,7 @@ class DrawingDataCache { } private async updateDrawingTypeCache(iModel: IModelConnection) { - this.clear(); + this.clearListeners(); const sheetIds = new Set(); From 4dc21cab22bdea63e099256d14ce1c698a60cf44 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 13:36:04 -0400 Subject: [PATCH 07/20] added try and void to constructor --- .../itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 09b8cce56..11c65e3d4 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -21,7 +21,11 @@ class DrawingDataCache { public constructor(imodel: IModelConnection) { this._drawingTypeCache = new Map(); - this.updateDrawingTypeCache(imodel); + try { + void this.updateDrawingTypeCache(imodel); + } catch (e) { + console.warn("DrawingTypeDataCache could not be initialized"); + } } public destructor() { From c5b8215ab34862ddf71fbda8675caf9b6b7cce31 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 13:38:26 -0400 Subject: [PATCH 08/20] Changed location for listener --- packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 11c65e3d4..3bd60efd4 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -46,8 +46,8 @@ class DrawingDataCache { const sheetIds = new Set(); for (const viewport of IModelApp.viewManager) { + this._sheetChangeListener.push(viewport.onViewedModelsChanged.addListener(async () => this.updateDrawingTypeCache(iModel))); if (viewport.view.isSheetView()) { - this._sheetChangeListener.push(viewport.onViewedModelsChanged.addListener(async () => this.updateDrawingTypeCache(iModel))); if (!this._drawingTypeCache.has(viewport.view.id)) sheetIds.add(viewport.view.id); } From 6da5c2ae18d153b72570489924591fe8c3b3713b Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Wed, 10 Jul 2024 14:14:18 -0400 Subject: [PATCH 09/20] dispose --- .../itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 3bd60efd4..211065c53 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -6,8 +6,9 @@ import type { IModelConnection } from "@itwin/core-frontend"; import { IModelApp } from "@itwin/core-frontend"; import { SheetMeasurementsHelper } from "./SheetMeasurementHelper"; +import { IDisposable } from "@itwin/core-bentley"; -class DrawingDataCache { +class DrawingDataCache implements IDisposable { // Goes from viewed model to drawing types private _drawingTypeCache: Map; @@ -28,7 +29,7 @@ class DrawingDataCache { } } - public destructor() { + public dispose(): void { this.clearListeners(); this._drawingTypeCache.clear(); } @@ -68,7 +69,7 @@ export class DrawingDataCacheSingleton { public static initialize(imodel: IModelConnection) { DrawingDataCacheSingleton._instance = new DrawingDataCache(imodel); DrawingDataCacheSingleton._onImodelClose = imodel.onClose.addListener(() => { - DrawingDataCacheSingleton._instance?.destructor(); + DrawingDataCacheSingleton._instance?.dispose(); DrawingDataCacheSingleton._instance = undefined; DrawingDataCacheSingleton._onImodelClose(); }) From 806493dc2c1475495901112a9754a7ba7d0910a8 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Thu, 11 Jul 2024 12:42:32 -0400 Subject: [PATCH 10/20] complete rework --- .../src/api/DrawingTypeDataCache.ts | 116 +++++++++++------- .../src/tools/MeasureAreaTool.ts | 7 +- .../src/tools/MeasureDistanceTool.ts | 5 +- .../src/tools/MeasureLocationTool.ts | 5 +- 4 files changed, 74 insertions(+), 59 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 211065c53..7574284d8 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -3,60 +3,87 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import type { IModelConnection } from "@itwin/core-frontend"; +import { IModelConnection, Viewport } from "@itwin/core-frontend"; import { IModelApp } from "@itwin/core-frontend"; import { SheetMeasurementsHelper } from "./SheetMeasurementHelper"; -import { IDisposable } from "@itwin/core-bentley"; +import { Id64String } from "@itwin/core-bentley"; -class DrawingDataCache implements IDisposable { +class DrawingDataCache { - // Goes from viewed model to drawing types - private _drawingTypeCache: Map; + private _drawingTypeCache: Map>; - private _sheetChangeListener: VoidFunction[] = []; + private _viewportModelChangedListeners: Map void>; - public getDrawingtypes(viewedModelID: string): Readonly { - const result = this._drawingTypeCache.get(viewedModelID); - return result ?? []; - } + public constructor() { + this._drawingTypeCache = new Map>(); + this._viewportModelChangedListeners = new Map void>(); - public constructor(imodel: IModelConnection) { - this._drawingTypeCache = new Map(); - try { - void this.updateDrawingTypeCache(imodel); - } catch (e) { - console.warn("DrawingTypeDataCache could not be initialized"); - } + this.setupEvents(); + + // Populate initial viewports + for (const vp of IModelApp.viewManager) + this.addViewport(vp); } - public dispose(): void { - this.clearListeners(); - this._drawingTypeCache.clear(); + private 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); + }); } - private clearListeners() { - this._sheetChangeListener.forEach((func) => { - func(); + private addViewport(vp: Viewport) { + vp.onViewedModelsChanged.addListener((viewport) =>{ + if (!viewport.view.isSheetView()) + return; + + void this.querySheetDrawingData(viewport.iModel, viewport.view.id); }); - this._sheetChangeListener = []; } - private async updateDrawingTypeCache(iModel: IModelConnection) { - this.clearListeners(); + private dropViewport(vp: Viewport) { + const listener = this._viewportModelChangedListeners.get(vp); + if (listener) { + listener(); + this._viewportModelChangedListeners.delete(vp); + } + } + + public getSheetDrawingDataForViewport(vp: Viewport): SheetMeasurementsHelper.DrawingTypeData[] | [] { + if (!vp.view.isSheetView()) + return []; + + const cache = this._drawingTypeCache.get(vp.iModel); + if (cache) + return cache.get(vp.view.id) ?? []; - const sheetIds = new Set(); + return []; + } - for (const viewport of IModelApp.viewManager) { - this._sheetChangeListener.push(viewport.onViewedModelsChanged.addListener(async () => this.updateDrawingTypeCache(iModel))); - if (viewport.view.isSheetView()) { - if (!this._drawingTypeCache.has(viewport.view.id)) - sheetIds.add(viewport.view.id); - } + public async querySheetDrawingData(imodel: IModelConnection, viewedModelID: string): Promise> { + let cache = this._drawingTypeCache.get(imodel); + if (!cache) { + cache = new Map(); + this._drawingTypeCache.set(imodel, cache); } - for (const id of sheetIds) { - this._drawingTypeCache.set(id, await SheetMeasurementsHelper.getSheetTypes(iModel, id)); + let sheetData = cache.get(viewedModelID); + if (!sheetData) { + sheetData = await SheetMeasurementsHelper.getSheetTypes(imodel, viewedModelID); + cache.set(viewedModelID, sheetData); } + + return sheetData; } } @@ -64,19 +91,16 @@ class DrawingDataCache implements IDisposable { export class DrawingDataCacheSingleton { private static _instance: DrawingDataCache | undefined; - private static _onImodelClose: () => void; - - public static initialize(imodel: IModelConnection) { - DrawingDataCacheSingleton._instance = new DrawingDataCache(imodel); - DrawingDataCacheSingleton._onImodelClose = imodel.onClose.addListener(() => { - DrawingDataCacheSingleton._instance?.dispose(); - DrawingDataCacheSingleton._instance = undefined; - DrawingDataCacheSingleton._onImodelClose(); - }) + + private static initialize() { + DrawingDataCacheSingleton._instance = new DrawingDataCache(); } - public static getDrawingtypes(viewedModelID: string): Readonly { - return DrawingDataCacheSingleton._instance?.getDrawingtypes(viewedModelID) ?? []; + public static getInstance(): DrawingDataCache { + if (this._instance === undefined) { + DrawingDataCacheSingleton.initialize(); + } + return DrawingDataCacheSingleton._instance!; } } diff --git a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts index 3d1031ddf..9be565ae1 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts @@ -27,7 +27,7 @@ import { MeasureAreaToolModel } from "../toolmodels/MeasureAreaToolModel"; import { MeasureTools } from "../MeasureTools"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCacheSingleton } from "../api/DrawingTypeDataCache"; +import { DrawingDataCacheSingleton } from "../measure-tools-react"; export class MeasureAreaTool extends MeasurementToolBase< AreaMeasurement, @@ -71,9 +71,6 @@ MeasureAreaToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); - if (this._enableSheetMeasurements) { - DrawingDataCacheSingleton.initialize(this.iModel); - } } public override async onReinitialize(): Promise { @@ -153,7 +150,7 @@ MeasureAreaToolModel return true; } - for (const drawing of DrawingDataCacheSingleton.getDrawingtypes(ev.viewport.view.id)) { + for (const drawing of DrawingDataCacheSingleton.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; diff --git a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts index 2d0b4e9b2..2a8f06c6e 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts @@ -63,9 +63,6 @@ MeasureDistanceToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); - if (this._enableSheetMeasurements) { - DrawingDataCacheSingleton.initialize(this.iModel); - } } public async onRestartTool(): Promise { @@ -131,7 +128,7 @@ MeasureDistanceToolModel return true; } - for (const drawing of DrawingDataCacheSingleton.getDrawingtypes(ev.viewport.view.id)) { + for (const drawing of DrawingDataCacheSingleton.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; diff --git a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts index 6edaff8be..1b36740d8 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts @@ -85,9 +85,6 @@ MeasureLocationToolModel public override async onPostInstall(): Promise { await super.onPostInstall(); - if (this._enableSheetMeasurements) { - DrawingDataCacheSingleton.initialize(this.iModel); - } } public override async onDataButtonDown( @@ -160,7 +157,7 @@ MeasureLocationToolModel return true; } - for (const drawing of DrawingDataCacheSingleton.getDrawingtypes(ev.viewport.view.id)) { + for (const drawing of DrawingDataCacheSingleton.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; From 3bd67e5b6fd5ccd7529bc05e5f8bb19c42105380 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Thu, 11 Jul 2024 14:57:24 -0400 Subject: [PATCH 11/20] readonly to readonlyArray --- packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 7574284d8..37a5a7ded 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -70,7 +70,7 @@ class DrawingDataCache { return []; } - public async querySheetDrawingData(imodel: IModelConnection, viewedModelID: string): Promise> { + public async querySheetDrawingData(imodel: IModelConnection, viewedModelID: string): Promise> { let cache = this._drawingTypeCache.get(imodel); if (!cache) { cache = new Map(); From b526d66a5834785973ad3c27dcb38d616aa6c061 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Thu, 11 Jul 2024 15:02:40 -0400 Subject: [PATCH 12/20] corrected array error --- packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 37a5a7ded..3ccde996d 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -70,7 +70,7 @@ class DrawingDataCache { return []; } - public async querySheetDrawingData(imodel: IModelConnection, viewedModelID: string): Promise> { + public async querySheetDrawingData(imodel: IModelConnection, viewedModelID: string): Promise> { let cache = this._drawingTypeCache.get(imodel); if (!cache) { cache = new Map(); From a3acc8b9ebc056018fc5b8bf1a864e5daf051836 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Thu, 11 Jul 2024 15:23:36 -0400 Subject: [PATCH 13/20] removed singleton standalone class --- .../src/api/DrawingTypeDataCache.ts | 30 +++++++------------ .../src/tools/MeasureAreaTool.ts | 4 +-- .../src/tools/MeasureDistanceTool.ts | 4 +-- .../src/tools/MeasureLocationTool.ts | 4 +-- 4 files changed, 16 insertions(+), 26 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 3ccde996d..e4d32a34e 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -8,13 +8,13 @@ import { IModelApp } from "@itwin/core-frontend"; import { SheetMeasurementsHelper } from "./SheetMeasurementHelper"; import { Id64String } from "@itwin/core-bentley"; -class DrawingDataCache { +export class DrawingDataCache { private _drawingTypeCache: Map>; - private _viewportModelChangedListeners: Map void>; + private static _instance: DrawingDataCache | undefined; - public constructor() { + private constructor() { this._drawingTypeCache = new Map>(); this._viewportModelChangedListeners = new Map void>(); @@ -25,6 +25,13 @@ class DrawingDataCache { this.addViewport(vp); } + public static getInstance(): DrawingDataCache { + if (DrawingDataCache._instance === undefined) { + DrawingDataCache._instance = new DrawingDataCache(); + } + return DrawingDataCache._instance; + } + private setupEvents() { // If an imodel closes, clear the cache for it IModelConnection.onClose.addListener((imodel) => { @@ -87,20 +94,3 @@ class DrawingDataCache { } } - -export class DrawingDataCacheSingleton { - - private static _instance: DrawingDataCache | undefined; - - private static initialize() { - DrawingDataCacheSingleton._instance = new DrawingDataCache(); - } - - public static getInstance(): DrawingDataCache { - if (this._instance === undefined) { - DrawingDataCacheSingleton.initialize(); - } - return DrawingDataCacheSingleton._instance!; - } - -} diff --git a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts index 9be565ae1..4bd2ce20c 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts @@ -27,7 +27,7 @@ import { MeasureAreaToolModel } from "../toolmodels/MeasureAreaToolModel"; import { MeasureTools } from "../MeasureTools"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCacheSingleton } from "../measure-tools-react"; +import { DrawingDataCache } from "../measure-tools-react"; export class MeasureAreaTool extends MeasurementToolBase< AreaMeasurement, @@ -150,7 +150,7 @@ MeasureAreaToolModel return true; } - for (const drawing of DrawingDataCacheSingleton.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { + for (const drawing of DrawingDataCache.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; diff --git a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts index 2a8f06c6e..dcfefbb2e 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts @@ -26,7 +26,7 @@ import { MeasureTools } from "../MeasureTools"; import { MeasureDistanceToolModel } from "../toolmodels/MeasureDistanceToolModel"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCacheSingleton } from "../measure-tools-react"; +import { DrawingDataCache } from "../measure-tools-react"; export class MeasureDistanceTool extends MeasurementToolBase< DistanceMeasurement, @@ -128,7 +128,7 @@ MeasureDistanceToolModel return true; } - for (const drawing of DrawingDataCacheSingleton.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { + for (const drawing of DrawingDataCache.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; diff --git a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts index 1b36740d8..52d04a3a1 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts @@ -36,7 +36,7 @@ import type { DialogItem, DialogItemValue, DialogPropertySyncItem } from "@itwin import { PropertyDescriptionHelper } from "@itwin/appui-abstract"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata, DrawingMetadataProps } from "../api/Measurement"; -import { DrawingDataCacheSingleton } from "../measure-tools-react"; +import { DrawingDataCache } from "../measure-tools-react"; /** Tool that measure precise locations */ export class MeasureLocationTool extends MeasurementToolBase< @@ -157,7 +157,7 @@ MeasureLocationToolModel return true; } - for (const drawing of DrawingDataCacheSingleton.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { + for (const drawing of DrawingDataCache.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { return false; From 749f6b64e9dcd5367eb898b9fe565e9da9b97087 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Fri, 12 Jul 2024 07:59:22 -0400 Subject: [PATCH 14/20] fixed lint issue --- packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index e4d32a34e..5e2f484c8 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -3,10 +3,11 @@ * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { IModelConnection, Viewport } from "@itwin/core-frontend"; +import type { Viewport } from "@itwin/core-frontend"; +import { IModelConnection } from "@itwin/core-frontend"; import { IModelApp } from "@itwin/core-frontend"; import { SheetMeasurementsHelper } from "./SheetMeasurementHelper"; -import { Id64String } from "@itwin/core-bentley"; +import type { Id64String } from "@itwin/core-bentley"; export class DrawingDataCache { From 2fb3446fe448ab2e38e277f1d9f4ed38df344be1 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Mon, 22 Jul 2024 13:55:24 -0400 Subject: [PATCH 15/20] changed import --- packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts index 923656d43..408c6dc53 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts @@ -27,7 +27,7 @@ import { MeasureAreaToolModel } from "../toolmodels/MeasureAreaToolModel"; import { MeasureTools } from "../MeasureTools"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCache } from "../measure-tools-react"; +import { DrawingDataCache } from "../api/DrawingTypeDataCache"; export class MeasureAreaTool extends MeasurementToolBase< AreaMeasurement, From a6c9b6e0eca7e052217338e78bd492498acec306 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Mon, 22 Jul 2024 14:05:23 -0400 Subject: [PATCH 16/20] inverted ifs in isvalid location --- packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts | 4 ++-- packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts | 4 ++-- packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts index 408c6dc53..9230e79e1 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureAreaTool.ts @@ -151,8 +151,8 @@ MeasureAreaToolModel } for (const drawing of DrawingDataCache.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { - if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { - if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { return false; } } diff --git a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts index dcfefbb2e..fb428cfca 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts @@ -129,8 +129,8 @@ MeasureDistanceToolModel } for (const drawing of DrawingDataCache.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { - if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { - if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { return false; } } diff --git a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts index 89c4bc12a..4c4a65091 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts @@ -156,8 +156,8 @@ MeasureLocationToolModel } for (const drawing of DrawingDataCache.getInstance().getSheetDrawingDataForViewport(ev.viewport)) { - if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { - if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + if (drawing.type !== SheetMeasurementsHelper.DrawingType.CrossSection && drawing.type !== SheetMeasurementsHelper.DrawingType.Plan) { + if (SheetMeasurementsHelper.checkIfInDrawing(ev.point, drawing.origin, drawing.extents)) { return false; } } From b875abb9247de6da4d3df831a08b080efe42b626 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Mon, 22 Jul 2024 14:06:10 -0400 Subject: [PATCH 17/20] bad import --- packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts index fb428cfca..a243b7f0f 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureDistanceTool.ts @@ -26,7 +26,7 @@ import { MeasureTools } from "../MeasureTools"; import { MeasureDistanceToolModel } from "../toolmodels/MeasureDistanceToolModel"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata } from "../api/Measurement"; -import { DrawingDataCache } from "../measure-tools-react"; +import { DrawingDataCache } from "../api/DrawingTypeDataCache"; export class MeasureDistanceTool extends MeasurementToolBase< DistanceMeasurement, From dbd11a8f1d836c832b41260610d1271bf4a65ea8 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Mon, 22 Jul 2024 14:13:11 -0400 Subject: [PATCH 18/20] bad import --- packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts index 4c4a65091..a5d0036ec 100644 --- a/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts +++ b/packages/itwin/measure-tools/src/tools/MeasureLocationTool.ts @@ -34,7 +34,7 @@ import type { DialogItem, DialogItemValue, DialogPropertySyncItem } from "@itwin import { PropertyDescriptionHelper } from "@itwin/appui-abstract"; import { SheetMeasurementsHelper } from "../api/SheetMeasurementHelper"; import type { DrawingMetadata, DrawingMetadataProps } from "../api/Measurement"; -import { DrawingDataCache } from "../measure-tools-react"; +import { DrawingDataCache } from "../api/DrawingTypeDataCache"; /** Tool that measure precise locations */ export class MeasureLocationTool extends MeasurementToolBase< From bb860ed3564e94a097af2a471ba9be40f8fe6c4f Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Thu, 25 Jul 2024 13:20:54 -0400 Subject: [PATCH 19/20] readonly --- packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index 5e2f484c8..a42796175 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -67,7 +67,7 @@ export class DrawingDataCache { } } - public getSheetDrawingDataForViewport(vp: Viewport): SheetMeasurementsHelper.DrawingTypeData[] | [] { + public getSheetDrawingDataForViewport(vp: Viewport): Readonly { if (!vp.view.isSheetView()) return []; From b8c9b0f11d7ab764e387d0e2f0e36e9d9eeb6023 Mon Sep 17 00:00:00 2001 From: Maxime Brassard Date: Thu, 25 Jul 2024 13:33:34 -0400 Subject: [PATCH 20/20] array and removed [] --- packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts index a42796175..ff6c66b9b 100644 --- a/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts +++ b/packages/itwin/measure-tools/src/api/DrawingTypeDataCache.ts @@ -67,7 +67,7 @@ export class DrawingDataCache { } } - public getSheetDrawingDataForViewport(vp: Viewport): Readonly { + public getSheetDrawingDataForViewport(vp: Viewport): ReadonlyArray { if (!vp.view.isSheetView()) return [];