@itwin/frontend-devtools 3.0.0-dev.98 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +96 -1
  2. package/LICENSE.md +1 -1
  3. package/README.md +28 -3
  4. package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
  5. package/lib/cjs/FrontEndDevTools.js +6 -1
  6. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  7. package/lib/cjs/effects/Explosion.d.ts.map +1 -1
  8. package/lib/cjs/effects/Explosion.js +3 -2
  9. package/lib/cjs/effects/Explosion.js.map +1 -1
  10. package/lib/cjs/effects/Snow.d.ts.map +1 -1
  11. package/lib/cjs/effects/Snow.js +3 -2
  12. package/lib/cjs/effects/Snow.js.map +1 -1
  13. package/lib/cjs/frontend-devtools.d.ts +1 -1
  14. package/lib/cjs/frontend-devtools.js +1 -1
  15. package/lib/cjs/frontend-devtools.js.map +1 -1
  16. package/lib/cjs/tools/ClipTools.d.ts +2 -2
  17. package/lib/cjs/tools/ClipTools.d.ts.map +1 -1
  18. package/lib/cjs/tools/ClipTools.js +2 -2
  19. package/lib/cjs/tools/ClipTools.js.map +1 -1
  20. package/lib/cjs/tools/DisplayStyleTools.d.ts +75 -16
  21. package/lib/cjs/tools/DisplayStyleTools.d.ts.map +1 -1
  22. package/lib/cjs/tools/DisplayStyleTools.js +219 -15
  23. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  24. package/lib/cjs/tools/PlanProjectionTools.d.ts +6 -6
  25. package/lib/cjs/tools/PlanProjectionTools.d.ts.map +1 -1
  26. package/lib/cjs/tools/PlanProjectionTools.js +6 -6
  27. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  28. package/lib/cjs/tools/PlanarMaskTools.d.ts +3 -2
  29. package/lib/cjs/tools/PlanarMaskTools.d.ts.map +1 -1
  30. package/lib/cjs/tools/PlanarMaskTools.js +47 -22
  31. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  32. package/lib/cjs/tools/RenderSystemTools.d.ts +0 -7
  33. package/lib/cjs/tools/RenderSystemTools.d.ts.map +1 -1
  34. package/lib/cjs/tools/RenderSystemTools.js +1 -11
  35. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  36. package/lib/cjs/tools/SourceAspectIdTools.js +1 -1
  37. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  38. package/lib/cjs/tools/ViewportTools.d.ts +15 -0
  39. package/lib/cjs/tools/ViewportTools.d.ts.map +1 -1
  40. package/lib/cjs/tools/ViewportTools.js +46 -1
  41. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  42. package/lib/cjs/widgets/DiagnosticsPanel.d.ts +2 -0
  43. package/lib/cjs/widgets/DiagnosticsPanel.d.ts.map +1 -1
  44. package/lib/cjs/widgets/DiagnosticsPanel.js +6 -0
  45. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  46. package/lib/cjs/widgets/MemoryTracker.js +2 -2
  47. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  48. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +16 -0
  49. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts.map +1 -0
  50. package/lib/cjs/widgets/RenderCommandBreakdown.js +69 -0
  51. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -0
  52. package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
  53. package/lib/esm/FrontEndDevTools.js +9 -4
  54. package/lib/esm/FrontEndDevTools.js.map +1 -1
  55. package/lib/esm/effects/Explosion.d.ts.map +1 -1
  56. package/lib/esm/effects/Explosion.js +3 -2
  57. package/lib/esm/effects/Explosion.js.map +1 -1
  58. package/lib/esm/effects/Snow.d.ts.map +1 -1
  59. package/lib/esm/effects/Snow.js +3 -2
  60. package/lib/esm/effects/Snow.js.map +1 -1
  61. package/lib/esm/frontend-devtools.d.ts +1 -1
  62. package/lib/esm/frontend-devtools.js +1 -1
  63. package/lib/esm/frontend-devtools.js.map +1 -1
  64. package/lib/esm/tools/ClipTools.d.ts +2 -2
  65. package/lib/esm/tools/ClipTools.d.ts.map +1 -1
  66. package/lib/esm/tools/ClipTools.js +2 -2
  67. package/lib/esm/tools/ClipTools.js.map +1 -1
  68. package/lib/esm/tools/DisplayStyleTools.d.ts +75 -16
  69. package/lib/esm/tools/DisplayStyleTools.d.ts.map +1 -1
  70. package/lib/esm/tools/DisplayStyleTools.js +215 -16
  71. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  72. package/lib/esm/tools/PlanProjectionTools.d.ts +6 -6
  73. package/lib/esm/tools/PlanProjectionTools.d.ts.map +1 -1
  74. package/lib/esm/tools/PlanProjectionTools.js +6 -6
  75. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  76. package/lib/esm/tools/PlanarMaskTools.d.ts +3 -2
  77. package/lib/esm/tools/PlanarMaskTools.d.ts.map +1 -1
  78. package/lib/esm/tools/PlanarMaskTools.js +47 -22
  79. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  80. package/lib/esm/tools/RenderSystemTools.d.ts +0 -7
  81. package/lib/esm/tools/RenderSystemTools.d.ts.map +1 -1
  82. package/lib/esm/tools/RenderSystemTools.js +0 -9
  83. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  84. package/lib/esm/tools/SourceAspectIdTools.js +1 -1
  85. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  86. package/lib/esm/tools/ViewportTools.d.ts +15 -0
  87. package/lib/esm/tools/ViewportTools.d.ts.map +1 -1
  88. package/lib/esm/tools/ViewportTools.js +44 -0
  89. package/lib/esm/tools/ViewportTools.js.map +1 -1
  90. package/lib/esm/widgets/DiagnosticsPanel.d.ts +2 -0
  91. package/lib/esm/widgets/DiagnosticsPanel.d.ts.map +1 -1
  92. package/lib/esm/widgets/DiagnosticsPanel.js +6 -0
  93. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  94. package/lib/esm/widgets/MemoryTracker.js +2 -2
  95. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  96. package/lib/esm/widgets/RenderCommandBreakdown.d.ts +16 -0
  97. package/lib/esm/widgets/RenderCommandBreakdown.d.ts.map +1 -0
  98. package/lib/esm/widgets/RenderCommandBreakdown.js +65 -0
  99. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -0
  100. package/lib/public/locales/en/FrontendDevTools.json +464 -449
  101. package/package.json +11 -11
@@ -5,8 +5,9 @@
5
5
  /** @packageDocumentation
6
6
  * @module Tools
7
7
  */
8
- import { RenderMode, SubCategoryOverride, ViewFlags, WhiteOnWhiteReversalSettings, } from "@itwin/core-common";
9
- import { Environment, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, } from "@itwin/core-frontend";
8
+ import { CompressedId64Set } from "@itwin/core-bentley";
9
+ import { ColorDef, RenderMode, SkyCube, SkySphere, SubCategoryOverride, ViewFlags, WhiteOnWhiteReversalSettings, } from "@itwin/core-common";
10
+ import { IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, } from "@itwin/core-frontend";
10
11
  import { copyStringToClipboard } from "../ClipboardUtilities";
11
12
  import { parseArgs } from "./parseArgs";
12
13
  import { parseToggle } from "./parseToggle";
@@ -14,6 +15,7 @@ import { parseToggle } from "./parseToggle";
14
15
  const booleanFlagNames = [
15
16
  "dimensions", "patterns", "weights", "styles", "transparency", "fill", "textures", "materials", "acsTriad", "grid", "visibleEdges",
16
17
  "hiddenEdges", "lighting", "shadows", "clipVolume", "constructions", "monochrome", "backgroundMap", "ambientOcclusion", "forceSurfaceDiscard",
18
+ "wiremesh",
17
19
  ];
18
20
  const lowercaseBooleanFlagNames = booleanFlagNames.map((name) => name.toLowerCase());
19
21
  /** Modifies the selected viewport's DisplayStyleState.
@@ -23,13 +25,13 @@ export class DisplayStyleTool extends Tool {
23
25
  get require3d() { return false; }
24
26
  async run() {
25
27
  const vp = IModelApp.viewManager.selectedView;
26
- if (undefined !== vp && (!this.require3d || vp.view.is3d()) && this.execute(vp))
28
+ if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.execute(vp))
27
29
  vp.displayStyle = vp.view.displayStyle;
28
30
  return true;
29
31
  }
30
32
  async parseAndRun(...args) {
31
33
  const vp = IModelApp.viewManager.selectedView;
32
- if (undefined !== vp && (!this.require3d || vp.view.is3d()) && this.parse(args))
34
+ if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.parse(args, vp))
33
35
  return this.run();
34
36
  else
35
37
  return false;
@@ -94,14 +96,99 @@ ChangeViewFlagsTool.toolId = "ChangeViewFlags";
94
96
  */
95
97
  export class ToggleSkyboxTool extends DisplayStyleTool {
96
98
  get require3d() { return true; }
97
- parse(_args) { return true; } // no arguments
98
- execute(vp) {
99
+ async parse(_args) { return true; } // no arguments
100
+ async execute(vp) {
99
101
  const style = vp.view.displayStyle;
100
- style.environment = new Environment({ sky: { display: !style.environment.sky.display } });
102
+ style.environment = style.environment.withDisplay({ sky: !style.environment.displaySky });
101
103
  return true;
102
104
  }
103
105
  }
104
106
  ToggleSkyboxTool.toolId = "ToggleSkybox";
107
+ /** Defines a [SkySphere]($common) to apply to the current view.
108
+ * @beta
109
+ */
110
+ export class SkySphereTool extends DisplayStyleTool {
111
+ static get minArgs() { return 1; }
112
+ static get maxArgs() { return 1; }
113
+ get require3d() { return true; }
114
+ async parse(args) {
115
+ this._image = args[0];
116
+ return true;
117
+ }
118
+ async execute(vp) {
119
+ if (this._image && vp.view.is3d()) {
120
+ vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({
121
+ displaySky: true,
122
+ sky: new SkySphere(this._image),
123
+ });
124
+ }
125
+ return true;
126
+ }
127
+ }
128
+ SkySphereTool.toolId = "SetSkySphere";
129
+ /** Defines a [SkyCube]($common) to apply to the current view.
130
+ * @beta
131
+ */
132
+ export class SkyCubeTool extends DisplayStyleTool {
133
+ constructor() {
134
+ super(...arguments);
135
+ this._images = [];
136
+ }
137
+ static get minArgs() { return 1; }
138
+ static get maxArgs() { return 6; }
139
+ get require3d() { return true; }
140
+ async parse(args) {
141
+ this._images = [...args];
142
+ return true;
143
+ }
144
+ async execute(vp) {
145
+ const imgs = this._images;
146
+ if (imgs.length === 0 || !vp.view.is3d())
147
+ return true;
148
+ let top, bottom, left, right, front, back;
149
+ switch (imgs.length) {
150
+ case 1:
151
+ top = bottom = left = right = front = back = imgs[0];
152
+ break;
153
+ case 2:
154
+ top = bottom = imgs[0];
155
+ left = right = front = back = imgs[1];
156
+ break;
157
+ case 3:
158
+ top = bottom = imgs[0];
159
+ left = right = imgs[1];
160
+ front = back = imgs[2];
161
+ break;
162
+ case 4:
163
+ top = imgs[0];
164
+ bottom = imgs[1];
165
+ left = right = imgs[2];
166
+ front = back = imgs[3];
167
+ break;
168
+ case 5:
169
+ top = bottom = imgs[0];
170
+ left = imgs[1];
171
+ right = imgs[2];
172
+ front = imgs[3];
173
+ back = imgs[4];
174
+ break;
175
+ default:
176
+ top = imgs[0];
177
+ bottom = imgs[1];
178
+ left = imgs[2];
179
+ right = imgs[3];
180
+ front = imgs[4];
181
+ back = imgs[5];
182
+ break;
183
+ }
184
+ vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({
185
+ displaySky: true,
186
+ sky: new SkyCube({ top, bottom, left, right, front, back }),
187
+ });
188
+ return true;
189
+ }
190
+ }
191
+ SkyCubeTool.toolId = "SetSkyCube";
105
192
  /** Outputs (and optionally copies to the clipboard) a "rendering style" as a partial DisplayStyle3dSettingsProps JSON object based
106
193
  * on the current view's display style settings.
107
194
  * All arguments are optional, of the form "name=value" where `value` is 0 for false or 1 for true. All arguments default to `false` if omitted.
@@ -112,7 +199,7 @@ ToggleSkyboxTool.toolId = "ToggleSkybox";
112
199
  * * `project`: include iTwin-specific (formerly known as project) settings.
113
200
  * * `map`: include background map settings.
114
201
  * * `drawingaids`: include drawing aid decoration settings.
115
- * * `copy`: copy result to system clipboarad.
202
+ * * `copy`: copy result to system clipboard.
116
203
  * * `quote`: format the JSON so it can be parsed directly by [ApplyRenderingStyleTool].
117
204
  * @beta
118
205
  */
@@ -125,7 +212,7 @@ export class SaveRenderingStyleTool extends DisplayStyleTool {
125
212
  }
126
213
  static get minArgs() { return 0; }
127
214
  static get maxArgs() { return 7; }
128
- parse(inputArgs) {
215
+ async parse(inputArgs) {
129
216
  const args = parseArgs(inputArgs);
130
217
  function getArg(name) {
131
218
  return args.getBoolean(name) ? true : undefined;
@@ -139,7 +226,7 @@ export class SaveRenderingStyleTool extends DisplayStyleTool {
139
226
  this._quote = true === getArg("q");
140
227
  return true;
141
228
  }
142
- execute(vp) {
229
+ async execute(vp) {
143
230
  let json = JSON.stringify(vp.displayStyle.settings.toOverrides(this._options));
144
231
  if (this._quote)
145
232
  json = `"${json.replace(/"/g, '""')}"`;
@@ -157,7 +244,7 @@ SaveRenderingStyleTool.toolId = "SaveRenderingStyle";
157
244
  export class ApplyRenderingStyleTool extends DisplayStyleTool {
158
245
  static get minArgs() { return 1; }
159
246
  static get maxArgs() { return 1; }
160
- parse(args) {
247
+ async parse(args) {
161
248
  try {
162
249
  this._overrides = JSON.parse(args[0]);
163
250
  return true;
@@ -167,7 +254,7 @@ export class ApplyRenderingStyleTool extends DisplayStyleTool {
167
254
  return false;
168
255
  }
169
256
  }
170
- execute(vp) {
257
+ async execute(vp) {
171
258
  if (this._overrides)
172
259
  vp.overrideDisplayStyle(this._overrides);
173
260
  return false;
@@ -185,7 +272,7 @@ export class OverrideSubCategoryTool extends DisplayStyleTool {
185
272
  }
186
273
  static get minArgs() { return 1; }
187
274
  static get maxArgs() { return 7; }
188
- parse(inArgs) {
275
+ async parse(inArgs) {
189
276
  const args = parseArgs(inArgs);
190
277
  const ids = args.get("i");
191
278
  if (ids)
@@ -200,7 +287,7 @@ export class OverrideSubCategoryTool extends DisplayStyleTool {
200
287
  props.invisible = typeof visible === "boolean" ? !visible : undefined;
201
288
  return true;
202
289
  }
203
- execute(vp) {
290
+ async execute(vp) {
204
291
  const ovr = SubCategoryOverride.fromJSON(this._overrideProps);
205
292
  for (const id of this._subcategoryIds)
206
293
  vp.displayStyle.overrideSubCategory(id, ovr);
@@ -208,20 +295,93 @@ export class OverrideSubCategoryTool extends DisplayStyleTool {
208
295
  }
209
296
  }
210
297
  OverrideSubCategoryTool.toolId = "OverrideSubCategory";
298
+ /** Query the schedule script JSON from an element.
299
+ * @beta
300
+ */
301
+ export class QueryScheduleScriptTool extends DisplayStyleTool {
302
+ constructor() {
303
+ super(...arguments);
304
+ this._action = "copy";
305
+ this._includeElementIds = false;
306
+ this._countElementIds = false;
307
+ this._expandElementIds = false;
308
+ }
309
+ static get minArgs() { return 0; }
310
+ static get maxArgs() { return 3; }
311
+ async parse(input, vp) {
312
+ var _a, _b, _c;
313
+ const args = parseArgs(input);
314
+ this._sourceId = (_a = args.get("i")) !== null && _a !== void 0 ? _a : (_b = vp.displayStyle.scheduleScriptReference) === null || _b === void 0 ? void 0 : _b.sourceId;
315
+ if (!this._sourceId)
316
+ return false;
317
+ const action = (_c = args.get("a")) !== null && _c !== void 0 ? _c : "";
318
+ this._action = action.length > 0 && "b" === action[0].toLowerCase() ? "break" : "copy";
319
+ this._includeElementIds = this._countElementIds = this._expandElementIds = false;
320
+ const ids = args.get("e");
321
+ if (ids && ids.length > 0) {
322
+ switch (ids[0].toLowerCase()) {
323
+ case "i":
324
+ this._includeElementIds = true;
325
+ break;
326
+ case "c":
327
+ this._includeElementIds = this._countElementIds = true;
328
+ break;
329
+ case "e":
330
+ this._includeElementIds = this._expandElementIds = true;
331
+ break;
332
+ }
333
+ }
334
+ return true;
335
+ }
336
+ async execute(vp) {
337
+ var _a, _b;
338
+ if (!this._sourceId || !this._action)
339
+ return false;
340
+ const opts = {
341
+ displayStyle: { omitScheduleScriptElementIds: !this._includeElementIds },
342
+ renderTimeline: { omitScriptElementIds: !this._includeElementIds },
343
+ };
344
+ let script;
345
+ const props = await vp.iModel.elements.loadProps(this._sourceId, opts);
346
+ if (props.script)
347
+ script = JSON.parse(props.script.script);
348
+ else if ((_b = (_a = props.jsonProperties) === null || _a === void 0 ? void 0 : _a.styles) === null || _b === void 0 ? void 0 : _b.scheduleScript)
349
+ script = props.jsonProperties.styles.scheduleScript;
350
+ if (!script)
351
+ return false;
352
+ if (this._countElementIds || this._expandElementIds) {
353
+ for (const model of script) {
354
+ for (const elem of model.elementTimelines) {
355
+ const elemIds = typeof elem.elementIds === "string" ? CompressedId64Set.decompressArray(elem.elementIds) : elem.elementIds;
356
+ if (this._countElementIds)
357
+ elem.elementIds = elemIds.length;
358
+ else
359
+ elem.elementIds = elemIds;
360
+ }
361
+ }
362
+ }
363
+ if (this._action === "break")
364
+ debugger; // eslint-disable-line no-debugger
365
+ else
366
+ copyStringToClipboard(JSON.stringify(script, null, 2));
367
+ return true;
368
+ }
369
+ }
370
+ QueryScheduleScriptTool.toolId = "QueryScheduleScript";
211
371
  /** Set whether background color is ignored when applying white-on-white reversal.
212
372
  * @beta
213
373
  */
214
374
  export class WoWIgnoreBackgroundTool extends DisplayStyleTool {
215
375
  static get minArgs() { return 0; }
216
376
  static get maxArgs() { return 1; }
217
- parse(args) {
377
+ async parse(args) {
218
378
  const ignore = parseToggle(args[0]);
219
379
  if (typeof ignore === "string")
220
380
  return false;
221
381
  this._ignore = ignore;
222
382
  return true;
223
383
  }
224
- execute(vp) {
384
+ async execute(vp) {
225
385
  var _a;
226
386
  const ignoreBackgroundColor = (_a = this._ignore) !== null && _a !== void 0 ? _a : !vp.displayStyle.settings.whiteOnWhiteReversal.ignoreBackgroundColor;
227
387
  vp.displayStyle.settings.whiteOnWhiteReversal = WhiteOnWhiteReversalSettings.fromJSON({ ignoreBackgroundColor });
@@ -229,4 +389,43 @@ export class WoWIgnoreBackgroundTool extends DisplayStyleTool {
229
389
  }
230
390
  }
231
391
  WoWIgnoreBackgroundTool.toolId = "WoWIgnoreBackground";
392
+ /** Toggle whether surfaces display with overlaid wiremesh in the active viewport.
393
+ * @see [ViewFlags.wiremesh]($common).
394
+ * @beta
395
+ */
396
+ export class ToggleWiremeshTool extends DisplayStyleTool {
397
+ static get minArgs() { return 0; }
398
+ static get maxArgs() { return 1; }
399
+ async parse(args) {
400
+ const enable = parseToggle(args[0]);
401
+ if (typeof enable === "string")
402
+ return false;
403
+ this._enable = enable;
404
+ return true;
405
+ }
406
+ async execute(vp) {
407
+ var _a;
408
+ vp.viewFlags = vp.viewFlags.with("wiremesh", (_a = this._enable) !== null && _a !== void 0 ? _a : !vp.viewFlags.wiremesh);
409
+ return true;
410
+ }
411
+ }
412
+ ToggleWiremeshTool.toolId = "ToggleWiremesh";
413
+ /** Change the background color of the active viewport and optionally its transparency.
414
+ * @beta
415
+ */
416
+ export class ChangeBackgroundColorTool extends DisplayStyleTool {
417
+ static get minArgs() { return 1; }
418
+ static get maxArgs() { return 1; }
419
+ async parse(args) {
420
+ this._color = ColorDef.fromString(args[0]);
421
+ return true;
422
+ }
423
+ async execute(vp) {
424
+ if (!this._color)
425
+ return false;
426
+ vp.displayStyle.backgroundColor = this._color;
427
+ return true;
428
+ }
429
+ }
430
+ ChangeBackgroundColorTool.toolId = "ChangeBackgroundColor";
232
431
  //# sourceMappingURL=DisplayStyleTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayStyleTools.js","sourceRoot":"","sources":["../../../src/tools/DisplayStyleTools.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EACsD,UAAU,EAAyB,mBAAmB,EAAE,SAAS,EAC5H,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACgB,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,IAAI,GAC/F,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,uFAAuF;AACvF,MAAM,gBAAgB,GAAsB;IAC1C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAClI,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB;CAC9I,CAAC;AAEF,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAErF;;GAEG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,IAAI;IACjD,IAAc,SAAS,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAM3B,KAAK,CAAC,GAAG;QACvB,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,IAAc;QACjD,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7E,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;;YAElB,OAAO,KAAK,CAAC;IACjB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAoB,SAAQ,IAAI;IAEpC,MAAM,KAAc,OAAO,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,GAAG,CAAC,EAAa,EAAE,EAAa;QACpD,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE;YACtC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,IAAc;QACjD,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YACvC,OAAO,IAAI,CAAC;QAEd,MAAM,EAAE,GAAiC,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;gBACpB,SAAS;YAEX,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrB,SAAS;YAEX,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,IAAI,KAAK,YAAY,EAAE;gBACzB,QAAQ,KAAK,EAAE;oBACb,KAAK,UAAU,CAAC,WAAW,CAAC;oBAC5B,KAAK,UAAU,CAAC,SAAS,CAAC;oBAC1B,KAAK,UAAU,CAAC,UAAU,CAAC;oBAC3B,KAAK,UAAU,CAAC,SAAS;wBACvB,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC;wBACtB,EAAE,CAAC,oBAAoB,EAAE,CAAC;wBAC1B,MAAM;iBACT;gBAED,SAAS;aACV;YAED,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK;gBAC5B,SAAS;YAEX,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE;gBAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACzC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;gBAC3B,EAAE,CAAC,oBAAoB,EAAE,CAAC;aAC3B;SACF;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;;AArDsB,0BAAM,GAAG,iBAAiB,CAAC;AAwDpD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAGpD,IAAoB,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzC,KAAK,CAAC,KAAe,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe;IAEvD,OAAO,CAAC,EAAY;QACzB,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,YAAmC,CAAC;QAC1D,KAAK,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;;AAVsB,uBAAM,GAAG,cAAc,CAAC;AAajD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAA5D;;QACU,aAAQ,GAAiC,EAAE,CAAC;QAC5C,qBAAgB,GAAG,KAAK,CAAC;QACzB,WAAM,GAAG,KAAK,CAAC;IAmCzB,CAAC;IA/BQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,SAAmB;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,SAAS,MAAM,CAAC,IAAY;YAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,iEAAiE;QACnH,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,EAAY;QACzB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QAEzC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3H,IAAI,IAAI,CAAC,gBAAgB;YACvB,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,KAAK,CAAC;IACf,CAAC;;AAhCsB,6BAAM,GAAG,oBAAoB,CAAC;AAmCvD;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAKpD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,IAAc;QACzB,IAAI;YACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC;SACb;QAAC,MAAM;YACN,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAC7G,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAEM,OAAO,CAAC,EAAY;QACzB,IAAI,IAAI,CAAC,UAAU;YACjB,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3C,OAAO,KAAK,CAAC;IACf,CAAC;;AApBsB,8BAAM,GAAG,qBAAqB,CAAC;AAuBxD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAA7D;;QACU,mBAAc,GAAgC,EAAE,CAAC;QACjD,oBAAe,GAAa,EAAE,CAAC;IA+BzC,CAAC;IA5BQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,MAAgB;QAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG;YACL,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;QAClC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,CAAC,SAAS,GAAG,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,EAAY;QACzB,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe;YACnC,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;;AA5BsB,8BAAM,GAAG,qBAAqB,CAAC;AA+BxD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAIpD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,IAAc;QACzB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,MAAM,KAAK,QAAQ;YAC5B,OAAO,KAAK,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,EAAY;;QACzB,MAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,OAAO,mCAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;QACnH,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjH,OAAO,IAAI,CAAC;IACd,CAAC;;AAjBsB,8BAAM,GAAG,qBAAqB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport {\r\n DisplayStyle3dSettingsProps, DisplayStyleOverridesOptions, RenderMode, SubCategoryAppearance, SubCategoryOverride, ViewFlags, ViewFlagsProperties,\r\n WhiteOnWhiteReversalSettings,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n DisplayStyle3dState, Environment, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\r\nimport { parseArgs } from \"./parseArgs\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\ntype BooleanFlagName =\r\n \"dimensions\" | \"patterns\" | \"weights\" | \"styles\" | \"transparency\" | \"fill\" | \"textures\" | \"materials\" | \"acsTriad\" | \"grid\" | \"visibleEdges\" |\r\n \"hiddenEdges\" | \"lighting\" | \"shadows\" | \"clipVolume\" | \"constructions\" | \"monochrome\" | \"backgroundMap\" | \"ambientOcclusion\" | \"forceSurfaceDiscard\";\r\n\r\n// Compiler has the info to construct this array for us, but we have no access to it...\r\nconst booleanFlagNames: BooleanFlagName[] = [\r\n \"dimensions\", \"patterns\", \"weights\", \"styles\", \"transparency\", \"fill\", \"textures\", \"materials\", \"acsTriad\", \"grid\", \"visibleEdges\",\r\n \"hiddenEdges\", \"lighting\", \"shadows\", \"clipVolume\", \"constructions\", \"monochrome\", \"backgroundMap\", \"ambientOcclusion\", \"forceSurfaceDiscard\",\r\n];\r\n\r\nconst lowercaseBooleanFlagNames = booleanFlagNames.map((name) => name.toLowerCase());\r\n\r\n/** Modifies the selected viewport's DisplayStyleState.\r\n * @beta\r\n */\r\nexport abstract class DisplayStyleTool extends Tool {\r\n protected get require3d() { return false; }\r\n // Return true if the display style was modified - we will invalidate the viewport's render plan.\r\n protected abstract execute(vp: Viewport): boolean;\r\n // Return false if failed to parse.\r\n protected abstract parse(args: string[]): boolean;\r\n\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && this.execute(vp))\r\n vp.displayStyle = vp.view.displayStyle;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && this.parse(args))\r\n return this.run();\r\n else\r\n return false;\r\n }\r\n}\r\n\r\n/** Modifies the selected viewport's ViewFlags.\r\n * The keyin syntax is as follows:\r\n * fdt change viewflags flag=value\r\n * Where 'flag' is one of the BooleanFlagName values, or \"renderMode\"; and value is an integer.\r\n * For boolean flags, value is 0 for false or 1 for true. For renderMode, value is one of the RenderMode enum values.\r\n * Flag names are case-insensitive.\r\n * @beta\r\n */\r\nexport class ChangeViewFlagsTool extends Tool {\r\n public static override toolId = \"ChangeViewFlags\";\r\n public static override get maxArgs() { return undefined; }\r\n public static override get minArgs() { return 1; }\r\n\r\n public override async run(vf: ViewFlags, vp?: Viewport): Promise<boolean> {\r\n if (undefined !== vf && undefined !== vp)\r\n vp.viewFlags = vf;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp || 0 === args.length)\r\n return true;\r\n\r\n const vf: Partial<ViewFlagsProperties> = { ...vp.viewFlags };\r\n for (const arg of args) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n const value = parseInt(parts[1], 10);\r\n if (Number.isNaN(value))\r\n continue;\r\n\r\n const name = parts[0].toLowerCase();\r\n if (name === \"rendermode\") {\r\n switch (value) {\r\n case RenderMode.SmoothShade:\r\n case RenderMode.Wireframe:\r\n case RenderMode.HiddenLine:\r\n case RenderMode.SolidFill:\r\n vf.renderMode = value;\r\n vp.invalidateRenderPlan();\r\n break;\r\n }\r\n\r\n continue;\r\n }\r\n\r\n if (0 !== value && 1 !== value)\r\n continue;\r\n\r\n const index = lowercaseBooleanFlagNames.indexOf(name);\r\n if (-1 !== index) {\r\n const propName = booleanFlagNames[index];\r\n vf[propName] = 0 !== value;\r\n vp.invalidateRenderPlan();\r\n }\r\n }\r\n\r\n return this.run(new ViewFlags(vf), vp);\r\n }\r\n}\r\n\r\n/** Toggles the skybox.\r\n * @beta\r\n */\r\nexport class ToggleSkyboxTool extends DisplayStyleTool {\r\n public static override toolId = \"ToggleSkybox\";\r\n\r\n public override get require3d() { return true; }\r\n\r\n public parse(_args: string[]) { return true; } // no arguments\r\n\r\n public execute(vp: Viewport): boolean {\r\n const style = vp.view.displayStyle as DisplayStyle3dState;\r\n style.environment = new Environment({ sky: { display: !style.environment.sky.display } });\r\n return true;\r\n }\r\n}\r\n\r\n/** Outputs (and optionally copies to the clipboard) a \"rendering style\" as a partial DisplayStyle3dSettingsProps JSON object based\r\n * on the current view's display style settings.\r\n * All arguments are optional, of the form \"name=value\" where `value` is 0 for false or 1 for true. All arguments default to `false` if omitted.\r\n * @see [DisplayStyleSettings.toOverrides]($common) for details.\r\n * Arguments:\r\n * * `all`: include all settings.\r\n * * `imodel`: include iModel-specific settings.\r\n * * `project`: include iTwin-specific (formerly known as project) settings.\r\n * * `map`: include background map settings.\r\n * * `drawingaids`: include drawing aid decoration settings.\r\n * * `copy`: copy result to system clipboarad.\r\n * * `quote`: format the JSON so it can be parsed directly by [ApplyRenderingStyleTool].\r\n * @beta\r\n */\r\nexport class SaveRenderingStyleTool extends DisplayStyleTool {\r\n private _options: DisplayStyleOverridesOptions = {};\r\n private _copyToClipboard = false;\r\n private _quote = false;\r\n\r\n public static override toolId = \"SaveRenderingStyle\";\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 7; }\r\n\r\n public parse(inputArgs: string[]) {\r\n const args = parseArgs(inputArgs);\r\n function getArg(name: string): true | undefined {\r\n return args.getBoolean(name) ? true : undefined;\r\n }\r\n\r\n this._options.includeAll = getArg(\"a\");\r\n this._options.includeIModelSpecific = getArg(\"i\");\r\n this._options.includeITwinSpecific = getArg(\"p\"); // \"p\" for backwards compatibility with old \"project\" terminology\r\n this._options.includeBackgroundMap = getArg(\"m\");\r\n this._options.includeDrawingAids = getArg(\"d\");\r\n this._copyToClipboard = true === getArg(\"c\");\r\n this._quote = true === getArg(\"q\");\r\n\r\n return true;\r\n }\r\n\r\n public execute(vp: Viewport): boolean {\r\n let json = JSON.stringify(vp.displayStyle.settings.toOverrides(this._options));\r\n if (this._quote)\r\n json = `\"${json.replace(/\"/g, '\"\"')}\"`;\r\n\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"Rendering style saved\", json));\r\n if (this._copyToClipboard)\r\n copyStringToClipboard(json);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Given a \"rendering style\" as a partial DisplayStyle3dSettingsProperties JSON string, apply it to the selected viewport's display style.\r\n * @see [DisplayStyleSettings.applyOverrides]($common) for details.\r\n * @beta\r\n */\r\nexport class ApplyRenderingStyleTool extends DisplayStyleTool {\r\n private _overrides?: DisplayStyle3dSettingsProps;\r\n\r\n public static override toolId = \"ApplyRenderingStyle\";\r\n\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public parse(args: string[]) {\r\n try {\r\n this._overrides = JSON.parse(args[0]);\r\n return true;\r\n } catch {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, \"Invalid JSON\"));\r\n return false;\r\n }\r\n }\r\n\r\n public execute(vp: Viewport): boolean {\r\n if (this._overrides)\r\n vp.overrideDisplayStyle(this._overrides);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Apply appearance overrides to one or more subcategories in the active viewport.\r\n * @beta\r\n */\r\nexport class OverrideSubCategoryTool extends DisplayStyleTool {\r\n private _overrideProps: SubCategoryAppearance.Props = {};\r\n private _subcategoryIds: string[] = [];\r\n\r\n public static override toolId = \"OverrideSubCategory\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 7; }\r\n\r\n public parse(inArgs: string[]): boolean {\r\n const args = parseArgs(inArgs);\r\n const ids = args.get(\"i\");\r\n if (ids)\r\n this._subcategoryIds = ids.split(\",\");\r\n\r\n const props = this._overrideProps;\r\n props.color = args.getInteger(\"c\");\r\n props.weight = args.getInteger(\"w\");\r\n props.priority = args.getInteger(\"p\");\r\n props.transp = args.getFloat(\"t\");\r\n props.material = args.get(\"m\");\r\n\r\n const visible = args.getBoolean(\"v\");\r\n props.invisible = typeof visible === \"boolean\" ? !visible : undefined;\r\n return true;\r\n }\r\n\r\n public execute(vp: Viewport): boolean {\r\n const ovr = SubCategoryOverride.fromJSON(this._overrideProps);\r\n for (const id of this._subcategoryIds)\r\n vp.displayStyle.overrideSubCategory(id, ovr);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Set whether background color is ignored when applying white-on-white reversal.\r\n * @beta\r\n */\r\nexport class WoWIgnoreBackgroundTool extends DisplayStyleTool {\r\n private _ignore?: boolean;\r\n\r\n public static override toolId = \"WoWIgnoreBackground\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public parse(args: string[]): boolean {\r\n const ignore = parseToggle(args[0]);\r\n if (typeof ignore === \"string\")\r\n return false;\r\n\r\n this._ignore = ignore;\r\n return true;\r\n }\r\n\r\n public execute(vp: Viewport): boolean {\r\n const ignoreBackgroundColor = this._ignore ?? !vp.displayStyle.settings.whiteOnWhiteReversal.ignoreBackgroundColor;\r\n vp.displayStyle.settings.whiteOnWhiteReversal = WhiteOnWhiteReversalSettings.fromJSON({ ignoreBackgroundColor });\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DisplayStyleTools.js","sourceRoot":"","sources":["../../../src/tools/DisplayStyleTools.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,QAAQ,EAAiF,UAAU,EAAuC,OAAO,EAAE,SAAS,EACrI,mBAAmB,EAAE,SAAS,EAAuB,4BAA4B,GACzG,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACgB,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,IAAI,GAClF,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,uFAAuF;AACvF,MAAM,gBAAgB,GAAsB;IAC1C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAClI,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB;IAC7I,UAAU;CACX,CAAC;AAEF,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAErF;;GAEG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,IAAI;IACjD,IAAc,SAAS,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAM3B,KAAK,CAAC,GAAG;QACvB,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnF,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,IAAc;QACjD,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACvF,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;;YAElB,OAAO,KAAK,CAAC;IACjB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAoB,SAAQ,IAAI;IAEpC,MAAM,KAAc,OAAO,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,GAAG,CAAC,EAAa,EAAE,EAAa;QACpD,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE;YACtC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,IAAc;QACjD,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YACvC,OAAO,IAAI,CAAC;QAEd,MAAM,EAAE,GAAiC,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;gBACpB,SAAS;YAEX,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrB,SAAS;YAEX,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,IAAI,KAAK,YAAY,EAAE;gBACzB,QAAQ,KAAK,EAAE;oBACb,KAAK,UAAU,CAAC,WAAW,CAAC;oBAC5B,KAAK,UAAU,CAAC,SAAS,CAAC;oBAC1B,KAAK,UAAU,CAAC,UAAU,CAAC;oBAC3B,KAAK,UAAU,CAAC,SAAS;wBACvB,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC;wBACtB,EAAE,CAAC,oBAAoB,EAAE,CAAC;wBAC1B,MAAM;iBACT;gBAED,SAAS;aACV;YAED,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK;gBAC5B,SAAS;YAEX,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE;gBAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACzC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;gBAC3B,EAAE,CAAC,oBAAoB,EAAE,CAAC;aAC3B;SACF;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;;AArDsB,0BAAM,GAAG,iBAAiB,CAAC;AAwDpD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAGpD,IAAoB,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzC,KAAK,CAAC,KAAK,CAAC,KAAe,IAAsB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe;IAE/E,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,YAAmC,CAAC;QAC1D,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;;AAVsB,uBAAM,GAAG,cAAc,CAAC;AAajD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IAI1C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElD,IAAoB,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzC,KAAK,CAAC,KAAK,CAAC,IAAc;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YACjC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;gBACxE,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;aAChC,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC;IACd,CAAC;;AApBsB,oBAAM,GAAG,cAAc,CAAC;AAuBjD;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAAjD;;QACU,YAAO,GAAa,EAAE,CAAC;IA8DjC,CAAC;IA3DQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElD,IAAoB,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzC,KAAK,CAAC,KAAK,CAAC,IAAc;QAC/B,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACtC,OAAO,IAAI,CAAC;QAEd,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;QAC1C,QAAQ,IAAI,CAAC,MAAM,EAAE;YACnB,KAAK,CAAC;gBACJ,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,CAAC;gBACJ,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,CAAC;gBACJ,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,CAAC;gBACJ,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,CAAC;gBACJ,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM;YACR;gBACE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM;SACT;QAED,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;YACxE,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC5D,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;;AA3DsB,kBAAM,GAAG,YAAY,CAAC;AA8D/C;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAA5D;;QACU,aAAQ,GAAiC,EAAE,CAAC;QAC5C,qBAAgB,GAAG,KAAK,CAAC;QACzB,WAAM,GAAG,KAAK,CAAC;IAmCzB,CAAC;IA/BQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,SAAmB;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,SAAS,MAAM,CAAC,IAAY;YAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,iEAAiE;QACnH,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QAEzC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3H,IAAI,IAAI,CAAC,gBAAgB;YACvB,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,KAAK,CAAC;IACf,CAAC;;AAhCsB,6BAAM,GAAG,oBAAoB,CAAC;AAmCvD;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAKpD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,IAAc;QAC/B,IAAI;YACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC;SACb;QAAC,MAAM;YACN,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;YAC7G,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,IAAI,IAAI,CAAC,UAAU;YACjB,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3C,OAAO,KAAK,CAAC;IACf,CAAC;;AApBsB,8BAAM,GAAG,qBAAqB,CAAC;AAuBxD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAA7D;;QACU,mBAAc,GAAgC,EAAE,CAAC;QACjD,oBAAe,GAAa,EAAE,CAAC;IA+BzC,CAAC;IA5BQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,MAAgB;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG;YACL,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;QAClC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,CAAC,SAAS,GAAG,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe;YACnC,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;;AA5BsB,8BAAM,GAAG,qBAAqB,CAAC;AA+BxD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAA7D;;QAEU,YAAO,GAAqB,MAAM,CAAC;QACnC,uBAAkB,GAAG,KAAK,CAAC;QAC3B,qBAAgB,GAAG,KAAK,CAAC;QACzB,sBAAiB,GAAG,KAAK,CAAC;IAwEpC,CAAC;IArEQ,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,KAAe,EAAE,EAAY;;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,MAAA,EAAE,CAAC,YAAY,CAAC,uBAAuB,0CAAE,QAAQ,CAAC;QACpF,IAAI,CAAC,IAAI,CAAC,SAAS;YACjB,OAAO,KAAK,CAAC;QAEf,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC5B,KAAK,GAAG;oBACN,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAC/B,MAAM;gBACR,KAAK,GAAG;oBACN,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBACvD,MAAM;gBACR,KAAK,GAAG;oBACN,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBACxD,MAAM;aACT;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;YAClC,OAAO,KAAK,CAAC;QAEf,MAAM,IAAI,GAAuB;YAC/B,YAAY,EAAE,EAAE,4BAA4B,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACxE,cAAc,EAAE,EAAE,oBAAoB,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;SACnE,CAAC;QAEF,IAAI,MAAM,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAQ,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM;YACd,MAAM,GAAG,IAAI,CAAC,KAAK,CAAE,KAAK,CAAC,MAA8B,CAAC,MAAM,CAA+B,CAAC;aAC7F,IAAI,MAAA,MAAA,KAAK,CAAC,cAAc,0CAAE,MAAM,0CAAE,cAAc;YACnD,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,cAA4C,CAAC;QAEpF,IAAI,CAAC,MAAM;YACT,OAAO,KAAK,CAAC;QAEf,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACnD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,gBAAgB,EAAE;oBACzC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC3H,IAAI,IAAI,CAAC,gBAAgB;wBACvB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAa,CAAC;;wBAExC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;iBAC7B;aACF;SACF;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAC1B,QAAQ,CAAC,CAAC,kCAAkC;;YAE5C,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC;IACd,CAAC;;AArEsB,8BAAM,GAAG,qBAAqB,CAAC;AAwExD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAIpD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,IAAc;QAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,MAAM,KAAK,QAAQ;YAC5B,OAAO,KAAK,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;;QAC/B,MAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,OAAO,mCAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;QACnH,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjH,OAAO,IAAI,CAAC;IACd,CAAC;;AAjBsB,8BAAM,GAAG,qBAAqB,CAAC;AAoBxD;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IAI/C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,IAAc;QAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,MAAM,KAAK,QAAQ;YAC5B,OAAO,KAAK,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;;QAC/B,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;;AAhBsB,yBAAM,GAAG,gBAAgB,CAAC;AAmBnD;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,gBAAgB;IAItD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,IAAc;QAC/B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,EAAY;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM;YACd,OAAO,KAAK,CAAC;QAEf,EAAE,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;;AAfsB,gCAAM,GAAG,uBAAuB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { CompressedId64Set } from \"@itwin/core-bentley\";\r\nimport {\r\n ColorDef, DisplayStyle3dSettingsProps, DisplayStyleOverridesOptions, ElementLoadOptions, RenderMode, RenderSchedule, RenderTimelineProps, SkyCube, SkySphere,\r\n SubCategoryAppearance, SubCategoryOverride, ViewFlags, ViewFlagsProperties, WhiteOnWhiteReversalSettings,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n DisplayStyle3dState, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\r\nimport { parseArgs } from \"./parseArgs\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\ntype BooleanFlagName =\r\n \"dimensions\" | \"patterns\" | \"weights\" | \"styles\" | \"transparency\" | \"fill\" | \"textures\" | \"materials\" | \"acsTriad\" | \"grid\" | \"visibleEdges\" |\r\n \"hiddenEdges\" | \"lighting\" | \"shadows\" | \"clipVolume\" | \"constructions\" | \"monochrome\" | \"backgroundMap\" | \"ambientOcclusion\" | \"forceSurfaceDiscard\"\r\n | \"wiremesh\";\r\n\r\n// Compiler has the info to construct this array for us, but we have no access to it...\r\nconst booleanFlagNames: BooleanFlagName[] = [\r\n \"dimensions\", \"patterns\", \"weights\", \"styles\", \"transparency\", \"fill\", \"textures\", \"materials\", \"acsTriad\", \"grid\", \"visibleEdges\",\r\n \"hiddenEdges\", \"lighting\", \"shadows\", \"clipVolume\", \"constructions\", \"monochrome\", \"backgroundMap\", \"ambientOcclusion\", \"forceSurfaceDiscard\",\r\n \"wiremesh\",\r\n];\r\n\r\nconst lowercaseBooleanFlagNames = booleanFlagNames.map((name) => name.toLowerCase());\r\n\r\n/** Modifies the selected viewport's DisplayStyleState.\r\n * @beta\r\n */\r\nexport abstract class DisplayStyleTool extends Tool {\r\n protected get require3d() { return false; }\r\n // Return true if the display style was modified - we will invalidate the viewport's render plan.\r\n protected abstract execute(vp: Viewport): Promise<boolean>;\r\n // Return false if failed to parse.\r\n protected abstract parse(args: string[], vp: Viewport): Promise<boolean>;\r\n\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.execute(vp))\r\n vp.displayStyle = vp.view.displayStyle;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.parse(args, vp))\r\n return this.run();\r\n else\r\n return false;\r\n }\r\n}\r\n\r\n/** Modifies the selected viewport's ViewFlags.\r\n * The keyin syntax is as follows:\r\n * fdt change viewflags flag=value\r\n * Where 'flag' is one of the BooleanFlagName values, or \"renderMode\"; and value is an integer.\r\n * For boolean flags, value is 0 for false or 1 for true. For renderMode, value is one of the RenderMode enum values.\r\n * Flag names are case-insensitive.\r\n * @beta\r\n */\r\nexport class ChangeViewFlagsTool extends Tool {\r\n public static override toolId = \"ChangeViewFlags\";\r\n public static override get maxArgs() { return undefined; }\r\n public static override get minArgs() { return 1; }\r\n\r\n public override async run(vf: ViewFlags, vp?: Viewport): Promise<boolean> {\r\n if (undefined !== vf && undefined !== vp)\r\n vp.viewFlags = vf;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp || 0 === args.length)\r\n return true;\r\n\r\n const vf: Partial<ViewFlagsProperties> = { ...vp.viewFlags };\r\n for (const arg of args) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n const value = parseInt(parts[1], 10);\r\n if (Number.isNaN(value))\r\n continue;\r\n\r\n const name = parts[0].toLowerCase();\r\n if (name === \"rendermode\") {\r\n switch (value) {\r\n case RenderMode.SmoothShade:\r\n case RenderMode.Wireframe:\r\n case RenderMode.HiddenLine:\r\n case RenderMode.SolidFill:\r\n vf.renderMode = value;\r\n vp.invalidateRenderPlan();\r\n break;\r\n }\r\n\r\n continue;\r\n }\r\n\r\n if (0 !== value && 1 !== value)\r\n continue;\r\n\r\n const index = lowercaseBooleanFlagNames.indexOf(name);\r\n if (-1 !== index) {\r\n const propName = booleanFlagNames[index];\r\n vf[propName] = 0 !== value;\r\n vp.invalidateRenderPlan();\r\n }\r\n }\r\n\r\n return this.run(new ViewFlags(vf), vp);\r\n }\r\n}\r\n\r\n/** Toggles the skybox.\r\n * @beta\r\n */\r\nexport class ToggleSkyboxTool extends DisplayStyleTool {\r\n public static override toolId = \"ToggleSkybox\";\r\n\r\n public override get require3d() { return true; }\r\n\r\n public async parse(_args: string[]): Promise<boolean> { return true; } // no arguments\r\n\r\n public async execute(vp: Viewport) {\r\n const style = vp.view.displayStyle as DisplayStyle3dState;\r\n style.environment = style.environment.withDisplay({ sky: !style.environment.displaySky });\r\n return true;\r\n }\r\n}\r\n\r\n/** Defines a [SkySphere]($common) to apply to the current view.\r\n * @beta\r\n */\r\nexport class SkySphereTool extends DisplayStyleTool {\r\n private _image?: string;\r\n\r\n public static override toolId = \"SetSkySphere\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override get require3d() { return true; }\r\n\r\n public async parse(args: string[]) {\r\n this._image = args[0];\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (this._image && vp.view.is3d()) {\r\n vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({\r\n displaySky: true,\r\n sky: new SkySphere(this._image),\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Defines a [SkyCube]($common) to apply to the current view.\r\n * @beta\r\n */\r\nexport class SkyCubeTool extends DisplayStyleTool {\r\n private _images: string[] = [];\r\n\r\n public static override toolId = \"SetSkyCube\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 6; }\r\n\r\n public override get require3d() { return true; }\r\n\r\n public async parse(args: string[]) {\r\n this._images = [...args];\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n const imgs = this._images;\r\n if (imgs.length === 0 || !vp.view.is3d())\r\n return true;\r\n\r\n let top, bottom, left, right, front, back;\r\n switch (imgs.length) {\r\n case 1:\r\n top = bottom = left = right = front = back = imgs[0];\r\n break;\r\n case 2:\r\n top = bottom = imgs[0];\r\n left = right = front = back = imgs[1];\r\n break;\r\n case 3:\r\n top = bottom = imgs[0];\r\n left = right = imgs[1];\r\n front = back = imgs[2];\r\n break;\r\n case 4:\r\n top = imgs[0];\r\n bottom = imgs[1];\r\n left = right = imgs[2];\r\n front = back = imgs[3];\r\n break;\r\n case 5:\r\n top = bottom = imgs[0];\r\n left = imgs[1];\r\n right = imgs[2];\r\n front = imgs[3];\r\n back = imgs[4];\r\n break;\r\n default:\r\n top = imgs[0];\r\n bottom = imgs[1];\r\n left = imgs[2];\r\n right = imgs[3];\r\n front = imgs[4];\r\n back = imgs[5];\r\n break;\r\n }\r\n\r\n vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({\r\n displaySky: true,\r\n sky: new SkyCube({ top, bottom, left, right, front, back }),\r\n });\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Outputs (and optionally copies to the clipboard) a \"rendering style\" as a partial DisplayStyle3dSettingsProps JSON object based\r\n * on the current view's display style settings.\r\n * All arguments are optional, of the form \"name=value\" where `value` is 0 for false or 1 for true. All arguments default to `false` if omitted.\r\n * @see [DisplayStyleSettings.toOverrides]($common) for details.\r\n * Arguments:\r\n * * `all`: include all settings.\r\n * * `imodel`: include iModel-specific settings.\r\n * * `project`: include iTwin-specific (formerly known as project) settings.\r\n * * `map`: include background map settings.\r\n * * `drawingaids`: include drawing aid decoration settings.\r\n * * `copy`: copy result to system clipboard.\r\n * * `quote`: format the JSON so it can be parsed directly by [ApplyRenderingStyleTool].\r\n * @beta\r\n */\r\nexport class SaveRenderingStyleTool extends DisplayStyleTool {\r\n private _options: DisplayStyleOverridesOptions = {};\r\n private _copyToClipboard = false;\r\n private _quote = false;\r\n\r\n public static override toolId = \"SaveRenderingStyle\";\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 7; }\r\n\r\n public async parse(inputArgs: string[]) {\r\n const args = parseArgs(inputArgs);\r\n function getArg(name: string): true | undefined {\r\n return args.getBoolean(name) ? true : undefined;\r\n }\r\n\r\n this._options.includeAll = getArg(\"a\");\r\n this._options.includeIModelSpecific = getArg(\"i\");\r\n this._options.includeITwinSpecific = getArg(\"p\"); // \"p\" for backwards compatibility with old \"project\" terminology\r\n this._options.includeBackgroundMap = getArg(\"m\");\r\n this._options.includeDrawingAids = getArg(\"d\");\r\n this._copyToClipboard = true === getArg(\"c\");\r\n this._quote = true === getArg(\"q\");\r\n\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n let json = JSON.stringify(vp.displayStyle.settings.toOverrides(this._options));\r\n if (this._quote)\r\n json = `\"${json.replace(/\"/g, '\"\"')}\"`;\r\n\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"Rendering style saved\", json));\r\n if (this._copyToClipboard)\r\n copyStringToClipboard(json);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Given a \"rendering style\" as a partial DisplayStyle3dSettingsProperties JSON string, apply it to the selected viewport's display style.\r\n * @see [DisplayStyleSettings.applyOverrides]($common) for details.\r\n * @beta\r\n */\r\nexport class ApplyRenderingStyleTool extends DisplayStyleTool {\r\n private _overrides?: DisplayStyle3dSettingsProps;\r\n\r\n public static override toolId = \"ApplyRenderingStyle\";\r\n\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n try {\r\n this._overrides = JSON.parse(args[0]);\r\n return true;\r\n } catch {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, \"Invalid JSON\"));\r\n return false;\r\n }\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (this._overrides)\r\n vp.overrideDisplayStyle(this._overrides);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Apply appearance overrides to one or more subcategories in the active viewport.\r\n * @beta\r\n */\r\nexport class OverrideSubCategoryTool extends DisplayStyleTool {\r\n private _overrideProps: SubCategoryAppearance.Props = {};\r\n private _subcategoryIds: string[] = [];\r\n\r\n public static override toolId = \"OverrideSubCategory\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 7; }\r\n\r\n public async parse(inArgs: string[]) {\r\n const args = parseArgs(inArgs);\r\n const ids = args.get(\"i\");\r\n if (ids)\r\n this._subcategoryIds = ids.split(\",\");\r\n\r\n const props = this._overrideProps;\r\n props.color = args.getInteger(\"c\");\r\n props.weight = args.getInteger(\"w\");\r\n props.priority = args.getInteger(\"p\");\r\n props.transp = args.getFloat(\"t\");\r\n props.material = args.get(\"m\");\r\n\r\n const visible = args.getBoolean(\"v\");\r\n props.invisible = typeof visible === \"boolean\" ? !visible : undefined;\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n const ovr = SubCategoryOverride.fromJSON(this._overrideProps);\r\n for (const id of this._subcategoryIds)\r\n vp.displayStyle.overrideSubCategory(id, ovr);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Query the schedule script JSON from an element.\r\n * @beta\r\n */\r\nexport class QueryScheduleScriptTool extends DisplayStyleTool {\r\n private _sourceId?: string;\r\n private _action: \"copy\" | \"break\" = \"copy\";\r\n private _includeElementIds = false;\r\n private _countElementIds = false;\r\n private _expandElementIds = false;\r\n\r\n public static override toolId = \"QueryScheduleScript\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n public async parse(input: string[], vp: Viewport) {\r\n const args = parseArgs(input);\r\n this._sourceId = args.get(\"i\") ?? vp.displayStyle.scheduleScriptReference?.sourceId;\r\n if (!this._sourceId)\r\n return false;\r\n\r\n const action = args.get(\"a\") ?? \"\";\r\n this._action = action.length > 0 && \"b\" === action[0].toLowerCase() ? \"break\" : \"copy\";\r\n\r\n this._includeElementIds = this._countElementIds = this._expandElementIds = false;\r\n const ids = args.get(\"e\");\r\n if (ids && ids.length > 0) {\r\n switch (ids[0].toLowerCase()) {\r\n case \"i\":\r\n this._includeElementIds = true;\r\n break;\r\n case \"c\":\r\n this._includeElementIds = this._countElementIds = true;\r\n break;\r\n case \"e\":\r\n this._includeElementIds = this._expandElementIds = true;\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (!this._sourceId || !this._action)\r\n return false;\r\n\r\n const opts: ElementLoadOptions = {\r\n displayStyle: { omitScheduleScriptElementIds: !this._includeElementIds },\r\n renderTimeline: { omitScriptElementIds: !this._includeElementIds },\r\n };\r\n\r\n let script;\r\n const props = await vp.iModel.elements.loadProps(this._sourceId, opts) as any;\r\n if (props.script)\r\n script = JSON.parse((props.script as RenderTimelineProps).script) as RenderSchedule.ScriptProps;\r\n else if (props.jsonProperties?.styles?.scheduleScript)\r\n script = props.jsonProperties.styles.scheduleScript as RenderSchedule.ScriptProps;\r\n\r\n if (!script)\r\n return false;\r\n\r\n if (this._countElementIds || this._expandElementIds) {\r\n for (const model of script) {\r\n for (const elem of model.elementTimelines) {\r\n const elemIds = typeof elem.elementIds === \"string\" ? CompressedId64Set.decompressArray(elem.elementIds) : elem.elementIds;\r\n if (this._countElementIds)\r\n elem.elementIds = elemIds.length as any;\r\n else\r\n elem.elementIds = elemIds;\r\n }\r\n }\r\n }\r\n\r\n if (this._action === \"break\")\r\n debugger; // eslint-disable-line no-debugger\r\n else\r\n copyStringToClipboard(JSON.stringify(script, null, 2));\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Set whether background color is ignored when applying white-on-white reversal.\r\n * @beta\r\n */\r\nexport class WoWIgnoreBackgroundTool extends DisplayStyleTool {\r\n private _ignore?: boolean;\r\n\r\n public static override toolId = \"WoWIgnoreBackground\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n const ignore = parseToggle(args[0]);\r\n if (typeof ignore === \"string\")\r\n return false;\r\n\r\n this._ignore = ignore;\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n const ignoreBackgroundColor = this._ignore ?? !vp.displayStyle.settings.whiteOnWhiteReversal.ignoreBackgroundColor;\r\n vp.displayStyle.settings.whiteOnWhiteReversal = WhiteOnWhiteReversalSettings.fromJSON({ ignoreBackgroundColor });\r\n return true;\r\n }\r\n}\r\n\r\n/** Toggle whether surfaces display with overlaid wiremesh in the active viewport.\r\n * @see [ViewFlags.wiremesh]($common).\r\n * @beta\r\n */\r\nexport class ToggleWiremeshTool extends DisplayStyleTool {\r\n private _enable?: boolean;\r\n\r\n public static override toolId = \"ToggleWiremesh\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable === \"string\")\r\n return false;\r\n\r\n this._enable = enable;\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n vp.viewFlags = vp.viewFlags.with(\"wiremesh\", this._enable ?? !vp.viewFlags.wiremesh);\r\n return true;\r\n }\r\n}\r\n\r\n/** Change the background color of the active viewport and optionally its transparency.\r\n * @beta\r\n */\r\nexport class ChangeBackgroundColorTool extends DisplayStyleTool {\r\n private _color?: ColorDef;\r\n\r\n public static override toolId = \"ChangeBackgroundColor\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n this._color = ColorDef.fromString(args[0]);\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (!this._color)\r\n return false;\r\n\r\n vp.displayStyle.backgroundColor = this._color;\r\n return true;\r\n }\r\n}\r\n"]}
@@ -9,8 +9,8 @@ export declare class DumpPlanProjectionSettingsTool extends DisplayStyleTool {
9
9
  static get maxArgs(): number;
10
10
  private _copyToClipboard;
11
11
  protected get require3d(): boolean;
12
- protected parse(args: string[]): boolean;
13
- protected execute(vp: Viewport): boolean;
12
+ protected parse(args: string[]): Promise<boolean>;
13
+ protected execute(vp: Viewport): Promise<boolean>;
14
14
  }
15
15
  /** Changes subcategory display priority.
16
16
  * @beta
@@ -21,8 +21,8 @@ export declare abstract class OverrideSubCategoryPriorityTool extends DisplaySty
21
21
  static get maxArgs(): number;
22
22
  private readonly _subcatIds;
23
23
  private _priority?;
24
- protected execute(vp: Viewport): boolean;
25
- protected parse(args: string[]): boolean;
24
+ protected execute(vp: Viewport): Promise<boolean>;
25
+ protected parse(args: string[]): Promise<boolean>;
26
26
  }
27
27
  /** Changes plan projection settings for one or more models.
28
28
  * @beta
@@ -34,8 +34,8 @@ export declare abstract class ChangePlanProjectionSettingsTool extends DisplaySt
34
34
  private readonly _modelIds;
35
35
  private _settings?;
36
36
  protected get require3d(): boolean;
37
- protected execute(vp: Viewport): boolean;
38
- protected parse(inputArgs: string[]): boolean;
37
+ protected execute(vp: Viewport): Promise<boolean>;
38
+ protected parse(inputArgs: string[]): Promise<boolean>;
39
39
  private parseModels;
40
40
  }
41
41
  //# sourceMappingURL=PlanProjectionTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanProjectionTools.d.ts","sourceRoot":"","sources":["../../../src/tools/PlanProjectionTools.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2F,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEzI,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,gBAAgB;IAClE,OAAuB,MAAM,SAAuB;IACpD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,cAAuB,SAAS,YAAmB;IAEnD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;IAO9B,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO;CAoBzC;AAED;;GAEG;AACH,8BAAsB,+BAAgC,SAAQ,gBAAgB;IAC5E,OAAuB,MAAM,SAAiC;IAC9D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO;IAiBxC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;CAU/B;AAED;;GAEG;AACH,8BAAsB,gCAAiC,SAAQ,gBAAgB;IAC7E,OAAuB,MAAM,SAAyB;IACtD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,SAAS,CAAC,CAAyB;IAE3C,cAAuB,SAAS,YAAmB;IAEnD,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO;IAQxC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;IAgBnC,OAAO,CAAC,WAAW;CAmCpB"}
1
+ {"version":3,"file":"PlanProjectionTools.d.ts","sourceRoot":"","sources":["../../../src/tools/PlanProjectionTools.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2F,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEzI,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,gBAAgB;IAClE,OAAuB,MAAM,SAAuB;IACpD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,cAAuB,SAAS,YAAmB;cAEnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;cAOpB,OAAO,CAAC,EAAE,EAAE,QAAQ;CAoBrC;AAED;;GAEG;AACH,8BAAsB,+BAAgC,SAAQ,gBAAgB;IAC5E,OAAuB,MAAM,SAAiC;IAC9D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,SAAS,CAAC,CAAS;cAEX,OAAO,CAAC,EAAE,EAAE,QAAQ;cAiBpB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;CAUrC;AAED;;GAEG;AACH,8BAAsB,gCAAiC,SAAQ,gBAAgB;IAC7E,OAAuB,MAAM,SAAyB;IACtD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,SAAS,CAAC,CAAyB;IAE3C,cAAuB,SAAS,YAAmB;cAEnC,OAAO,CAAC,EAAE,EAAE,QAAQ;cAQpB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;IAgBzC,OAAO,CAAC,WAAW;CAmCpB"}
@@ -21,12 +21,12 @@ export class DumpPlanProjectionSettingsTool extends DisplayStyleTool {
21
21
  static get minArgs() { return 0; }
22
22
  static get maxArgs() { return 1; }
23
23
  get require3d() { return true; }
24
- parse(args) {
24
+ async parse(args) {
25
25
  if (1 === args.length)
26
26
  this._copyToClipboard = "c" === args[0].toLowerCase();
27
27
  return true;
28
28
  }
29
- execute(vp) {
29
+ async execute(vp) {
30
30
  const settings = vp.displayStyle.settings.planProjectionSettings;
31
31
  if (undefined === settings) {
32
32
  IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, "No plan projection settings defined"));
@@ -54,7 +54,7 @@ export class OverrideSubCategoryPriorityTool extends DisplayStyleTool {
54
54
  }
55
55
  static get minArgs() { return 1; }
56
56
  static get maxArgs() { return 2; }
57
- execute(vp) {
57
+ async execute(vp) {
58
58
  const style = vp.displayStyle;
59
59
  for (const id of this._subcatIds) {
60
60
  const ovr = style.getSubCategoryOverride(id);
@@ -70,7 +70,7 @@ export class OverrideSubCategoryPriorityTool extends DisplayStyleTool {
70
70
  }
71
71
  return true;
72
72
  }
73
- parse(args) {
73
+ async parse(args) {
74
74
  for (const id of args[0].split(","))
75
75
  this._subcatIds.add(id);
76
76
  const priority = parseInt(args[1], 10);
@@ -91,13 +91,13 @@ export class ChangePlanProjectionSettingsTool extends DisplayStyleTool {
91
91
  static get minArgs() { return 1; }
92
92
  static get maxArgs() { return 5; }
93
93
  get require3d() { return true; }
94
- execute(vp) {
94
+ async execute(vp) {
95
95
  const settings = vp.displayStyle.settings;
96
96
  for (const modelId of this._modelIds)
97
97
  settings.setPlanProjectionSettings(modelId, this._settings);
98
98
  return true;
99
99
  }
100
- parse(inputArgs) {
100
+ async parse(inputArgs) {
101
101
  if (!this.parseModels(inputArgs[0]))
102
102
  return false;
103
103
  const args = parseArgs(inputArgs.slice(1));
@@ -1 +1 @@
1
- {"version":3,"file":"PlanProjectionTools.js","sourceRoot":"","sources":["../../../src/tools/PlanProjectionTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { PlanProjectionSettings, PlanProjectionSettingsProps, SubCategoryOverride } from \"@itwin/core-common\";\r\nimport { DisplayStyle3dState, IModelApp, ModelState, NotifyMessageDetails, OutputMessagePriority, Viewport } from \"@itwin/core-frontend\";\r\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\r\nimport { DisplayStyleTool } from \"./DisplayStyleTools\";\r\nimport { parseArgs } from \"./parseArgs\";\r\n\r\n/** Dumps a JSON representation of the plan projection settings for the current viewport.\r\n * @beta\r\n */\r\nexport class DumpPlanProjectionSettingsTool extends DisplayStyleTool {\r\n public static override toolId = \"DumpLayerSettings\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n private _copyToClipboard = false;\r\n\r\n protected override get require3d() { return true; }\r\n\r\n protected parse(args: string[]) {\r\n if (1 === args.length)\r\n this._copyToClipboard = \"c\" === args[0].toLowerCase();\r\n\r\n return true;\r\n }\r\n\r\n protected execute(vp: Viewport): boolean {\r\n const settings = (vp.displayStyle as DisplayStyle3dState).settings.planProjectionSettings;\r\n if (undefined === settings) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"No plan projection settings defined\"));\r\n return false;\r\n }\r\n\r\n const props = [];\r\n for (const [modelId, value] of settings)\r\n props.push({ modelId, settings: value.toJSON() });\r\n\r\n const json = JSON.stringify(props);\r\n if (this._copyToClipboard)\r\n copyStringToClipboard(json);\r\n\r\n const messageDetails = new NotifyMessageDetails(OutputMessagePriority.Info, \"Dumped plan projection settings\", json);\r\n IModelApp.notifications.outputMessage(messageDetails);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Changes subcategory display priority.\r\n * @beta\r\n */\r\nexport abstract class OverrideSubCategoryPriorityTool extends DisplayStyleTool {\r\n public static override toolId = \"OverrideSubCategoryPriority\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n private readonly _subcatIds = new Set<string>();\r\n private _priority?: number;\r\n\r\n protected execute(vp: Viewport): boolean {\r\n const style = vp.displayStyle;\r\n for (const id of this._subcatIds) {\r\n const ovr = style.getSubCategoryOverride(id);\r\n if (undefined === ovr) {\r\n if (undefined !== this._priority)\r\n style.overrideSubCategory(id, SubCategoryOverride.fromJSON({ priority: this._priority }));\r\n } else {\r\n const props = ovr.toJSON();\r\n props.priority = this._priority;\r\n style.overrideSubCategory(id, SubCategoryOverride.fromJSON(props));\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected parse(args: string[]) {\r\n for (const id of args[0].split(\",\"))\r\n this._subcatIds.add(id);\r\n\r\n const priority = parseInt(args[1], 10);\r\n if (!Number.isNaN(priority))\r\n this._priority = priority;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Changes plan projection settings for one or more models.\r\n * @beta\r\n */\r\nexport abstract class ChangePlanProjectionSettingsTool extends DisplayStyleTool {\r\n public static override toolId = \"ChangeLayerSettings\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 5; }\r\n\r\n private readonly _modelIds = new Set<string>();\r\n private _settings?: PlanProjectionSettings;\r\n\r\n protected override get require3d() { return true; }\r\n\r\n protected execute(vp: Viewport): boolean {\r\n const settings = (vp.displayStyle as DisplayStyle3dState).settings;\r\n for (const modelId of this._modelIds)\r\n settings.setPlanProjectionSettings(modelId, this._settings);\r\n\r\n return true;\r\n }\r\n\r\n protected parse(inputArgs: string[]) {\r\n if (!this.parseModels(inputArgs[0]))\r\n return false;\r\n\r\n const args = parseArgs(inputArgs.slice(1));\r\n const props: PlanProjectionSettingsProps = {};\r\n\r\n props.transparency = args.getFloat(\"t\");\r\n props.overlay = args.getBoolean(\"o\");\r\n props.enforceDisplayPriority = args.getBoolean(\"p\");\r\n props.elevation = args.getFloat(\"e\");\r\n\r\n this._settings = PlanProjectionSettings.fromJSON(props);\r\n return true;\r\n }\r\n\r\n private parseModels(models: string) {\r\n const vp = IModelApp.viewManager.selectedView!; // already validated by super.parseAndRun\r\n models = models.toLowerCase();\r\n\r\n const isPlanProjection = (modelId: string) => {\r\n const model = vp.iModel.models.getLoaded(modelId);\r\n return undefined !== model && isPlanProjectionModel(model);\r\n };\r\n const isPlanProjectionModel = (model: ModelState) => {\r\n const model3d = model.asGeometricModel3d;\r\n return undefined !== model3d && model3d.isPlanProjection;\r\n };\r\n\r\n switch (models[0]) {\r\n case \"a\": // all models in selector\r\n vp.view.forEachModel((model) => {\r\n if (isPlanProjectionModel(model))\r\n this._modelIds.add(model.id);\r\n });\r\n break;\r\n case \"0\": // comma-separated list of Ids\r\n for (const modelId of models.split(\",\"))\r\n if (isPlanProjection(modelId))\r\n this._modelIds.add(modelId);\r\n\r\n break;\r\n }\r\n\r\n if (this._modelIds.size === 0) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, \"No plan projection models\"));\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PlanProjectionTools.js","sourceRoot":"","sources":["../../../src/tools/PlanProjectionTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { PlanProjectionSettings, PlanProjectionSettingsProps, SubCategoryOverride } from \"@itwin/core-common\";\r\nimport { DisplayStyle3dState, IModelApp, ModelState, NotifyMessageDetails, OutputMessagePriority, Viewport } from \"@itwin/core-frontend\";\r\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\r\nimport { DisplayStyleTool } from \"./DisplayStyleTools\";\r\nimport { parseArgs } from \"./parseArgs\";\r\n\r\n/** Dumps a JSON representation of the plan projection settings for the current viewport.\r\n * @beta\r\n */\r\nexport class DumpPlanProjectionSettingsTool extends DisplayStyleTool {\r\n public static override toolId = \"DumpLayerSettings\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n private _copyToClipboard = false;\r\n\r\n protected override get require3d() { return true; }\r\n\r\n protected async parse(args: string[]) {\r\n if (1 === args.length)\r\n this._copyToClipboard = \"c\" === args[0].toLowerCase();\r\n\r\n return true;\r\n }\r\n\r\n protected async execute(vp: Viewport) {\r\n const settings = (vp.displayStyle as DisplayStyle3dState).settings.planProjectionSettings;\r\n if (undefined === settings) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"No plan projection settings defined\"));\r\n return false;\r\n }\r\n\r\n const props = [];\r\n for (const [modelId, value] of settings)\r\n props.push({ modelId, settings: value.toJSON() });\r\n\r\n const json = JSON.stringify(props);\r\n if (this._copyToClipboard)\r\n copyStringToClipboard(json);\r\n\r\n const messageDetails = new NotifyMessageDetails(OutputMessagePriority.Info, \"Dumped plan projection settings\", json);\r\n IModelApp.notifications.outputMessage(messageDetails);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Changes subcategory display priority.\r\n * @beta\r\n */\r\nexport abstract class OverrideSubCategoryPriorityTool extends DisplayStyleTool {\r\n public static override toolId = \"OverrideSubCategoryPriority\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n private readonly _subcatIds = new Set<string>();\r\n private _priority?: number;\r\n\r\n protected async execute(vp: Viewport) {\r\n const style = vp.displayStyle;\r\n for (const id of this._subcatIds) {\r\n const ovr = style.getSubCategoryOverride(id);\r\n if (undefined === ovr) {\r\n if (undefined !== this._priority)\r\n style.overrideSubCategory(id, SubCategoryOverride.fromJSON({ priority: this._priority }));\r\n } else {\r\n const props = ovr.toJSON();\r\n props.priority = this._priority;\r\n style.overrideSubCategory(id, SubCategoryOverride.fromJSON(props));\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected async parse(args: string[]) {\r\n for (const id of args[0].split(\",\"))\r\n this._subcatIds.add(id);\r\n\r\n const priority = parseInt(args[1], 10);\r\n if (!Number.isNaN(priority))\r\n this._priority = priority;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Changes plan projection settings for one or more models.\r\n * @beta\r\n */\r\nexport abstract class ChangePlanProjectionSettingsTool extends DisplayStyleTool {\r\n public static override toolId = \"ChangeLayerSettings\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 5; }\r\n\r\n private readonly _modelIds = new Set<string>();\r\n private _settings?: PlanProjectionSettings;\r\n\r\n protected override get require3d() { return true; }\r\n\r\n protected async execute(vp: Viewport) {\r\n const settings = (vp.displayStyle as DisplayStyle3dState).settings;\r\n for (const modelId of this._modelIds)\r\n settings.setPlanProjectionSettings(modelId, this._settings);\r\n\r\n return true;\r\n }\r\n\r\n protected async parse(inputArgs: string[]) {\r\n if (!this.parseModels(inputArgs[0]))\r\n return false;\r\n\r\n const args = parseArgs(inputArgs.slice(1));\r\n const props: PlanProjectionSettingsProps = {};\r\n\r\n props.transparency = args.getFloat(\"t\");\r\n props.overlay = args.getBoolean(\"o\");\r\n props.enforceDisplayPriority = args.getBoolean(\"p\");\r\n props.elevation = args.getFloat(\"e\");\r\n\r\n this._settings = PlanProjectionSettings.fromJSON(props);\r\n return true;\r\n }\r\n\r\n private parseModels(models: string) {\r\n const vp = IModelApp.viewManager.selectedView!; // already validated by super.parseAndRun\r\n models = models.toLowerCase();\r\n\r\n const isPlanProjection = (modelId: string) => {\r\n const model = vp.iModel.models.getLoaded(modelId);\r\n return undefined !== model && isPlanProjectionModel(model);\r\n };\r\n const isPlanProjectionModel = (model: ModelState) => {\r\n const model3d = model.asGeometricModel3d;\r\n return undefined !== model3d && model3d.isPlanProjection;\r\n };\r\n\r\n switch (models[0]) {\r\n case \"a\": // all models in selector\r\n vp.view.forEachModel((model) => {\r\n if (isPlanProjectionModel(model))\r\n this._modelIds.add(model.id);\r\n });\r\n break;\r\n case \"0\": // comma-separated list of Ids\r\n for (const modelId of models.split(\",\"))\r\n if (isPlanProjection(modelId))\r\n this._modelIds.add(modelId);\r\n\r\n break;\r\n }\r\n\r\n if (this._modelIds.size === 0) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, \"No plan projection models\"));\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -11,7 +11,7 @@ export declare class SetMapHigherPriorityMasking extends Tool {
11
11
  static toolId: string;
12
12
  static get minArgs(): number;
13
13
  static get maxArgs(): number;
14
- run(transparency?: number): Promise<boolean>;
14
+ run(transparency: number, invert: boolean): Promise<boolean>;
15
15
  parseAndRun(...args: string[]): Promise<boolean>;
16
16
  }
17
17
  /** Unmask Mask.
@@ -30,8 +30,9 @@ export declare abstract class PlanarMaskBaseTool extends PrimitiveTool {
30
30
  protected readonly _acceptedModelIds: Set<string>;
31
31
  protected readonly _acceptedSubCategoryIds: Set<string>;
32
32
  protected readonly _acceptedElementIds: Set<string>;
33
- protected _transparency?: number;
33
+ protected _transparency: number;
34
34
  protected _useSelection: boolean;
35
+ protected _invert: boolean;
35
36
  protected _targetMaskModel?: Id64String | ContextRealityModelState;
36
37
  requireWriteableTarget(): boolean;
37
38
  onPostInstall(): Promise<void>;