UNPKG

@itwin/frontend-devtools

Version:

Debug menu and supporting UI widgets

149 lines • 6.07 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * 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 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.EmphasizeVisibleElementsTool = exports.ClearEmphasizedElementsTool = exports.ClearIsolatedElementsTool = exports.IsolateSelectedElementsTool = exports.EmphasizeSelectedElementsTool = exports.EmphasizeElementsTool = void 0; const core_bentley_1 = require("@itwin/core-bentley"); const core_common_1 = require("@itwin/core-common"); const core_frontend_1 = require("@itwin/core-frontend"); const parseArgs_1 = require("./parseArgs"); /** Applies the `EmphasizeElements` API in some way to the selected Viewport. * @beta */ class EmphasizeElementsTool extends core_frontend_1.Tool { get _wantCreate() { return true; } get _wantClear() { return false; } async run(_args) { const vp = core_frontend_1.IModelApp.viewManager.selectedView; if (undefined === vp) return true; if (this._wantClear) core_frontend_1.EmphasizeElements.clear(vp); const emph = this._wantCreate ? core_frontend_1.EmphasizeElements.getOrCreate(vp) : core_frontend_1.EmphasizeElements.get(vp); if (undefined !== emph) this.execute(emph, vp); return true; } } exports.EmphasizeElementsTool = EmphasizeElementsTool; /** 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 */ 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, core_common_1.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. core_frontend_1.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); } } exports.EmphasizeSelectedElementsTool = EmphasizeSelectedElementsTool; /** Isolate all selected elements so that *only* those elements will be drawn. * @beta */ class IsolateSelectedElementsTool extends EmphasizeElementsTool { static toolId = "IsolateSelectedElements"; execute(emph, vp) { emph.isolateSelectedElements(vp, true, true); } } exports.IsolateSelectedElementsTool = IsolateSelectedElementsTool; /** Clear the set of isolated elements. * @beta */ class ClearIsolatedElementsTool extends EmphasizeElementsTool { static toolId = "ClearIsolatedElements"; get _wantCreate() { return false; } execute(emph, vp) { emph.clearIsolatedElements(vp); } } exports.ClearIsolatedElementsTool = ClearIsolatedElementsTool; /** Reset [EmphasizeElements]($frontend) for the active [Viewport]($frontend). * @beta */ class ClearEmphasizedElementsTool extends EmphasizeElementsTool { static toolId = "ClearEmphasizedElements"; get _wantCreate() { return false; } get _wantClear() { return true; } execute(emph, vp) { emph.clearEmphasizedElements(vp); vp.isFadeOutActive = false; } } exports.ClearEmphasizedElementsTool = ClearEmphasizedElementsTool; /** Emphasize the set of elements currently visible in the view based on [Viewport.queryVisibleFeatures]($frontend). * @beta */ 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 = (0, parseArgs_1.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 && core_bentley_1.Id64.isValid(feature.elementId)) elementIds.add(feature.elementId); } }); emph.wantEmphasis = true; if (emph.emphasizeElements(elementIds, vp)) vp.isFadeOutActive = true; } } exports.EmphasizeVisibleElementsTool = EmphasizeVisibleElementsTool; //# sourceMappingURL=EmphasizeElementsTool.js.map