@itwin/frontend-devtools 5.7.0-dev.15 → 5.7.0-dev.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,7 +40,7 @@ class ViewDefinitionDecoration {
40
40
  const vp = core_frontend_1.OffScreenViewport.create({ view: result, viewRect: new core_frontend_1.ViewRect(0, 0, vector.x, vector.y) });
41
41
  const frustum = vp.getFrustum();
42
42
  this._preloadedFrustum.push(frustum.transformBy(transform));
43
- }).catch((err) => { core_bentley_1.Logger.logException("FrontendDevTools", err); });
43
+ }).catch((err) => { core_bentley_1.Logger.logError("FrontendDevTools", err); });
44
44
  }
45
45
  preload(viewport) {
46
46
  this._loading = true;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewDefinitionDecorator.js","sourceRoot":"","sources":["../../../src/tools/ViewDefinitionDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { ColorDef, Frustum, LinePixels } from \"@itwin/core-common\";\r\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, OffScreenViewport, Tool, Viewport, ViewRect } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { Id64, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d } from \"@itwin/core-geometry\";\r\n\r\nclass ViewDefinitionDecoration {\r\n private static _instance?: ViewDefinitionDecoration;\r\n private _removeMe?: () => void;\r\n\r\n private constructor() {\r\n this._removeMe = IModelApp.viewManager.addDecorator(this);\r\n }\r\n\r\n private stop() {\r\n if (this._removeMe) {\r\n this._removeMe();\r\n this._removeMe = undefined;\r\n }\r\n }\r\n\r\n private _viewId?: Id64String;\r\n private _loading: boolean = false;\r\n private _preloadedFrustum: Frustum[] = [];\r\n\r\n private async getFrustumForViewId(iModel: IModelConnection, viewId: Id64String, transform: Transform = Transform.createIdentity()): Promise<void> {\r\n return iModel.views.load(viewId).then((result) => {\r\n // Use the view extents/delta\r\n let vector: Vector2d;\r\n if (result.is2d()) vector = Vector2d.create(result.delta.x, result.delta.y);\r\n else vector = Vector2d.create(result.getExtents().x, result.getExtents().y);\r\n // create a viewport to the size of the extents to ensure the aspect is correct.\r\n const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0,0,vector.x,vector.y) });\r\n const frustum = vp.getFrustum();\r\n this._preloadedFrustum.push(frustum.transformBy(transform));\r\n\r\n }).catch((err: unknown) => { Logger.logException(\"FrontendDevTools\", err)});\r\n }\r\n\r\n public preload(viewport: Viewport) {\r\n this._loading = true;\r\n const iModel = viewport.iModel;\r\n const view = viewport.view;\r\n const viewId = view.id;\r\n\r\n const loadPromises: Promise<void>[] = [];\r\n loadPromises.push(this.getFrustumForViewId(iModel, viewId));\r\n\r\n if (view.isDrawingView() && view.sectionDrawingInfo.spatialView)\r\n loadPromises.push(this.getFrustumForViewId(iModel, view.sectionDrawingInfo.spatialView, view.sectionDrawingInfo.drawingToSpatialTransform.inverse()));\r\n\r\n void Promise.all(loadPromises).finally(() => {\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n this._viewId = viewId;\r\n this._loading = false;\r\n });\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (context.viewport.view.id !== this._viewId && !this._loading) {\r\n this._preloadedFrustum.length = 0;\r\n // just clear the decoration if the view is not from a view definition\r\n if (Id64.isValidId64(context.viewport.view.id))\r\n this.preload(context.viewport);\r\n }\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const purple = ColorDef.fromString(\"#800080\");\r\n\r\n // The current view's frustum is at the end of the array.\r\n builder.setSymbology(purple, purple, 5, LinePixels.Code0);\r\n const endIndex = this._preloadedFrustum.length - 1;\r\n const currentFrustum = this._preloadedFrustum[endIndex];\r\n if (currentFrustum) builder.addFrustum(currentFrustum);\r\n\r\n // Add other frustums.\r\n builder.setSymbology(purple, purple, 4, LinePixels.Code2);\r\n const remainingFrustums = this._preloadedFrustum.slice(0, endIndex);\r\n remainingFrustums.forEach((frustum) => builder.addFrustum(frustum));\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(enabled?: boolean): void {\r\n const instance = ViewDefinitionDecoration._instance;\r\n if (undefined !== enabled && (undefined !== instance) === enabled)\r\n return;\r\n\r\n if (undefined === instance) {\r\n ViewDefinitionDecoration._instance = new ViewDefinitionDecoration();\r\n } else {\r\n instance.stop();\r\n ViewDefinitionDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.\r\n * @beta\r\n */\r\nexport class ViewDefinitionDecorationTool extends Tool {\r\n public static override toolId = \"ViewDefinitionDecorationTool\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n ViewDefinitionDecoration.toggle(enable);\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewDefinitionDecorator.js","sourceRoot":"","sources":["../../../src/tools/ViewDefinitionDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { ColorDef, Frustum, LinePixels } from \"@itwin/core-common\";\r\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, OffScreenViewport, Tool, Viewport, ViewRect } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { Id64, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d } from \"@itwin/core-geometry\";\r\n\r\nclass ViewDefinitionDecoration {\r\n private static _instance?: ViewDefinitionDecoration;\r\n private _removeMe?: () => void;\r\n\r\n private constructor() {\r\n this._removeMe = IModelApp.viewManager.addDecorator(this);\r\n }\r\n\r\n private stop() {\r\n if (this._removeMe) {\r\n this._removeMe();\r\n this._removeMe = undefined;\r\n }\r\n }\r\n\r\n private _viewId?: Id64String;\r\n private _loading: boolean = false;\r\n private _preloadedFrustum: Frustum[] = [];\r\n\r\n private async getFrustumForViewId(iModel: IModelConnection, viewId: Id64String, transform: Transform = Transform.createIdentity()): Promise<void> {\r\n return iModel.views.load(viewId).then((result) => {\r\n // Use the view extents/delta\r\n let vector: Vector2d;\r\n if (result.is2d()) vector = Vector2d.create(result.delta.x, result.delta.y);\r\n else vector = Vector2d.create(result.getExtents().x, result.getExtents().y);\r\n // create a viewport to the size of the extents to ensure the aspect is correct.\r\n const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0,0,vector.x,vector.y) });\r\n const frustum = vp.getFrustum();\r\n this._preloadedFrustum.push(frustum.transformBy(transform));\r\n\r\n }).catch((err: unknown) => { Logger.logError(\"FrontendDevTools\", err)});\r\n }\r\n\r\n public preload(viewport: Viewport) {\r\n this._loading = true;\r\n const iModel = viewport.iModel;\r\n const view = viewport.view;\r\n const viewId = view.id;\r\n\r\n const loadPromises: Promise<void>[] = [];\r\n loadPromises.push(this.getFrustumForViewId(iModel, viewId));\r\n\r\n if (view.isDrawingView() && view.sectionDrawingInfo.spatialView)\r\n loadPromises.push(this.getFrustumForViewId(iModel, view.sectionDrawingInfo.spatialView, view.sectionDrawingInfo.drawingToSpatialTransform.inverse()));\r\n\r\n void Promise.all(loadPromises).finally(() => {\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n this._viewId = viewId;\r\n this._loading = false;\r\n });\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (context.viewport.view.id !== this._viewId && !this._loading) {\r\n this._preloadedFrustum.length = 0;\r\n // just clear the decoration if the view is not from a view definition\r\n if (Id64.isValidId64(context.viewport.view.id))\r\n this.preload(context.viewport);\r\n }\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const purple = ColorDef.fromString(\"#800080\");\r\n\r\n // The current view's frustum is at the end of the array.\r\n builder.setSymbology(purple, purple, 5, LinePixels.Code0);\r\n const endIndex = this._preloadedFrustum.length - 1;\r\n const currentFrustum = this._preloadedFrustum[endIndex];\r\n if (currentFrustum) builder.addFrustum(currentFrustum);\r\n\r\n // Add other frustums.\r\n builder.setSymbology(purple, purple, 4, LinePixels.Code2);\r\n const remainingFrustums = this._preloadedFrustum.slice(0, endIndex);\r\n remainingFrustums.forEach((frustum) => builder.addFrustum(frustum));\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(enabled?: boolean): void {\r\n const instance = ViewDefinitionDecoration._instance;\r\n if (undefined !== enabled && (undefined !== instance) === enabled)\r\n return;\r\n\r\n if (undefined === instance) {\r\n ViewDefinitionDecoration._instance = new ViewDefinitionDecoration();\r\n } else {\r\n instance.stop();\r\n ViewDefinitionDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.\r\n * @beta\r\n */\r\nexport class ViewDefinitionDecorationTool extends Tool {\r\n public static override toolId = \"ViewDefinitionDecorationTool\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n ViewDefinitionDecoration.toggle(enable);\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -37,7 +37,7 @@ class ViewDefinitionDecoration {
37
37
  const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0, 0, vector.x, vector.y) });
38
38
  const frustum = vp.getFrustum();
39
39
  this._preloadedFrustum.push(frustum.transformBy(transform));
40
- }).catch((err) => { Logger.logException("FrontendDevTools", err); });
40
+ }).catch((err) => { Logger.logError("FrontendDevTools", err); });
41
41
  }
42
42
  preload(viewport) {
43
43
  this._loading = true;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewDefinitionDecorator.js","sourceRoot":"","sources":["../../../src/tools/ViewDefinitionDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { ColorDef, Frustum, LinePixels } from \"@itwin/core-common\";\r\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, OffScreenViewport, Tool, Viewport, ViewRect } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { Id64, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d } from \"@itwin/core-geometry\";\r\n\r\nclass ViewDefinitionDecoration {\r\n private static _instance?: ViewDefinitionDecoration;\r\n private _removeMe?: () => void;\r\n\r\n private constructor() {\r\n this._removeMe = IModelApp.viewManager.addDecorator(this);\r\n }\r\n\r\n private stop() {\r\n if (this._removeMe) {\r\n this._removeMe();\r\n this._removeMe = undefined;\r\n }\r\n }\r\n\r\n private _viewId?: Id64String;\r\n private _loading: boolean = false;\r\n private _preloadedFrustum: Frustum[] = [];\r\n\r\n private async getFrustumForViewId(iModel: IModelConnection, viewId: Id64String, transform: Transform = Transform.createIdentity()): Promise<void> {\r\n return iModel.views.load(viewId).then((result) => {\r\n // Use the view extents/delta\r\n let vector: Vector2d;\r\n if (result.is2d()) vector = Vector2d.create(result.delta.x, result.delta.y);\r\n else vector = Vector2d.create(result.getExtents().x, result.getExtents().y);\r\n // create a viewport to the size of the extents to ensure the aspect is correct.\r\n const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0,0,vector.x,vector.y) });\r\n const frustum = vp.getFrustum();\r\n this._preloadedFrustum.push(frustum.transformBy(transform));\r\n\r\n }).catch((err: unknown) => { Logger.logException(\"FrontendDevTools\", err)});\r\n }\r\n\r\n public preload(viewport: Viewport) {\r\n this._loading = true;\r\n const iModel = viewport.iModel;\r\n const view = viewport.view;\r\n const viewId = view.id;\r\n\r\n const loadPromises: Promise<void>[] = [];\r\n loadPromises.push(this.getFrustumForViewId(iModel, viewId));\r\n\r\n if (view.isDrawingView() && view.sectionDrawingInfo.spatialView)\r\n loadPromises.push(this.getFrustumForViewId(iModel, view.sectionDrawingInfo.spatialView, view.sectionDrawingInfo.drawingToSpatialTransform.inverse()));\r\n\r\n void Promise.all(loadPromises).finally(() => {\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n this._viewId = viewId;\r\n this._loading = false;\r\n });\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (context.viewport.view.id !== this._viewId && !this._loading) {\r\n this._preloadedFrustum.length = 0;\r\n // just clear the decoration if the view is not from a view definition\r\n if (Id64.isValidId64(context.viewport.view.id))\r\n this.preload(context.viewport);\r\n }\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const purple = ColorDef.fromString(\"#800080\");\r\n\r\n // The current view's frustum is at the end of the array.\r\n builder.setSymbology(purple, purple, 5, LinePixels.Code0);\r\n const endIndex = this._preloadedFrustum.length - 1;\r\n const currentFrustum = this._preloadedFrustum[endIndex];\r\n if (currentFrustum) builder.addFrustum(currentFrustum);\r\n\r\n // Add other frustums.\r\n builder.setSymbology(purple, purple, 4, LinePixels.Code2);\r\n const remainingFrustums = this._preloadedFrustum.slice(0, endIndex);\r\n remainingFrustums.forEach((frustum) => builder.addFrustum(frustum));\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(enabled?: boolean): void {\r\n const instance = ViewDefinitionDecoration._instance;\r\n if (undefined !== enabled && (undefined !== instance) === enabled)\r\n return;\r\n\r\n if (undefined === instance) {\r\n ViewDefinitionDecoration._instance = new ViewDefinitionDecoration();\r\n } else {\r\n instance.stop();\r\n ViewDefinitionDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.\r\n * @beta\r\n */\r\nexport class ViewDefinitionDecorationTool extends Tool {\r\n public static override toolId = \"ViewDefinitionDecorationTool\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n ViewDefinitionDecoration.toggle(enable);\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewDefinitionDecorator.js","sourceRoot":"","sources":["../../../src/tools/ViewDefinitionDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { ColorDef, Frustum, LinePixels } from \"@itwin/core-common\";\r\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, OffScreenViewport, Tool, Viewport, ViewRect } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { Id64, Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d } from \"@itwin/core-geometry\";\r\n\r\nclass ViewDefinitionDecoration {\r\n private static _instance?: ViewDefinitionDecoration;\r\n private _removeMe?: () => void;\r\n\r\n private constructor() {\r\n this._removeMe = IModelApp.viewManager.addDecorator(this);\r\n }\r\n\r\n private stop() {\r\n if (this._removeMe) {\r\n this._removeMe();\r\n this._removeMe = undefined;\r\n }\r\n }\r\n\r\n private _viewId?: Id64String;\r\n private _loading: boolean = false;\r\n private _preloadedFrustum: Frustum[] = [];\r\n\r\n private async getFrustumForViewId(iModel: IModelConnection, viewId: Id64String, transform: Transform = Transform.createIdentity()): Promise<void> {\r\n return iModel.views.load(viewId).then((result) => {\r\n // Use the view extents/delta\r\n let vector: Vector2d;\r\n if (result.is2d()) vector = Vector2d.create(result.delta.x, result.delta.y);\r\n else vector = Vector2d.create(result.getExtents().x, result.getExtents().y);\r\n // create a viewport to the size of the extents to ensure the aspect is correct.\r\n const vp = OffScreenViewport.create({ view: result, viewRect: new ViewRect(0,0,vector.x,vector.y) });\r\n const frustum = vp.getFrustum();\r\n this._preloadedFrustum.push(frustum.transformBy(transform));\r\n\r\n }).catch((err: unknown) => { Logger.logError(\"FrontendDevTools\", err)});\r\n }\r\n\r\n public preload(viewport: Viewport) {\r\n this._loading = true;\r\n const iModel = viewport.iModel;\r\n const view = viewport.view;\r\n const viewId = view.id;\r\n\r\n const loadPromises: Promise<void>[] = [];\r\n loadPromises.push(this.getFrustumForViewId(iModel, viewId));\r\n\r\n if (view.isDrawingView() && view.sectionDrawingInfo.spatialView)\r\n loadPromises.push(this.getFrustumForViewId(iModel, view.sectionDrawingInfo.spatialView, view.sectionDrawingInfo.drawingToSpatialTransform.inverse()));\r\n\r\n void Promise.all(loadPromises).finally(() => {\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n this._viewId = viewId;\r\n this._loading = false;\r\n });\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (context.viewport.view.id !== this._viewId && !this._loading) {\r\n this._preloadedFrustum.length = 0;\r\n // just clear the decoration if the view is not from a view definition\r\n if (Id64.isValidId64(context.viewport.view.id))\r\n this.preload(context.viewport);\r\n }\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const purple = ColorDef.fromString(\"#800080\");\r\n\r\n // The current view's frustum is at the end of the array.\r\n builder.setSymbology(purple, purple, 5, LinePixels.Code0);\r\n const endIndex = this._preloadedFrustum.length - 1;\r\n const currentFrustum = this._preloadedFrustum[endIndex];\r\n if (currentFrustum) builder.addFrustum(currentFrustum);\r\n\r\n // Add other frustums.\r\n builder.setSymbology(purple, purple, 4, LinePixels.Code2);\r\n const remainingFrustums = this._preloadedFrustum.slice(0, endIndex);\r\n remainingFrustums.forEach((frustum) => builder.addFrustum(frustum));\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(enabled?: boolean): void {\r\n const instance = ViewDefinitionDecoration._instance;\r\n if (undefined !== enabled && (undefined !== instance) === enabled)\r\n return;\r\n\r\n if (undefined === instance) {\r\n ViewDefinitionDecoration._instance = new ViewDefinitionDecoration();\r\n } else {\r\n instance.stop();\r\n ViewDefinitionDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Display in every viewport a green range graphic for each displayed tile tree, plus a red range graphic for each tile tree's content range if defined.\r\n * @beta\r\n */\r\nexport class ViewDefinitionDecorationTool extends Tool {\r\n public static override toolId = \"ViewDefinitionDecorationTool\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n ViewDefinitionDecoration.toggle(enable);\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/frontend-devtools",
3
- "version": "5.7.0-dev.15",
3
+ "version": "5.7.0-dev.16",
4
4
  "description": "Debug menu and supporting UI widgets",
5
5
  "main": "lib/cjs/frontend-devtools.js",
6
6
  "module": "lib/esm/frontend-devtools.js",
@@ -24,10 +24,10 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "file-saver": "^2.0.2",
27
- "@itwin/core-bentley": "5.7.0-dev.15",
28
- "@itwin/core-common": "5.7.0-dev.15",
29
- "@itwin/core-geometry": "5.7.0-dev.15",
30
- "@itwin/core-frontend": "5.7.0-dev.15"
27
+ "@itwin/core-bentley": "5.7.0-dev.16",
28
+ "@itwin/core-common": "5.7.0-dev.16",
29
+ "@itwin/core-frontend": "5.7.0-dev.16",
30
+ "@itwin/core-geometry": "5.7.0-dev.16"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@itwin/eslint-plugin": "^6.0.0",
@@ -36,7 +36,7 @@
36
36
  "eslint": "^9.31.0",
37
37
  "rimraf": "^6.0.1",
38
38
  "typescript": "~5.6.2",
39
- "@itwin/build-tools": "5.7.0-dev.15"
39
+ "@itwin/build-tools": "5.7.0-dev.16"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm",