@itwin/frontend-devtools 5.0.0-dev.4 → 5.0.0-dev.40

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 (150) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/FrontEndDevTools.js +1 -1
  3. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  4. package/lib/cjs/effects/Convolution.js +6 -6
  5. package/lib/cjs/effects/Convolution.js.map +1 -1
  6. package/lib/cjs/effects/EffectTools.js +2 -2
  7. package/lib/cjs/effects/EffectTools.js.map +1 -1
  8. package/lib/cjs/effects/Explosion.js +2 -2
  9. package/lib/cjs/effects/Explosion.js.map +1 -1
  10. package/lib/cjs/effects/FlipImage.js +2 -2
  11. package/lib/cjs/effects/FlipImage.js.map +1 -1
  12. package/lib/cjs/effects/LensDistortion.js +4 -4
  13. package/lib/cjs/effects/LensDistortion.js.map +1 -1
  14. package/lib/cjs/effects/Saturation.js +4 -4
  15. package/lib/cjs/effects/Saturation.js.map +1 -1
  16. package/lib/cjs/effects/Snow.js +2 -2
  17. package/lib/cjs/effects/Snow.js.map +1 -1
  18. package/lib/cjs/effects/Vignette.js +12 -12
  19. package/lib/cjs/effects/Vignette.js.map +1 -1
  20. package/lib/cjs/tools/AnimationIntervalTool.js +1 -1
  21. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  22. package/lib/cjs/tools/ChangeUnitsTool.js +1 -1
  23. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  24. package/lib/cjs/tools/ClipTools.js +4 -4
  25. package/lib/cjs/tools/ClipTools.js.map +1 -1
  26. package/lib/cjs/tools/DisplayStyleTools.js +10 -10
  27. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  28. package/lib/cjs/tools/EmphasizeElementsTool.js +5 -5
  29. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  30. package/lib/cjs/tools/FrustumDecoration.js +3 -3
  31. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  32. package/lib/cjs/tools/InspectElementTool.js +1 -1
  33. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  34. package/lib/cjs/tools/MapLayerTool.js +20 -20
  35. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  36. package/lib/cjs/tools/MeasureTileLoadTime.js +1 -1
  37. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  38. package/lib/cjs/tools/ModelAppearanceTools.js +9 -9
  39. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  40. package/lib/cjs/tools/PlanProjectionTools.js +3 -3
  41. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  42. package/lib/cjs/tools/PlanarMaskTools.js +13 -13
  43. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  44. package/lib/cjs/tools/ProjectExtents.js +1 -1
  45. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  46. package/lib/cjs/tools/RealityModelTools.js +10 -10
  47. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  48. package/lib/cjs/tools/RealityTransitionTool.js +1 -1
  49. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  50. package/lib/cjs/tools/RenderSystemTools.js +3 -3
  51. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  52. package/lib/cjs/tools/RenderTargetTools.js +11 -11
  53. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  54. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +1 -1
  55. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  56. package/lib/cjs/tools/SavedViews.js +3 -3
  57. package/lib/cjs/tools/SavedViews.js.map +1 -1
  58. package/lib/cjs/tools/ScheduleScriptTools.js +3 -3
  59. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  60. package/lib/cjs/tools/SelectionTools.js +2 -2
  61. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  62. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +1 -1
  63. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  64. package/lib/cjs/tools/SourceAspectIdTools.js +2 -2
  65. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  66. package/lib/cjs/tools/TileRequestDecoration.js +1 -1
  67. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  68. package/lib/cjs/tools/TileTreeBoundsDecoration.js +1 -1
  69. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  70. package/lib/cjs/tools/ToolTipProvider.js +1 -1
  71. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  72. package/lib/cjs/tools/ViewportTools.js +19 -19
  73. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  74. package/lib/cjs/widgets/ToolSettingsTracker.js +1 -1
  75. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  76. package/lib/esm/FrontEndDevTools.js +1 -1
  77. package/lib/esm/FrontEndDevTools.js.map +1 -1
  78. package/lib/esm/effects/Convolution.js +6 -6
  79. package/lib/esm/effects/Convolution.js.map +1 -1
  80. package/lib/esm/effects/EffectTools.js +2 -2
  81. package/lib/esm/effects/EffectTools.js.map +1 -1
  82. package/lib/esm/effects/Explosion.js +2 -2
  83. package/lib/esm/effects/Explosion.js.map +1 -1
  84. package/lib/esm/effects/FlipImage.js +2 -2
  85. package/lib/esm/effects/FlipImage.js.map +1 -1
  86. package/lib/esm/effects/LensDistortion.js +4 -4
  87. package/lib/esm/effects/LensDistortion.js.map +1 -1
  88. package/lib/esm/effects/Saturation.js +4 -4
  89. package/lib/esm/effects/Saturation.js.map +1 -1
  90. package/lib/esm/effects/Snow.js +2 -2
  91. package/lib/esm/effects/Snow.js.map +1 -1
  92. package/lib/esm/effects/Vignette.js +12 -12
  93. package/lib/esm/effects/Vignette.js.map +1 -1
  94. package/lib/esm/tools/AnimationIntervalTool.js +1 -1
  95. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  96. package/lib/esm/tools/ChangeUnitsTool.js +1 -1
  97. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  98. package/lib/esm/tools/ClipTools.js +4 -4
  99. package/lib/esm/tools/ClipTools.js.map +1 -1
  100. package/lib/esm/tools/DisplayStyleTools.js +10 -10
  101. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  102. package/lib/esm/tools/EmphasizeElementsTool.js +5 -5
  103. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  104. package/lib/esm/tools/FrustumDecoration.js +3 -3
  105. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  106. package/lib/esm/tools/InspectElementTool.js +1 -1
  107. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  108. package/lib/esm/tools/MapLayerTool.js +20 -20
  109. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  110. package/lib/esm/tools/MeasureTileLoadTime.js +1 -1
  111. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  112. package/lib/esm/tools/ModelAppearanceTools.js +9 -9
  113. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  114. package/lib/esm/tools/PlanProjectionTools.js +3 -3
  115. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  116. package/lib/esm/tools/PlanarMaskTools.js +13 -13
  117. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  118. package/lib/esm/tools/ProjectExtents.js +1 -1
  119. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  120. package/lib/esm/tools/RealityModelTools.js +10 -10
  121. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  122. package/lib/esm/tools/RealityTransitionTool.js +1 -1
  123. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  124. package/lib/esm/tools/RenderSystemTools.js +3 -3
  125. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  126. package/lib/esm/tools/RenderTargetTools.js +11 -11
  127. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  128. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +1 -1
  129. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  130. package/lib/esm/tools/SavedViews.js +3 -3
  131. package/lib/esm/tools/SavedViews.js.map +1 -1
  132. package/lib/esm/tools/ScheduleScriptTools.js +3 -3
  133. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  134. package/lib/esm/tools/SelectionTools.js +2 -2
  135. package/lib/esm/tools/SelectionTools.js.map +1 -1
  136. package/lib/esm/tools/SetGpuMemoryLimitTool.js +1 -1
  137. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  138. package/lib/esm/tools/SourceAspectIdTools.js +2 -2
  139. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  140. package/lib/esm/tools/TileRequestDecoration.js +1 -1
  141. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  142. package/lib/esm/tools/TileTreeBoundsDecoration.js +1 -1
  143. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  144. package/lib/esm/tools/ToolTipProvider.js +1 -1
  145. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  146. package/lib/esm/tools/ViewportTools.js +19 -19
  147. package/lib/esm/tools/ViewportTools.js.map +1 -1
  148. package/lib/esm/widgets/ToolSettingsTracker.js +1 -1
  149. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  150. package/package.json +8 -8
@@ -9,6 +9,7 @@ import { parseBoolean } from "./parseBoolean";
9
9
  * @beta
10
10
  */
11
11
  export class SetMapHigherPriorityMasking extends Tool {
12
+ static { this.toolId = "SetMapHigherPriorityMask"; }
12
13
  static get minArgs() { return 0; }
13
14
  static get maxArgs() { return 2; }
14
15
  async run(transparency, invert) {
@@ -27,11 +28,11 @@ export class SetMapHigherPriorityMasking extends Tool {
27
28
  return this.run((transparency !== undefined && transparency < 1.0) ? transparency : 0, invert === true);
28
29
  }
29
30
  }
30
- SetMapHigherPriorityMasking.toolId = "SetMapHigherPriorityMask";
31
31
  /** Unmask Mask.
32
32
  * @beta
33
33
  */
34
34
  export class UnmaskMapTool extends Tool {
35
+ static { this.toolId = "UnmaskMap"; }
35
36
  static get minArgs() { return 0; }
36
37
  static get maxArgs() { return 0; }
37
38
  async run() {
@@ -43,7 +44,6 @@ export class UnmaskMapTool extends Tool {
43
44
  return true;
44
45
  }
45
46
  }
46
- UnmaskMapTool.toolId = "UnmaskMap";
47
47
  /** Base class for the reality model planar masking tools.
48
48
  * @beta
49
49
  */
@@ -96,7 +96,7 @@ export class PlanarMaskBaseTool extends PrimitiveTool {
96
96
  }
97
97
  async onCleanup() {
98
98
  if (0 !== this._acceptedElementIds.size)
99
- this.iModel.hilited.setHilite(this._acceptedElementIds, false);
99
+ this.iModel.hilited.remove({ elements: this._acceptedElementIds });
100
100
  this.clearIds();
101
101
  }
102
102
  async filterHit(hit, _out) {
@@ -181,6 +181,7 @@ export class PlanarMaskBaseTool extends PrimitiveTool {
181
181
  * @beta
182
182
  */
183
183
  export class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {
184
+ static { this.toolId = "MaskBackgroundMapByElement"; }
184
185
  static get minArgs() { return 0; }
185
186
  static get maxArgs() { return 2; }
186
187
  targetModelRequired() { return false; }
@@ -192,11 +193,11 @@ export class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {
192
193
  vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask("include").toJSON() });
193
194
  }
194
195
  }
195
- MaskBackgroundMapByElementTool.toolId = "MaskBackgroundMapByElement";
196
196
  /** Tool to mask background map by excluded elements
197
197
  * @beta
198
198
  */
199
199
  export class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {
200
+ static { this.toolId = "MaskBackgroundMapByExcludedElement"; }
200
201
  static get minArgs() { return 0; }
201
202
  static get maxArgs() { return 2; }
202
203
  targetModelRequired() { return false; }
@@ -208,11 +209,11 @@ export class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {
208
209
  vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask("exclude").toJSON() });
209
210
  }
210
211
  }
211
- MaskBackgroundMapByExcludedElementTool.toolId = "MaskBackgroundMapByExcludedElement";
212
212
  /** Tool to mask background map by SubCategories
213
213
  * @beta
214
214
  */
215
215
  export class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {
216
+ static { this.toolId = "MaskBackgroundMapBySubCategory"; }
216
217
  static get minArgs() { return 0; }
217
218
  static get maxArgs() { return 2; }
218
219
  targetModelRequired() { return false; }
@@ -225,11 +226,11 @@ export class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {
225
226
  vp.changeBackgroundMapProps({ planarClipMask: this.createSubCategoryMask().toJSON() });
226
227
  }
227
228
  }
228
- MaskBackgroundMapBySubCategoryTool.toolId = "MaskBackgroundMapBySubCategory";
229
229
  /** Tool to mask background map by geometric models
230
230
  * @beta
231
231
  */
232
232
  export class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {
233
+ static { this.toolId = "MaskBackgroundMapByModel"; }
233
234
  static get minArgs() { return 0; }
234
235
  static get maxArgs() { return 2; }
235
236
  targetModelRequired() { return false; }
@@ -241,11 +242,11 @@ export class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {
241
242
  vp.changeBackgroundMapProps({ planarClipMask: this.createModelMask().toJSON() });
242
243
  }
243
244
  }
244
- MaskBackgroundMapByModelTool.toolId = "MaskBackgroundMapByModel";
245
245
  /** Tool to mask reality model by elements
246
246
  * @beta
247
247
  */
248
248
  export class MaskRealityModelByElementTool extends PlanarMaskBaseTool {
249
+ static { this.toolId = "MaskRealityModelByElement"; }
249
250
  static get minArgs() { return 0; }
250
251
  static get maxArgs() { return 2; }
251
252
  targetModelRequired() { return true; }
@@ -258,11 +259,11 @@ export class MaskRealityModelByElementTool extends PlanarMaskBaseTool {
258
259
  this.setRealityModelMask(vp, this.createElementMask("include"));
259
260
  }
260
261
  }
261
- MaskRealityModelByElementTool.toolId = "MaskRealityModelByElement";
262
262
  /** Tool to mask reality model by excluded elements
263
263
  * @beta
264
264
  */
265
265
  export class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {
266
+ static { this.toolId = "MaskRealityModelByExcludedElement"; }
266
267
  static get minArgs() { return 0; }
267
268
  static get maxArgs() { return 2; }
268
269
  targetModelRequired() { return true; }
@@ -275,11 +276,11 @@ export class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {
275
276
  this.setRealityModelMask(vp, this.createElementMask("exclude"));
276
277
  }
277
278
  }
278
- MaskRealityModelByExcludedElementTool.toolId = "MaskRealityModelByExcludedElement";
279
279
  /** Tool to mask reality model by geometric models
280
280
  * @beta
281
281
  */
282
282
  export class MaskRealityModelByModelTool extends PlanarMaskBaseTool {
283
+ static { this.toolId = "MaskRealityModelByModel"; }
283
284
  static get minArgs() { return 0; }
284
285
  static get maxArgs() { return 2; }
285
286
  targetModelRequired() { return true; }
@@ -292,11 +293,11 @@ export class MaskRealityModelByModelTool extends PlanarMaskBaseTool {
292
293
  this.setRealityModelMask(vp, this.createModelMask());
293
294
  }
294
295
  }
295
- MaskRealityModelByModelTool.toolId = "MaskRealityModelByModel";
296
296
  /** Tool to mask reality model by SubCategories
297
297
  * @beta
298
298
  */
299
299
  export class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {
300
+ static { this.toolId = "MaskRealityModelBySubCategory"; }
300
301
  static get minArgs() { return 0; }
301
302
  static get maxArgs() { return 2; }
302
303
  targetModelRequired() { return true; }
@@ -310,7 +311,6 @@ export class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {
310
311
  this.setRealityModelMask(vp, this.createSubCategoryMask());
311
312
  }
312
313
  }
313
- MaskRealityModelBySubCategoryTool.toolId = "MaskRealityModelBySubCategory";
314
314
  /** Tool to mask reality model by higher priority models.
315
315
  * @beta
316
316
  */
@@ -319,6 +319,7 @@ export class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {
319
319
  super(...arguments);
320
320
  this._priority = 0;
321
321
  }
322
+ static { this.toolId = "SetHigherPriorityRealityModelMasking"; }
322
323
  static get minArgs() { return 0; }
323
324
  static get maxArgs() { return 3; }
324
325
  targetModelRequired() { return true; }
@@ -345,11 +346,11 @@ export class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {
345
346
  return this.run();
346
347
  }
347
348
  }
348
- SetHigherPriorityRealityModelMasking.toolId = "SetHigherPriorityRealityModelMasking";
349
349
  /** Remove masks from reality model.
350
350
  * @beta
351
351
  */
352
352
  export class UnmaskRealityModelTool extends PlanarMaskBaseTool {
353
+ static { this.toolId = "UnmaskRealityModel"; }
353
354
  targetModelRequired() { return true; }
354
355
  showPrompt() {
355
356
  IModelApp.notifications.outputPromptByKey("FrontendDevTools:tools.UnmaskRealityModel.Prompts.IdentifyRealityModel");
@@ -372,5 +373,4 @@ export class UnmaskRealityModelTool extends PlanarMaskBaseTool {
372
373
  return EventHandled.No;
373
374
  }
374
375
  }
375
- UnmaskRealityModelTool.toolId = "UnmaskRealityModel";
376
376
  //# sourceMappingURL=PlanarMaskTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarMaskTools.js","sourceRoot":"","sources":["../../../src/tools/PlanarMaskTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskSettings } from \"@itwin/core-common\";\nimport {\n BeButtonEvent, ContextRealityModelState, EventHandled, HitDetail, IModelApp, LocateFilterStatus, LocateResponse, PrimitiveTool, ScreenViewport, Tool,\n} from \"@itwin/core-frontend\";\nimport { parseBoolean } from \"./parseBoolean\";\n\n/** Set Map Masking by selected models.\n * @beta\n */\nexport class SetMapHigherPriorityMasking extends Tool {\n public static override toolId = \"SetMapHigherPriorityMask\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n public override async run(transparency: number, invert: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return false;\n\n vp.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency, invert } });\n vp.invalidateRenderPlan();\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const transparency = parseFloat(args[0]);\n let invert;\n if (args.length > 1)\n invert = parseBoolean(args[1]);\n return this.run((transparency !== undefined && transparency < 1.0) ? transparency : 0, invert === true);\n }\n}\n\n/** Unmask Mask.\n * @beta\n */\nexport class UnmaskMapTool extends Tool {\n public static override toolId = \"UnmaskMap\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 0; }\n\n public override async run(): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return false;\n\n vp.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None, transparency: 0, invert: false } });\n vp.invalidateRenderPlan();\n return true;\n }\n}\n\n/** Base class for the reality model planar masking tools.\n * @beta\n */\nexport abstract class PlanarMaskBaseTool extends PrimitiveTool {\n protected readonly _acceptedModelIds = new Set<Id64String>();\n protected readonly _acceptedSubCategoryIds = new Set<Id64String>();\n protected readonly _acceptedElementIds = new Set<Id64String>();\n protected _transparency: number = 0;\n protected _useSelection: boolean = false;\n protected _invert: boolean = false;\n protected _targetMaskModel?: Id64String | ContextRealityModelState;\n\n public override requireWriteableTarget(): boolean { return false; }\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n public override async onUnsuspend() { this.showPrompt(); }\n private setupAndPromptForNextAction(): void {\n this._useSelection = (undefined !== this.targetView && this.iModel.selectionSet.isActive);\n this.initLocateElements(!this._useSelection || (this.targetModelRequired() && !this._targetMaskModel));\n IModelApp.locateManager.options.allowDecorations = true; // So we can select \"contextual\" reality models.\n this.showPrompt();\n }\n protected targetModelRequired(): boolean { return true; }\n protected elementRequired(): boolean { return true; }\n protected allowSelection(): boolean { return true; }\n protected abstract showPrompt(): void;\n protected abstract createToolInstance(): PlanarMaskBaseTool;\n protected abstract applyMask(vp: ScreenViewport): void;\n private clearIds() {\n this._acceptedElementIds.clear();\n this._acceptedModelIds.clear();\n }\n public override async exitTool() {\n await super.exitTool();\n this._transparency = 0;\n }\n\n public async onRestartTool() {\n this.clearIds();\n this._acceptedSubCategoryIds.clear();\n const tool = this.createToolInstance();\n if (!await tool.run())\n await this.exitTool();\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const transparency = parseFloat(args[0]);\n this._transparency = (transparency !== undefined && transparency < 1.0) ? transparency : 0;\n if (args.length > 1)\n this._invert = parseBoolean(args[1]) === true;\n\n return this.run();\n }\n\n public override async onCleanup() {\n if (0 !== this._acceptedElementIds.size)\n this.iModel.hilited.setHilite(this._acceptedElementIds, false);\n this.clearIds();\n }\n\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\n if (!hit.modelId)\n return LocateFilterStatus.Reject;\n\n if (undefined === this._targetMaskModel && this.targetModelRequired()) {\n if (undefined !== hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId))\n return LocateFilterStatus.Accept;\n\n const model = this.iModel.models.getLoaded(hit.modelId)?.asSpatialModel;\n return model?.isRealityModel ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\n } else\n return (hit.isElementHit && !hit.isModelHit && !this._acceptedElementIds.has(hit.sourceId)) ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return EventHandled.No;\n\n if (undefined !== hit && undefined === this._targetMaskModel && this.targetModelRequired()) {\n if (hit.modelId) {\n this._targetMaskModel = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId) ?? hit.modelId;\n if (!this.elementRequired()) {\n this.applyMask(vp);\n await this.onRestartTool();\n }\n }\n } else if (this._useSelection && this.iModel.selectionSet.isActive) {\n const elements = await this.iModel.elements.getProps(this.iModel.selectionSet.elements);\n for (const element of elements) {\n if (element.id && element.model) {\n this._acceptedElementIds.add(element.id);\n this._acceptedModelIds.add(element.model);\n }\n }\n this.applyMask(vp);\n await this.exitTool();\n return EventHandled.No;\n } else if (undefined !== hit && hit.isElementHit) {\n const sourceId = hit.sourceId;\n if (!this._acceptedElementIds.has(sourceId)) {\n this._acceptedElementIds.add(sourceId);\n this._acceptedModelIds.add(hit.modelId!);\n if (hit.subCategoryId)\n this._acceptedSubCategoryIds.add(hit.subCategoryId);\n this.applyMask(vp);\n }\n }\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n protected createSubCategoryMask() {\n return PlanarClipMaskSettings.create({\n subCategoryIds: this._acceptedSubCategoryIds,\n modelIds: this._acceptedModelIds,\n transparency: this._transparency,\n invert: this._invert,\n });\n }\n\n protected createElementMask(option: \"include\" | \"exclude\") {\n return PlanarClipMaskSettings.create({\n elementIds: this._acceptedElementIds,\n exclude: \"exclude\" === option,\n modelIds: this._acceptedModelIds,\n transparency: this._transparency,\n invert: this._invert,\n });\n }\n\n protected createModelMask() {\n return PlanarClipMaskSettings.create({ modelIds: this._acceptedModelIds, transparency: this._transparency, invert: this._invert });\n }\n\n protected setRealityModelMask(vp: ScreenViewport, mask: PlanarClipMaskSettings): void {\n if (typeof this._targetMaskModel === \"string\")\n vp.displayStyle.settings.planarClipMasks.set(this._targetMaskModel, mask);\n else if (undefined !== this._targetMaskModel)\n this._targetMaskModel.planarClipMaskSettings = mask;\n }\n}\n/** Tool to mask background map by elements\n * @beta\n */\nexport class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapByElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByElement.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\"}`);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask(\"include\").toJSON() });\n }\n}\n/** Tool to mask background map by excluded elements\n * @beta\n */\nexport class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapByExcludedElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByExcludedElement.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\"}`);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByExcludedElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask(\"exclude\").toJSON() });\n }\n}\n\n/** Tool to mask background map by SubCategories\n * @beta\n */\nexport class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapBySubCategory\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected override allowSelection(): boolean { return false; } // Need picking to get subcategory.\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.MaskBackgroundMapBySubCategory.Prompts.IdentifyMaskSubCategory\");\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapBySubCategoryTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createSubCategoryMask().toJSON() });\n }\n}\n\n/** Tool to mask background map by geometric models\n * @beta\n */\nexport class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapByModel\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByModel.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskModel\"}`);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByModelTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createModelMask().toJSON() });\n }\n}\n\n/** Tool to mask reality model by elements\n * @beta\n */\nexport class MaskRealityModelByElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelByElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByElement.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\")}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createElementMask(\"include\"));\n }\n}\n\n/** Tool to mask reality model by excluded elements\n * @beta\n */\nexport class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelByExcludedElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByExcludedElement.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\")}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByExcludedElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createElementMask(\"exclude\"));\n }\n}\n\n/** Tool to mask reality model by geometric models\n * @beta\n */\n\nexport class MaskRealityModelByModelTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelByModel\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskModel\")}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByModelTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createModelMask());\n }\n}\n\n/** Tool to mask reality model by SubCategories\n * @beta\n */\nexport class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelBySubCategory\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return true; }\n protected override allowSelection(): boolean { return false; } // Need picking to get subcategory.\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : \"IdentifyMaskSubCategory\"}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelBySubCategoryTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createSubCategoryMask());\n }\n}\n\n/** Tool to mask reality model by higher priority models.\n * @beta\n */\nexport class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {\n public static override toolId = \"SetHigherPriorityRealityModelMasking\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 3; }\n protected override targetModelRequired() { return true; }\n protected override elementRequired() { return false; }\n private _priority = 0;\n\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.SetHigherPriorityRealityModelMasking.Prompts.IdentifyRealityModel\");\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new SetHigherPriorityRealityModelMasking(); }\n protected applyMask(vp: ScreenViewport): void {\n const basePriority = this._targetMaskModel === vp.displayStyle.getOSMBuildingRealityModel() ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\n this.setRealityModelMask(vp, PlanarClipMaskSettings.create({ priority: basePriority + this._priority, transparency: this._transparency, invert: this._invert }));\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n await super.parseAndRun(...args);\n const priority = parseInt(args[0], 10);\n this._priority = (priority === undefined || isNaN(priority)) ? 0 : priority;\n if (args.length > 1) {\n const value = parseInt(args[1], 10);\n if (!isNaN(value) && value >= 0 && value <= 1)\n this._transparency = value;\n }\n if (args.length > 2)\n this._invert = parseBoolean(args[2]) === true;\n\n return this.run();\n }\n}\n\n/** Remove masks from reality model.\n * @beta\n */\nexport class UnmaskRealityModelTool extends PlanarMaskBaseTool {\n public static override toolId = \"UnmaskRealityModel\";\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.UnmaskRealityModel.Prompts.IdentifyRealityModel\");\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new UnmaskRealityModelTool(); }\n protected applyMask(vp: ScreenViewport): void {\n const settings = PlanarClipMaskSettings.create({ subCategoryIds: this._acceptedSubCategoryIds, modelIds: this._acceptedModelIds });\n this.setRealityModelMask(vp, settings);\n }\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n if (hit?.modelId) {\n const model = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId);\n if (model)\n model.planarClipMaskSettings = undefined;\n else\n hit.viewport.displayStyle.settings.planarClipMasks.delete(hit.modelId);\n\n await this.onRestartTool();\n }\n\n return EventHandled.No;\n }\n}\n"]}
1
+ {"version":3,"file":"PlanarMaskTools.js","sourceRoot":"","sources":["../../../src/tools/PlanarMaskTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskSettings } from \"@itwin/core-common\";\nimport {\n BeButtonEvent, ContextRealityModelState, EventHandled, HitDetail, IModelApp, LocateFilterStatus, LocateResponse, PrimitiveTool, ScreenViewport, Tool,\n} from \"@itwin/core-frontend\";\nimport { parseBoolean } from \"./parseBoolean\";\n\n/** Set Map Masking by selected models.\n * @beta\n */\nexport class SetMapHigherPriorityMasking extends Tool {\n public static override toolId = \"SetMapHigherPriorityMask\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n public override async run(transparency: number, invert: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return false;\n\n vp.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency, invert } });\n vp.invalidateRenderPlan();\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const transparency = parseFloat(args[0]);\n let invert;\n if (args.length > 1)\n invert = parseBoolean(args[1]);\n return this.run((transparency !== undefined && transparency < 1.0) ? transparency : 0, invert === true);\n }\n}\n\n/** Unmask Mask.\n * @beta\n */\nexport class UnmaskMapTool extends Tool {\n public static override toolId = \"UnmaskMap\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 0; }\n\n public override async run(): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return false;\n\n vp.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None, transparency: 0, invert: false } });\n vp.invalidateRenderPlan();\n return true;\n }\n}\n\n/** Base class for the reality model planar masking tools.\n * @beta\n */\nexport abstract class PlanarMaskBaseTool extends PrimitiveTool {\n protected readonly _acceptedModelIds = new Set<Id64String>();\n protected readonly _acceptedSubCategoryIds = new Set<Id64String>();\n protected readonly _acceptedElementIds = new Set<Id64String>();\n protected _transparency: number = 0;\n protected _useSelection: boolean = false;\n protected _invert: boolean = false;\n protected _targetMaskModel?: Id64String | ContextRealityModelState;\n\n public override requireWriteableTarget(): boolean { return false; }\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n public override async onUnsuspend() { this.showPrompt(); }\n private setupAndPromptForNextAction(): void {\n this._useSelection = (undefined !== this.targetView && this.iModel.selectionSet.isActive);\n this.initLocateElements(!this._useSelection || (this.targetModelRequired() && !this._targetMaskModel));\n IModelApp.locateManager.options.allowDecorations = true; // So we can select \"contextual\" reality models.\n this.showPrompt();\n }\n protected targetModelRequired(): boolean { return true; }\n protected elementRequired(): boolean { return true; }\n protected allowSelection(): boolean { return true; }\n protected abstract showPrompt(): void;\n protected abstract createToolInstance(): PlanarMaskBaseTool;\n protected abstract applyMask(vp: ScreenViewport): void;\n private clearIds() {\n this._acceptedElementIds.clear();\n this._acceptedModelIds.clear();\n }\n public override async exitTool() {\n await super.exitTool();\n this._transparency = 0;\n }\n\n public async onRestartTool() {\n this.clearIds();\n this._acceptedSubCategoryIds.clear();\n const tool = this.createToolInstance();\n if (!await tool.run())\n await this.exitTool();\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const transparency = parseFloat(args[0]);\n this._transparency = (transparency !== undefined && transparency < 1.0) ? transparency : 0;\n if (args.length > 1)\n this._invert = parseBoolean(args[1]) === true;\n\n return this.run();\n }\n\n public override async onCleanup() {\n if (0 !== this._acceptedElementIds.size)\n this.iModel.hilited.remove({ elements: this._acceptedElementIds });\n this.clearIds();\n }\n\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\n if (!hit.modelId)\n return LocateFilterStatus.Reject;\n\n if (undefined === this._targetMaskModel && this.targetModelRequired()) {\n if (undefined !== hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId))\n return LocateFilterStatus.Accept;\n\n const model = this.iModel.models.getLoaded(hit.modelId)?.asSpatialModel;\n return model?.isRealityModel ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\n } else\n return (hit.isElementHit && !hit.isModelHit && !this._acceptedElementIds.has(hit.sourceId)) ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return EventHandled.No;\n\n if (undefined !== hit && undefined === this._targetMaskModel && this.targetModelRequired()) {\n if (hit.modelId) {\n this._targetMaskModel = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId) ?? hit.modelId;\n if (!this.elementRequired()) {\n this.applyMask(vp);\n await this.onRestartTool();\n }\n }\n } else if (this._useSelection && this.iModel.selectionSet.isActive) {\n const elements = await this.iModel.elements.getProps(this.iModel.selectionSet.elements);\n for (const element of elements) {\n if (element.id && element.model) {\n this._acceptedElementIds.add(element.id);\n this._acceptedModelIds.add(element.model);\n }\n }\n this.applyMask(vp);\n await this.exitTool();\n return EventHandled.No;\n } else if (undefined !== hit && hit.isElementHit) {\n const sourceId = hit.sourceId;\n if (!this._acceptedElementIds.has(sourceId)) {\n this._acceptedElementIds.add(sourceId);\n this._acceptedModelIds.add(hit.modelId!);\n if (hit.subCategoryId)\n this._acceptedSubCategoryIds.add(hit.subCategoryId);\n this.applyMask(vp);\n }\n }\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n protected createSubCategoryMask() {\n return PlanarClipMaskSettings.create({\n subCategoryIds: this._acceptedSubCategoryIds,\n modelIds: this._acceptedModelIds,\n transparency: this._transparency,\n invert: this._invert,\n });\n }\n\n protected createElementMask(option: \"include\" | \"exclude\") {\n return PlanarClipMaskSettings.create({\n elementIds: this._acceptedElementIds,\n exclude: \"exclude\" === option,\n modelIds: this._acceptedModelIds,\n transparency: this._transparency,\n invert: this._invert,\n });\n }\n\n protected createModelMask() {\n return PlanarClipMaskSettings.create({ modelIds: this._acceptedModelIds, transparency: this._transparency, invert: this._invert });\n }\n\n protected setRealityModelMask(vp: ScreenViewport, mask: PlanarClipMaskSettings): void {\n if (typeof this._targetMaskModel === \"string\")\n vp.displayStyle.settings.planarClipMasks.set(this._targetMaskModel, mask);\n else if (undefined !== this._targetMaskModel)\n this._targetMaskModel.planarClipMaskSettings = mask;\n }\n}\n/** Tool to mask background map by elements\n * @beta\n */\nexport class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapByElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByElement.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\"}`);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask(\"include\").toJSON() });\n }\n}\n/** Tool to mask background map by excluded elements\n * @beta\n */\nexport class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapByExcludedElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByExcludedElement.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\"}`);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByExcludedElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask(\"exclude\").toJSON() });\n }\n}\n\n/** Tool to mask background map by SubCategories\n * @beta\n */\nexport class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapBySubCategory\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected override allowSelection(): boolean { return false; } // Need picking to get subcategory.\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.MaskBackgroundMapBySubCategory.Prompts.IdentifyMaskSubCategory\");\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapBySubCategoryTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createSubCategoryMask().toJSON() });\n }\n}\n\n/** Tool to mask background map by geometric models\n * @beta\n */\nexport class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskBackgroundMapByModel\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return false; }\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByModel.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskModel\"}`);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByModelTool(); }\n protected applyMask(vp: ScreenViewport): void {\n vp.changeBackgroundMapProps({ planarClipMask: this.createModelMask().toJSON() });\n }\n}\n\n/** Tool to mask reality model by elements\n * @beta\n */\nexport class MaskRealityModelByElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelByElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByElement.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\")}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createElementMask(\"include\"));\n }\n}\n\n/** Tool to mask reality model by excluded elements\n * @beta\n */\nexport class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelByExcludedElement\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByExcludedElement.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\")}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByExcludedElementTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createElementMask(\"exclude\"));\n }\n}\n\n/** Tool to mask reality model by geometric models\n * @beta\n */\n\nexport class MaskRealityModelByModelTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelByModel\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskModel\")}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByModelTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createModelMask());\n }\n}\n\n/** Tool to mask reality model by SubCategories\n * @beta\n */\nexport class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {\n public static override toolId = \"MaskRealityModelBySubCategory\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n protected override targetModelRequired() { return true; }\n protected override allowSelection(): boolean { return false; } // Need picking to get subcategory.\n\n protected showPrompt(): void {\n const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : \"IdentifyMaskSubCategory\"}`;\n IModelApp.notifications.outputPromptByKey(key);\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelBySubCategoryTool(); }\n protected applyMask(vp: ScreenViewport): void {\n this.setRealityModelMask(vp, this.createSubCategoryMask());\n }\n}\n\n/** Tool to mask reality model by higher priority models.\n * @beta\n */\nexport class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {\n public static override toolId = \"SetHigherPriorityRealityModelMasking\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 3; }\n protected override targetModelRequired() { return true; }\n protected override elementRequired() { return false; }\n private _priority = 0;\n\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.SetHigherPriorityRealityModelMasking.Prompts.IdentifyRealityModel\");\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new SetHigherPriorityRealityModelMasking(); }\n protected applyMask(vp: ScreenViewport): void {\n const basePriority = this._targetMaskModel === vp.displayStyle.getOSMBuildingRealityModel() ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\n this.setRealityModelMask(vp, PlanarClipMaskSettings.create({ priority: basePriority + this._priority, transparency: this._transparency, invert: this._invert }));\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n await super.parseAndRun(...args);\n const priority = parseInt(args[0], 10);\n this._priority = (priority === undefined || isNaN(priority)) ? 0 : priority;\n if (args.length > 1) {\n const value = parseInt(args[1], 10);\n if (!isNaN(value) && value >= 0 && value <= 1)\n this._transparency = value;\n }\n if (args.length > 2)\n this._invert = parseBoolean(args[2]) === true;\n\n return this.run();\n }\n}\n\n/** Remove masks from reality model.\n * @beta\n */\nexport class UnmaskRealityModelTool extends PlanarMaskBaseTool {\n public static override toolId = \"UnmaskRealityModel\";\n protected override targetModelRequired() { return true; }\n\n protected showPrompt(): void {\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.UnmaskRealityModel.Prompts.IdentifyRealityModel\");\n }\n protected createToolInstance(): PlanarMaskBaseTool { return new UnmaskRealityModelTool(); }\n protected applyMask(vp: ScreenViewport): void {\n const settings = PlanarClipMaskSettings.create({ subCategoryIds: this._acceptedSubCategoryIds, modelIds: this._acceptedModelIds });\n this.setRealityModelMask(vp, settings);\n }\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n if (hit?.modelId) {\n const model = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId);\n if (model)\n model.planarClipMaskSettings = undefined;\n else\n hit.viewport.displayStyle.settings.planarClipMasks.delete(hit.modelId);\n\n await this.onRestartTool();\n }\n\n return EventHandled.No;\n }\n}\n"]}
@@ -83,6 +83,7 @@ export function toggleProjectExtents(imodel, enabled) {
83
83
  * @beta
84
84
  */
85
85
  export class ToggleProjectExtentsTool extends Tool {
86
+ static { this.toolId = "ToggleProjectExtents"; }
86
87
  static get minArgs() { return 0; }
87
88
  static get maxArgs() { return 1; }
88
89
  async run(enable) {
@@ -101,5 +102,4 @@ export class ToggleProjectExtentsTool extends Tool {
101
102
  return true;
102
103
  }
103
104
  }
104
- ToggleProjectExtentsTool.toolId = "ToggleProjectExtents";
105
105
  //# sourceMappingURL=ProjectExtents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectExtents.js","sourceRoot":"","sources":["../../../src/tools/ProjectExtents.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { AxisAlignedBox3d, ColorDef, LinePixels } from \"@itwin/core-common\";\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, Tool } from \"@itwin/core-frontend\";\nimport { parseToggle } from \"./parseToggle\";\n\n/** @beta */\nexport class ProjectExtentsDecoration {\n private static _decorator?: ProjectExtentsDecoration;\n protected _removeDecorationListener?: () => void;\n protected _extents: AxisAlignedBox3d;\n\n public constructor(iModel: IModelConnection) {\n this._extents = iModel.projectExtents;\n this.updateDecorationListener(true);\n }\n\n protected stop(): void { this.updateDecorationListener(false); }\n\n protected updateDecorationListener(add: boolean): void {\n if (this._removeDecorationListener) {\n if (!add) {\n this._removeDecorationListener();\n this._removeDecorationListener = undefined;\n }\n } else if (add) {\n if (!this._removeDecorationListener)\n this._removeDecorationListener = IModelApp.viewManager.addDecorator(this);\n }\n }\n\n public static get isActive(): boolean {\n return undefined !== ProjectExtentsDecoration._decorator;\n }\n\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\n public readonly useCachedDecorations = true;\n\n public decorate(context: DecorateContext): void {\n const vp = context.viewport;\n if (!vp.view.isSpatialView())\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n builderAccVis.addRangeBox(this._extents);\n builderAccHid.addRangeBox(this._extents);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n // Returns true if extents become enabled.\n public static toggle(imodel: IModelConnection, enabled?: boolean): boolean {\n if (undefined !== enabled) {\n const alreadyEnabled = undefined !== ProjectExtentsDecoration._decorator;\n if (enabled === alreadyEnabled)\n return alreadyEnabled;\n }\n\n if (undefined === ProjectExtentsDecoration._decorator) {\n ProjectExtentsDecoration._decorator = new ProjectExtentsDecoration(imodel);\n return true;\n } else {\n ProjectExtentsDecoration._decorator.stop();\n ProjectExtentsDecoration._decorator = undefined;\n return false;\n }\n }\n}\n\n/** Enable or disable the project extents decoration. This decoration draws a box coinciding with the iModel's project extents.\n * @param imodel The iModel from which to obtain the extents.\n * @param enable If undefined, the current enabled state of the decoration will be inverted; otherwise it will be enabled if true, or disabled if false.\n * @returns true if the extents are now ON, false if they are now OFF.\n * @beta\n */\nexport function toggleProjectExtents(imodel: IModelConnection, enabled?: boolean): boolean {\n return ProjectExtentsDecoration.toggle(imodel, enabled);\n}\n\n/** Enable or disable project extents decoration.\n * The key-in takes at most 1 argument (case-insensitive):\n * - \"ON\" => enable project extents\n * - \"OFF\" => disable project extents\n * - \"TOGGLE\" or omitted => toggle project extents\n * @see [toggleProjectExtents]\n * @beta\n */\nexport class ToggleProjectExtentsTool extends Tool {\n public static override toolId = \"ToggleProjectExtents\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(enable?: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp && vp.view.isSpatialView()) {\n const iModel = vp.iModel;\n if (toggleProjectExtents(iModel, enable))\n vp.onChangeView.addOnce(() => toggleProjectExtents(iModel, false));\n }\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const enable = parseToggle(args[0]);\n if (typeof enable !== \"string\")\n await this.run(enable);\n\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectExtents.js","sourceRoot":"","sources":["../../../src/tools/ProjectExtents.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { AxisAlignedBox3d, ColorDef, LinePixels } from \"@itwin/core-common\";\nimport { DecorateContext, GraphicType, IModelApp, IModelConnection, Tool } from \"@itwin/core-frontend\";\nimport { parseToggle } from \"./parseToggle\";\n\n/** @beta */\nexport class ProjectExtentsDecoration {\n private static _decorator?: ProjectExtentsDecoration;\n protected _removeDecorationListener?: () => void;\n protected _extents: AxisAlignedBox3d;\n\n public constructor(iModel: IModelConnection) {\n this._extents = iModel.projectExtents;\n this.updateDecorationListener(true);\n }\n\n protected stop(): void { this.updateDecorationListener(false); }\n\n protected updateDecorationListener(add: boolean): void {\n if (this._removeDecorationListener) {\n if (!add) {\n this._removeDecorationListener();\n this._removeDecorationListener = undefined;\n }\n } else if (add) {\n if (!this._removeDecorationListener)\n this._removeDecorationListener = IModelApp.viewManager.addDecorator(this);\n }\n }\n\n public static get isActive(): boolean {\n return undefined !== ProjectExtentsDecoration._decorator;\n }\n\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\n public readonly useCachedDecorations = true;\n\n public decorate(context: DecorateContext): void {\n const vp = context.viewport;\n if (!vp.view.isSpatialView())\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n builderAccVis.addRangeBox(this._extents);\n builderAccHid.addRangeBox(this._extents);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n // Returns true if extents become enabled.\n public static toggle(imodel: IModelConnection, enabled?: boolean): boolean {\n if (undefined !== enabled) {\n const alreadyEnabled = undefined !== ProjectExtentsDecoration._decorator;\n if (enabled === alreadyEnabled)\n return alreadyEnabled;\n }\n\n if (undefined === ProjectExtentsDecoration._decorator) {\n ProjectExtentsDecoration._decorator = new ProjectExtentsDecoration(imodel);\n return true;\n } else {\n ProjectExtentsDecoration._decorator.stop();\n ProjectExtentsDecoration._decorator = undefined;\n return false;\n }\n }\n}\n\n/** Enable or disable the project extents decoration. This decoration draws a box coinciding with the iModel's project extents.\n * @param imodel The iModel from which to obtain the extents.\n * @param enable If undefined, the current enabled state of the decoration will be inverted; otherwise it will be enabled if true, or disabled if false.\n * @returns true if the extents are now ON, false if they are now OFF.\n * @beta\n */\nexport function toggleProjectExtents(imodel: IModelConnection, enabled?: boolean): boolean {\n return ProjectExtentsDecoration.toggle(imodel, enabled);\n}\n\n/** Enable or disable project extents decoration.\n * The key-in takes at most 1 argument (case-insensitive):\n * - \"ON\" => enable project extents\n * - \"OFF\" => disable project extents\n * - \"TOGGLE\" or omitted => toggle project extents\n * @see [toggleProjectExtents]\n * @beta\n */\nexport class ToggleProjectExtentsTool extends Tool {\n public static override toolId = \"ToggleProjectExtents\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(enable?: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp && vp.view.isSpatialView()) {\n const iModel = vp.iModel;\n if (toggleProjectExtents(iModel, enable))\n vp.onChangeView.addOnce(() => toggleProjectExtents(iModel, false));\n }\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const enable = parseToggle(args[0]);\n if (typeof enable !== \"string\")\n await this.run(enable);\n\n return true;\n }\n}\n"]}
@@ -14,6 +14,7 @@ import { parseToggle } from "./parseToggle";
14
14
  * @beta
15
15
  */
16
16
  export class AttachRealityModelTool extends Tool {
17
+ static { this.toolId = "AttachRealityModelTool"; }
17
18
  static get minArgs() { return 1; }
18
19
  static get maxArgs() { return 1; }
19
20
  /** This method runs the tool, attaching a specified reality model.
@@ -38,10 +39,10 @@ export class AttachRealityModelTool extends Tool {
38
39
  return this.run(args[0]);
39
40
  }
40
41
  }
41
- AttachRealityModelTool.toolId = "AttachRealityModelTool";
42
42
  /** This tool saves a reality model's JSON representation to the system clipboard.
43
43
  * @beta */
44
44
  export class SaveRealityModelTool extends Tool {
45
+ static { this.toolId = "SaveRealityModelTool"; }
45
46
  static get minArgs() { return 0; }
46
47
  static get maxArgs() { return 1; }
47
48
  /** This method runs the tool, saving a reality model's JSON representation to the system clipboard.
@@ -66,7 +67,6 @@ export class SaveRealityModelTool extends Tool {
66
67
  return this.run(args.length > 0 ? args[0] : undefined);
67
68
  }
68
69
  }
69
- SaveRealityModelTool.toolId = "SaveRealityModelTool";
70
70
  function changeRealityModelAppearanceOverrides(vp, overrides, index) {
71
71
  if (index < 0) {
72
72
  for (const model of vp.displayStyle.settings.contextRealityModels.models)
@@ -88,6 +88,7 @@ function appearanceChangedString(index) {
88
88
  * @beta
89
89
  */
90
90
  export class SetRealityModelTransparencyTool extends Tool {
91
+ static { this.toolId = "SetRealityModelTransparencyTool"; }
91
92
  static get minArgs() { return 1; }
92
93
  static get maxArgs() { return 2; }
93
94
  async run(transparency, index) {
@@ -103,11 +104,11 @@ export class SetRealityModelTransparencyTool extends Tool {
103
104
  return this.run(parseFloat(args[0]), args.length > 1 ? parseInt(args[1], 10) : -1);
104
105
  }
105
106
  }
106
- SetRealityModelTransparencyTool.toolId = "SetRealityModelTransparencyTool";
107
107
  /** Set reality model appearance override for locatable in display style.
108
108
  * @beta
109
109
  */
110
110
  export class SetRealityModelLocateTool extends Tool {
111
+ static { this.toolId = "SetRealityModelLocateTool"; }
111
112
  static get minArgs() { return 1; }
112
113
  static get maxArgs() { return 2; }
113
114
  async run(locate, index) {
@@ -125,11 +126,11 @@ export class SetRealityModelLocateTool extends Tool {
125
126
  return locate === undefined ? false : this.run(locate, args.length > 1 ? parseInt(args[1], 10) : -1);
126
127
  }
127
128
  }
128
- SetRealityModelLocateTool.toolId = "SetRealityModelLocateTool";
129
129
  /** Set reality model appearance override for emphasized in display style.
130
130
  * @beta
131
131
  */
132
132
  export class SetRealityModelEmphasizedTool extends Tool {
133
+ static { this.toolId = "SetRealityModelEmphasizedTool"; }
133
134
  static get minArgs() { return 1; }
134
135
  static get maxArgs() { return 2; }
135
136
  async run(emphasized, index) {
@@ -146,11 +147,11 @@ export class SetRealityModelEmphasizedTool extends Tool {
146
147
  return emphasized === undefined ? false : this.run(emphasized ? true : undefined, args.length > 1 ? parseInt(args[1], 10) : -1);
147
148
  }
148
149
  }
149
- SetRealityModelEmphasizedTool.toolId = "SetRealityModelEmphasizedTool";
150
150
  /** Detach reality model from display style.
151
151
  * @beta
152
152
  */
153
153
  export class DetachRealityModelTool extends Tool {
154
+ static { this.toolId = "ViewportDetachRealityModel"; }
154
155
  static get minArgs() { return 0; }
155
156
  static get maxArgs() { return 1; }
156
157
  async run(index) {
@@ -173,11 +174,11 @@ export class DetachRealityModelTool extends Tool {
173
174
  return this.run(args.length > 0 ? parseInt(args[0], 10) : -1);
174
175
  }
175
176
  }
176
- DetachRealityModelTool.toolId = "ViewportDetachRealityModel";
177
177
  /** Set reality model appearance override for color in display style.
178
178
  * @beta
179
179
  */
180
180
  export class SetRealityModelColorTool extends Tool {
181
+ static { this.toolId = "SetRealityModelColorTool"; }
181
182
  static get minArgs() { return 3; }
182
183
  static get maxArgs() { return 4; }
183
184
  async run(rgb, index) {
@@ -193,11 +194,11 @@ export class SetRealityModelColorTool extends Tool {
193
194
  return this.run({ r: parseFloat(args[0]), g: parseFloat(args[1]), b: parseFloat(args[2]) }, args.length > 3 ? parseInt(args[3], 10) : -1);
194
195
  }
195
196
  }
196
- SetRealityModelColorTool.toolId = "SetRealityModelColorTool";
197
197
  /** Clear reality model appearance override in display style.
198
198
  * @beta
199
199
  */
200
200
  export class ClearRealityModelAppearanceOverrides extends Tool {
201
+ static { this.toolId = "ClearRealityModelAppearanceOverrides"; }
201
202
  static get minArgs() { return 0; }
202
203
  static get maxArgs() { return 1; }
203
204
  async run(index) {
@@ -214,11 +215,11 @@ export class ClearRealityModelAppearanceOverrides extends Tool {
214
215
  return this.run(args[0] === undefined ? -1 : parseInt(args[0], 10));
215
216
  }
216
217
  }
217
- ClearRealityModelAppearanceOverrides.toolId = "ClearRealityModelAppearanceOverrides";
218
218
  /** Attach a cesium asset from the Ion ID and key.
219
219
  * @beta
220
220
  */
221
221
  export class AttachCesiumAssetTool extends Tool {
222
+ static { this.toolId = "AttachCesiumAssetTool"; }
222
223
  static get minArgs() { return 1; }
223
224
  static get maxArgs() { return 2; }
224
225
  async run(assetId, requestKey) {
@@ -242,11 +243,11 @@ export class AttachCesiumAssetTool extends Tool {
242
243
  return Number.isNaN(assetId) ? false : this.run(assetId, args[1]);
243
244
  }
244
245
  }
245
- AttachCesiumAssetTool.toolId = "AttachCesiumAssetTool";
246
246
  /** Turn on/off display of OpenStreetMap buildings
247
247
  * @beta
248
248
  */
249
249
  export class ToggleOSMBuildingDisplay extends Tool {
250
+ static { this.toolId = "SetBuildingDisplay"; }
250
251
  static get minArgs() { return 0; }
251
252
  static get maxArgs() { return 2; }
252
253
  async run(onOff, transparency) {
@@ -265,5 +266,4 @@ export class ToggleOSMBuildingDisplay extends Tool {
265
266
  return typeof toggle === "string" ? false : this.run(toggle, transparency);
266
267
  }
267
268
  }
268
- ToggleOSMBuildingDisplay.toolId = "SetBuildingDisplay";
269
269
  //# sourceMappingURL=RealityModelTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelTools.js","sourceRoot":"","sources":["../../../src/tools/RealityModelTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { FeatureAppearance, FeatureAppearanceProps, RgbColorProps } from \"@itwin/core-common\";\nimport { getCesiumAssetUrl, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport } from \"@itwin/core-frontend\";\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\nimport { parseBoolean } from \"./parseBoolean\";\nimport { parseToggle } from \"./parseToggle\";\n\n/** This tool attaches a specified reality model.\n * @beta\n */\nexport class AttachRealityModelTool extends Tool {\n public static override toolId = \"AttachRealityModelTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, attaching a specified reality model.\n * @param data a [[ContextRealityModelProps]] JSON representation\n */\n public override async run(data: string): Promise<boolean> {\n const props = JSON.parse(data);\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n if (props === undefined || props.tilesetUrl === undefined) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `Properties ${props} are not valid`));\n }\n\n vp.displayStyle.attachRealityModel(props);\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Reality Model ${props.tilesetUrl} attached`));\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing `data`.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args[0]);\n }\n}\n\n/** This tool saves a reality model's JSON representation to the system clipboard.\n * @beta */\nexport class SaveRealityModelTool extends Tool {\n public static override toolId = \"SaveRealityModelTool\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, saving a reality model's JSON representation to the system clipboard.\n * @param name the name of the reality model to copy; if undefined, copy the last found reality model\n */\n public override async run(name: string | undefined): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n vp.displayStyle.forEachRealityModel((realityModel) => {\n if (name === undefined || realityModel.name === name) {\n copyStringToClipboard(JSON.stringify(realityModel.toJSON()));\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Reality Model ${realityModel.name} copied to clipboard`));\n }\n });\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing `name`.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args.length > 0 ? args[0] : undefined);\n }\n}\n\nfunction changeRealityModelAppearanceOverrides(vp: Viewport, overrides: FeatureAppearanceProps, index: number): boolean {\n if (index < 0) {\n for (const model of vp.displayStyle.settings.contextRealityModels.models)\n model.appearanceOverrides = model.appearanceOverrides ? model.appearanceOverrides.clone(overrides) : FeatureAppearance.fromJSON(overrides);\n\n return vp.displayStyle.settings.contextRealityModels.models.length > 0;\n } else {\n const model = vp.displayStyle.settings.contextRealityModels.models[index];\n if (!model)\n return false;\n\n model.appearanceOverrides = model.appearanceOverrides ? model.appearanceOverrides.clone(overrides) : FeatureAppearance.fromJSON(overrides);\n return true;\n }\n}\n\nfunction appearanceChangedString(index: number) {\n return index < 0 ? `All Reality Models` : `Reality Model at Index: ${index}`;\n}\n\n/** Set reality model appearance override for transparency in display style.\n * @beta\n */\nexport class SetRealityModelTransparencyTool extends Tool {\n public static override toolId = \"SetRealityModelTransparencyTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(transparency: number, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const changed = changeRealityModelAppearanceOverrides(vp, { transparency }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to transparency: ${transparency}`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(parseFloat(args[0]), args.length > 1 ? parseInt(args[1], 10) : -1);\n }\n}\n/** Set reality model appearance override for locatable in display style.\n * @beta\n */\nexport class SetRealityModelLocateTool extends Tool {\n public static override toolId = \"SetRealityModelLocateTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(locate: boolean, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const nonLocatable = locate ? undefined : true;\n const changed = changeRealityModelAppearanceOverrides(vp, { nonLocatable }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to locate: ${locate}`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const locate = parseBoolean(args[0]);\n return locate === undefined ? false : this.run(locate, args.length > 1 ? parseInt(args[1], 10) : -1);\n }\n}\n\n/** Set reality model appearance override for emphasized in display style.\n * @beta\n */\nexport class SetRealityModelEmphasizedTool extends Tool {\n public static override toolId = \"SetRealityModelEmphasizedTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(emphasized: true | undefined, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const changed = changeRealityModelAppearanceOverrides(vp, { emphasized }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to emphasized: ${emphasized}`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const emphasized = parseBoolean(args[0]);\n return emphasized === undefined ? false : this.run(emphasized ? true : undefined, args.length > 1 ? parseInt(args[1], 10) : -1);\n }\n}\n\n/** Detach reality model from display style.\n * @beta\n */\nexport class DetachRealityModelTool extends Tool {\n public static override toolId = \"ViewportDetachRealityModel\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n if (index < 0) {\n vp.displayStyle.settings.contextRealityModels.models.forEach((model) => vp.displayStyle.settings.contextRealityModels.delete(model));\n return true;\n } else {\n const model = vp.displayStyle.settings.contextRealityModels.models[index];\n if (!model)\n return false;\n\n vp.displayStyle.settings.contextRealityModels.delete(model);\n return true;\n }\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args.length > 0 ? parseInt(args[0], 10) : -1);\n }\n}\n\n/** Set reality model appearance override for color in display style.\n * @beta\n */\nexport class SetRealityModelColorTool extends Tool {\n public static override toolId = \"SetRealityModelColorTool\";\n public static override get minArgs() { return 3; }\n public static override get maxArgs() { return 4; }\n\n public override async run(rgb: RgbColorProps, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const changed = changeRealityModelAppearanceOverrides(vp, { rgb }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to RGB color: (${rgb.r}, ${rgb.g}, ${rgb.b})`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run({ r: parseFloat(args[0]), g: parseFloat(args[1]), b: parseFloat(args[2]) }, args.length > 3 ? parseInt(args[3], 10) : -1);\n }\n}\n\n/** Clear reality model appearance override in display style.\n * @beta\n */\nexport class ClearRealityModelAppearanceOverrides extends Tool {\n public static override toolId = \"ClearRealityModelAppearanceOverrides\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (!vp)\n return false;\n\n const model = vp.displayStyle.settings.contextRealityModels.models[index];\n if (!model)\n return false;\n\n model.appearanceOverrides = undefined;\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args[0] === undefined ? -1 : parseInt(args[0], 10));\n }\n}\n\n/** Attach a cesium asset from the Ion ID and key.\n * @beta\n */\nexport class AttachCesiumAssetTool extends Tool {\n public static override toolId = \"AttachCesiumAssetTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(assetId: number, requestKey: string): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n // attach using getCesiumAssetUrl\n const accessKey = requestKey ? requestKey : IModelApp.tileAdmin.cesiumIonKey ? IModelApp.tileAdmin.cesiumIonKey : \"\";\n const props = {\n tilesetUrl: getCesiumAssetUrl(\n assetId,\n accessKey,\n ),\n };\n // Alternative new way to attach using rdSourceKey\n // const rdSourceKey = RealityDataSource.createCesiumIonAssetKey(assetId, accessKey);\n // const props: ContextRealityModelProps = { rdSourceKey, tilesetUrl: getCesiumAssetUrl(assetId, accessKey) };\n\n vp.displayStyle.attachRealityModel(props);\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Cesium Asset #${assetId} attached`));\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const assetId = parseInt(args[0], 10);\n return Number.isNaN(assetId) ? false : this.run(assetId, args[1]);\n }\n}\n\n/** Turn on/off display of OpenStreetMap buildings\n * @beta\n */\nexport class ToggleOSMBuildingDisplay extends Tool {\n public static override toolId = \"SetBuildingDisplay\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n public override async run(onOff?: boolean, transparency?: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n if (onOff === undefined)\n onOff = undefined === vp.displayStyle.getOSMBuildingRealityModel(); // Toggle current state.\n\n const appearanceOverrides = (transparency !== undefined && transparency > 0 && transparency < 1) ? FeatureAppearance.fromJSON({ transparency }) : undefined;\n\n vp.displayStyle.setOSMBuildingDisplay({ onOff, appearanceOverrides });\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const toggle = parseToggle(args[0]);\n const transparency = args.length > 0 ? parseFloat(args[1]) : undefined;\n return typeof toggle === \"string\" ? false : this.run(toggle, transparency);\n }\n}\n"]}
1
+ {"version":3,"file":"RealityModelTools.js","sourceRoot":"","sources":["../../../src/tools/RealityModelTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { FeatureAppearance, FeatureAppearanceProps, RgbColorProps } from \"@itwin/core-common\";\nimport { getCesiumAssetUrl, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport } from \"@itwin/core-frontend\";\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\nimport { parseBoolean } from \"./parseBoolean\";\nimport { parseToggle } from \"./parseToggle\";\n\n/** This tool attaches a specified reality model.\n * @beta\n */\nexport class AttachRealityModelTool extends Tool {\n public static override toolId = \"AttachRealityModelTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, attaching a specified reality model.\n * @param data a [[ContextRealityModelProps]] JSON representation\n */\n public override async run(data: string): Promise<boolean> {\n const props = JSON.parse(data);\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n if (props === undefined || props.tilesetUrl === undefined) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `Properties ${props} are not valid`));\n }\n\n vp.displayStyle.attachRealityModel(props);\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Reality Model ${props.tilesetUrl} attached`));\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing `data`.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args[0]);\n }\n}\n\n/** This tool saves a reality model's JSON representation to the system clipboard.\n * @beta */\nexport class SaveRealityModelTool extends Tool {\n public static override toolId = \"SaveRealityModelTool\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n /** This method runs the tool, saving a reality model's JSON representation to the system clipboard.\n * @param name the name of the reality model to copy; if undefined, copy the last found reality model\n */\n public override async run(name: string | undefined): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n vp.displayStyle.forEachRealityModel((realityModel) => {\n if (name === undefined || realityModel.name === name) {\n copyStringToClipboard(JSON.stringify(realityModel.toJSON()));\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Reality Model ${realityModel.name} copied to clipboard`));\n }\n });\n\n return true;\n }\n\n /** Executes this tool's run method with args[0] containing `name`.\n * @see [[run]]\n */\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args.length > 0 ? args[0] : undefined);\n }\n}\n\nfunction changeRealityModelAppearanceOverrides(vp: Viewport, overrides: FeatureAppearanceProps, index: number): boolean {\n if (index < 0) {\n for (const model of vp.displayStyle.settings.contextRealityModels.models)\n model.appearanceOverrides = model.appearanceOverrides ? model.appearanceOverrides.clone(overrides) : FeatureAppearance.fromJSON(overrides);\n\n return vp.displayStyle.settings.contextRealityModels.models.length > 0;\n } else {\n const model = vp.displayStyle.settings.contextRealityModels.models[index];\n if (!model)\n return false;\n\n model.appearanceOverrides = model.appearanceOverrides ? model.appearanceOverrides.clone(overrides) : FeatureAppearance.fromJSON(overrides);\n return true;\n }\n}\n\nfunction appearanceChangedString(index: number) {\n return index < 0 ? `All Reality Models` : `Reality Model at Index: ${index}`;\n}\n\n/** Set reality model appearance override for transparency in display style.\n * @beta\n */\nexport class SetRealityModelTransparencyTool extends Tool {\n public static override toolId = \"SetRealityModelTransparencyTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(transparency: number, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const changed = changeRealityModelAppearanceOverrides(vp, { transparency }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to transparency: ${transparency}`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(parseFloat(args[0]), args.length > 1 ? parseInt(args[1], 10) : -1);\n }\n}\n/** Set reality model appearance override for locatable in display style.\n * @beta\n */\nexport class SetRealityModelLocateTool extends Tool {\n public static override toolId = \"SetRealityModelLocateTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(locate: boolean, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const nonLocatable = locate ? undefined : true;\n const changed = changeRealityModelAppearanceOverrides(vp, { nonLocatable }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to locate: ${locate}`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const locate = parseBoolean(args[0]);\n return locate === undefined ? false : this.run(locate, args.length > 1 ? parseInt(args[1], 10) : -1);\n }\n}\n\n/** Set reality model appearance override for emphasized in display style.\n * @beta\n */\nexport class SetRealityModelEmphasizedTool extends Tool {\n public static override toolId = \"SetRealityModelEmphasizedTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(emphasized: true | undefined, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const changed = changeRealityModelAppearanceOverrides(vp, { emphasized }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to emphasized: ${emphasized}`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const emphasized = parseBoolean(args[0]);\n return emphasized === undefined ? false : this.run(emphasized ? true : undefined, args.length > 1 ? parseInt(args[1], 10) : -1);\n }\n}\n\n/** Detach reality model from display style.\n * @beta\n */\nexport class DetachRealityModelTool extends Tool {\n public static override toolId = \"ViewportDetachRealityModel\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n if (index < 0) {\n vp.displayStyle.settings.contextRealityModels.models.forEach((model) => vp.displayStyle.settings.contextRealityModels.delete(model));\n return true;\n } else {\n const model = vp.displayStyle.settings.contextRealityModels.models[index];\n if (!model)\n return false;\n\n vp.displayStyle.settings.contextRealityModels.delete(model);\n return true;\n }\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args.length > 0 ? parseInt(args[0], 10) : -1);\n }\n}\n\n/** Set reality model appearance override for color in display style.\n * @beta\n */\nexport class SetRealityModelColorTool extends Tool {\n public static override toolId = \"SetRealityModelColorTool\";\n public static override get minArgs() { return 3; }\n public static override get maxArgs() { return 4; }\n\n public override async run(rgb: RgbColorProps, index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n const changed = changeRealityModelAppearanceOverrides(vp, { rgb }, index);\n\n if (changed)\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `${appearanceChangedString(index)} set to RGB color: (${rgb.r}, ${rgb.g}, ${rgb.b})`));\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run({ r: parseFloat(args[0]), g: parseFloat(args[1]), b: parseFloat(args[2]) }, args.length > 3 ? parseInt(args[3], 10) : -1);\n }\n}\n\n/** Clear reality model appearance override in display style.\n * @beta\n */\nexport class ClearRealityModelAppearanceOverrides extends Tool {\n public static override toolId = \"ClearRealityModelAppearanceOverrides\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(index: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (!vp)\n return false;\n\n const model = vp.displayStyle.settings.contextRealityModels.models[index];\n if (!model)\n return false;\n\n model.appearanceOverrides = undefined;\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n return this.run(args[0] === undefined ? -1 : parseInt(args[0], 10));\n }\n}\n\n/** Attach a cesium asset from the Ion ID and key.\n * @beta\n */\nexport class AttachCesiumAssetTool extends Tool {\n public static override toolId = \"AttachCesiumAssetTool\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n\n public override async run(assetId: number, requestKey: string): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n // attach using getCesiumAssetUrl\n const accessKey = requestKey ? requestKey : IModelApp.tileAdmin.cesiumIonKey ? IModelApp.tileAdmin.cesiumIonKey : \"\";\n const props = {\n tilesetUrl: getCesiumAssetUrl(\n assetId,\n accessKey,\n ),\n };\n // Alternative new way to attach using rdSourceKey\n // const rdSourceKey = RealityDataSource.createCesiumIonAssetKey(assetId, accessKey);\n // const props: ContextRealityModelProps = { rdSourceKey, tilesetUrl: getCesiumAssetUrl(assetId, accessKey) };\n\n vp.displayStyle.attachRealityModel(props);\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Cesium Asset #${assetId} attached`));\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const assetId = parseInt(args[0], 10);\n return Number.isNaN(assetId) ? false : this.run(assetId, args[1]);\n }\n}\n\n/** Turn on/off display of OpenStreetMap buildings\n * @beta\n */\nexport class ToggleOSMBuildingDisplay extends Tool {\n public static override toolId = \"SetBuildingDisplay\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n public override async run(onOff?: boolean, transparency?: number): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (vp === undefined)\n return false;\n\n if (onOff === undefined)\n onOff = undefined === vp.displayStyle.getOSMBuildingRealityModel(); // Toggle current state.\n\n const appearanceOverrides = (transparency !== undefined && transparency > 0 && transparency < 1) ? FeatureAppearance.fromJSON({ transparency }) : undefined;\n\n vp.displayStyle.setOSMBuildingDisplay({ onOff, appearanceOverrides });\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const toggle = parseToggle(args[0]);\n const transparency = args.length > 0 ? parseFloat(args[1]) : undefined;\n return typeof toggle === \"string\" ? false : this.run(toggle, transparency);\n }\n}\n"]}