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