UNPKG

@itwin/frontend-devtools

Version:

Debug menu and supporting UI widgets

75 lines 2.96 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Tools */ import { ColorDef, LinePixels } from "@itwin/core-common"; import { GraphicType, IModelApp, Tool } from "@itwin/core-frontend"; import { parseToggle } from "./parseToggle"; class TreeDecoration { static _instance; _removeMe; constructor() { this._removeMe = IModelApp.viewManager.addDecorator(this); } stop() { if (this._removeMe) { this._removeMe(); this._removeMe = undefined; } } /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */ useCachedDecorations = true; decorate(context) { for (const ref of context.viewport.getTileTreeRefs()) { this.drawBoundingBox(ref, context); } } drawBoundingBox(ref, context) { const tree = ref.treeOwner.tileTree; const location = ref.getLocation(); if (undefined === location || undefined === tree || tree.isContentUnbounded || tree.range.isNull) return; const builder = context.createGraphicBuilder(GraphicType.WorldDecoration, location); builder.setSymbology(ColorDef.green, ColorDef.green, 1, LinePixels.Solid); builder.addRangeBox(tree.range); if (undefined !== tree.contentRange) { builder.setSymbology(ColorDef.red, ColorDef.red, 1, LinePixels.Solid); builder.addRangeBox(tree.contentRange); } context.addDecorationFromBuilder(builder); } static toggle(enabled) { const instance = TreeDecoration._instance; if (undefined !== enabled && (undefined !== instance) === enabled) return; if (undefined === instance) { TreeDecoration._instance = new TreeDecoration(); } else { instance.stop(); TreeDecoration._instance = undefined; } } } /** 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. * @beta */ export class ToggleTileTreeBoundsDecorationTool extends Tool { static toolId = "ToggleTileTreeBoundsDecoration"; static get minArgs() { return 0; } static get maxArgs() { return 1; } async run(enable) { TreeDecoration.toggle(enable); return true; } async parseAndRun(...args) { const enable = parseToggle(args[0]); if (typeof enable !== "string") await this.run(enable); return true; } } //# sourceMappingURL=TileTreeBoundsDecoration.js.map