@itwin/frontend-devtools
Version:
Debug menu and supporting UI widgets
140 lines • 5.26 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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