UNPKG

@itwin/frontend-devtools

Version:

Debug menu and supporting UI widgets

140 lines 5.26 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 { Id64 } from "@itwin/core-bentley"; import { ColorDef } from "@itwin/core-common"; import { EmphasizeElements, IModelApp, Tool } from "@itwin/core-frontend"; import { parseArgs } from "./parseArgs"; /** Applies the `EmphasizeElements` API in some way to the selected Viewport. * @beta */ export class EmphasizeElementsTool extends Tool { get _wantCreate() { return true; } get _wantClear() { return false; } async run(_args) { const vp = IModelApp.viewManager.selectedView; if (undefined === vp) return true; if (this._wantClear) EmphasizeElements.clear(vp); const emph = this._wantCreate ? EmphasizeElements.getOrCreate(vp) : EmphasizeElements.get(vp); if (undefined !== emph) this.execute(emph, vp); return true; } } /** If any elements are selected, emphasize them all by overriding their color to be orange; and de-emphasize all other elements by drawing them transparent grey. * @beta */ export class EmphasizeSelectedElementsTool extends EmphasizeElementsTool { static toolId = "EmphasizeSelectedElements"; static get minArgs() { return 0; } static get maxArgs() { return 1; } _type = 0 /* OverrideType.None */; execute(emph, vp) { if (0 /* OverrideType.None */ === (this._type & 1 /* OverrideType.Color */) || emph.overrideSelectedElements(vp, ColorDef.white, undefined, true, false)) { emph.wantEmphasis = 0 /* OverrideType.None */ !== (this._type & 2 /* OverrideType.Emphasis */); if (emph.emphasizeSelectedElements(vp, undefined, true)) { vp.isFadeOutActive = true; return; } } // Empty selection set - clear any previous overrides. EmphasizeElements.clear(vp); emph.wantEmphasis = false; vp.isFadeOutActive = false; } async parseAndRun(...args) { if (1 === args.length) { switch (args[0].toLowerCase()[0]) { case "n": break; case "c": this._type = 1 /* OverrideType.Color */; break; case "e": this._type = 2 /* OverrideType.Emphasis */; break; case "b": this._type = 3 /* OverrideType.Both */; break; } } return this.run(args); } } /** Isolate all selected elements so that *only* those elements will be drawn. * @beta */ export class IsolateSelectedElementsTool extends EmphasizeElementsTool { static toolId = "IsolateSelectedElements"; execute(emph, vp) { emph.isolateSelectedElements(vp, true, true); } } /** Clear the set of isolated elements. * @beta */ export class ClearIsolatedElementsTool extends EmphasizeElementsTool { static toolId = "ClearIsolatedElements"; get _wantCreate() { return false; } execute(emph, vp) { emph.clearIsolatedElements(vp); } } /** Reset [EmphasizeElements]($frontend) for the active [Viewport]($frontend). * @beta */ export class ClearEmphasizedElementsTool extends EmphasizeElementsTool { static toolId = "ClearEmphasizedElements"; get _wantCreate() { return false; } get _wantClear() { return true; } execute(emph, vp) { emph.clearEmphasizedElements(vp); vp.isFadeOutActive = false; } } /** Emphasize the set of elements currently visible in the view based on [Viewport.queryVisibleFeatures]($frontend). * @beta */ export class EmphasizeVisibleElementsTool extends EmphasizeElementsTool { static toolId = "EmphasizeVisibleElements"; static get minArgs() { return 1; } static get maxArgs() { return 2; } _options = { source: "screen" }; get _wantClear() { return true; } async parseAndRun(...input) { const args = parseArgs(input); const includeNonLocatable = args.getBoolean("n"); let source; switch (input[0].toLowerCase()) { case "screen": source = "screen"; break; case "tiles": source = "tiles"; break; default: return false; } this._options = { source, includeNonLocatable }; return this.run(input); } execute(emph, vp) { const elementIds = new Set(); vp.queryVisibleFeatures(this._options, (features) => { for (const feature of features) { if (feature.iModel === vp.iModel && Id64.isValid(feature.elementId)) elementIds.add(feature.elementId); } }); emph.wantEmphasis = true; if (emph.emphasizeElements(elementIds, vp)) vp.isFadeOutActive = true; } } //# sourceMappingURL=EmphasizeElementsTool.js.map