@itwin/frontend-devtools 5.0.0-dev.8 → 5.0.0-dev.83

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 (226) hide show
  1. package/CHANGELOG.md +46 -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 +37 -25
  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.d.ts +1 -1
  17. package/lib/cjs/effects/Snow.d.ts.map +1 -1
  18. package/lib/cjs/effects/Snow.js +19 -8
  19. package/lib/cjs/effects/Snow.js.map +1 -1
  20. package/lib/cjs/effects/Vignette.js +12 -12
  21. package/lib/cjs/effects/Vignette.js.map +1 -1
  22. package/lib/cjs/tools/AnimationIntervalTool.js +1 -1
  23. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  24. package/lib/cjs/tools/ChangeUnitsTool.js +1 -1
  25. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  26. package/lib/cjs/tools/ClipTools.js +6 -8
  27. package/lib/cjs/tools/ClipTools.js.map +1 -1
  28. package/lib/cjs/tools/DisplayStyleTools.js +21 -25
  29. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  30. package/lib/cjs/tools/EmphasizeElementsTool.js +7 -13
  31. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  32. package/lib/cjs/tools/FrustumDecoration.js +28 -9
  33. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  34. package/lib/cjs/tools/InspectElementTool.js +7 -6
  35. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  36. package/lib/cjs/tools/MapLayerTool.js +24 -20
  37. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  38. package/lib/cjs/tools/MeasureTileLoadTime.js +4 -1
  39. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  40. package/lib/cjs/tools/ModelAppearanceTools.js +9 -9
  41. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  42. package/lib/cjs/tools/PlanProjectionTools.js +8 -15
  43. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  44. package/lib/cjs/tools/PlanarMaskTools.js +21 -26
  45. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  46. package/lib/cjs/tools/ProjectExtents.js +6 -3
  47. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  48. package/lib/cjs/tools/RealityModelTools.js +10 -10
  49. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  50. package/lib/cjs/tools/RealityTransitionTool.js +1 -1
  51. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  52. package/lib/cjs/tools/RenderSystemTools.js +4 -3
  53. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  54. package/lib/cjs/tools/RenderTargetTools.d.ts +1 -1
  55. package/lib/cjs/tools/RenderTargetTools.d.ts.map +1 -1
  56. package/lib/cjs/tools/RenderTargetTools.js +15 -20
  57. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  58. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +1 -1
  59. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  60. package/lib/cjs/tools/SavedViews.js +4 -7
  61. package/lib/cjs/tools/SavedViews.js.map +1 -1
  62. package/lib/cjs/tools/ScheduleScriptTools.d.ts.map +1 -1
  63. package/lib/cjs/tools/ScheduleScriptTools.js +11 -12
  64. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  65. package/lib/cjs/tools/SelectionTools.js +4 -6
  66. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  67. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +1 -1
  68. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  69. package/lib/cjs/tools/SourceAspectIdTools.js +2 -2
  70. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  71. package/lib/cjs/tools/TileRequestDecoration.js +6 -3
  72. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  73. package/lib/cjs/tools/TileTreeBoundsDecoration.d.ts.map +1 -1
  74. package/lib/cjs/tools/TileTreeBoundsDecoration.js +8 -4
  75. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  76. package/lib/cjs/tools/ToolTipProvider.js +2 -1
  77. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  78. package/lib/cjs/tools/ViewportTools.js +22 -19
  79. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  80. package/lib/cjs/widgets/DiagnosticsPanel.d.ts +1 -1
  81. package/lib/cjs/widgets/DiagnosticsPanel.d.ts.map +1 -1
  82. package/lib/cjs/widgets/DiagnosticsPanel.js +11 -1
  83. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  84. package/lib/cjs/widgets/FpsTracker.d.ts +1 -1
  85. package/lib/cjs/widgets/FpsTracker.d.ts.map +1 -1
  86. package/lib/cjs/widgets/FpsTracker.js +5 -1
  87. package/lib/cjs/widgets/FpsTracker.js.map +1 -1
  88. package/lib/cjs/widgets/GpuProfiler.d.ts +1 -1
  89. package/lib/cjs/widgets/GpuProfiler.d.ts.map +1 -1
  90. package/lib/cjs/widgets/GpuProfiler.js +89 -82
  91. package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
  92. package/lib/cjs/widgets/KeyinField.js +8 -1
  93. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  94. package/lib/cjs/widgets/MemoryTracker.d.ts +1 -1
  95. package/lib/cjs/widgets/MemoryTracker.d.ts.map +1 -1
  96. package/lib/cjs/widgets/MemoryTracker.js +16 -4
  97. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  98. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +1 -1
  99. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts.map +1 -1
  100. package/lib/cjs/widgets/RenderCommandBreakdown.js +6 -2
  101. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  102. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts +1 -1
  103. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts.map +1 -1
  104. package/lib/cjs/widgets/TileMemoryBreakdown.js +10 -8
  105. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  106. package/lib/cjs/widgets/TileStatisticsTracker.d.ts +1 -1
  107. package/lib/cjs/widgets/TileStatisticsTracker.d.ts.map +1 -1
  108. package/lib/cjs/widgets/TileStatisticsTracker.js +5 -2
  109. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  110. package/lib/cjs/widgets/ToolSettingsTracker.d.ts +1 -1
  111. package/lib/cjs/widgets/ToolSettingsTracker.d.ts.map +1 -1
  112. package/lib/cjs/widgets/ToolSettingsTracker.js +2 -2
  113. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  114. package/lib/esm/FrontEndDevTools.js +1 -1
  115. package/lib/esm/FrontEndDevTools.js.map +1 -1
  116. package/lib/esm/effects/Convolution.js +6 -6
  117. package/lib/esm/effects/Convolution.js.map +1 -1
  118. package/lib/esm/effects/EffectTools.js +2 -2
  119. package/lib/esm/effects/EffectTools.js.map +1 -1
  120. package/lib/esm/effects/Explosion.js +37 -25
  121. package/lib/esm/effects/Explosion.js.map +1 -1
  122. package/lib/esm/effects/FlipImage.js +2 -2
  123. package/lib/esm/effects/FlipImage.js.map +1 -1
  124. package/lib/esm/effects/LensDistortion.js +4 -4
  125. package/lib/esm/effects/LensDistortion.js.map +1 -1
  126. package/lib/esm/effects/Saturation.js +4 -4
  127. package/lib/esm/effects/Saturation.js.map +1 -1
  128. package/lib/esm/effects/Snow.d.ts +1 -1
  129. package/lib/esm/effects/Snow.d.ts.map +1 -1
  130. package/lib/esm/effects/Snow.js +19 -8
  131. package/lib/esm/effects/Snow.js.map +1 -1
  132. package/lib/esm/effects/Vignette.js +12 -12
  133. package/lib/esm/effects/Vignette.js.map +1 -1
  134. package/lib/esm/tools/AnimationIntervalTool.js +1 -1
  135. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  136. package/lib/esm/tools/ChangeUnitsTool.js +1 -1
  137. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  138. package/lib/esm/tools/ClipTools.js +6 -8
  139. package/lib/esm/tools/ClipTools.js.map +1 -1
  140. package/lib/esm/tools/DisplayStyleTools.js +21 -25
  141. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  142. package/lib/esm/tools/EmphasizeElementsTool.js +7 -13
  143. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  144. package/lib/esm/tools/FrustumDecoration.js +28 -9
  145. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  146. package/lib/esm/tools/InspectElementTool.js +7 -6
  147. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  148. package/lib/esm/tools/MapLayerTool.js +24 -20
  149. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  150. package/lib/esm/tools/MeasureTileLoadTime.js +4 -1
  151. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  152. package/lib/esm/tools/ModelAppearanceTools.js +9 -9
  153. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  154. package/lib/esm/tools/PlanProjectionTools.js +8 -15
  155. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  156. package/lib/esm/tools/PlanarMaskTools.js +21 -26
  157. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  158. package/lib/esm/tools/ProjectExtents.js +6 -3
  159. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  160. package/lib/esm/tools/RealityModelTools.js +10 -10
  161. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  162. package/lib/esm/tools/RealityTransitionTool.js +1 -1
  163. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  164. package/lib/esm/tools/RenderSystemTools.js +4 -3
  165. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  166. package/lib/esm/tools/RenderTargetTools.d.ts +1 -1
  167. package/lib/esm/tools/RenderTargetTools.d.ts.map +1 -1
  168. package/lib/esm/tools/RenderTargetTools.js +15 -20
  169. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  170. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +1 -1
  171. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  172. package/lib/esm/tools/SavedViews.js +4 -7
  173. package/lib/esm/tools/SavedViews.js.map +1 -1
  174. package/lib/esm/tools/ScheduleScriptTools.d.ts.map +1 -1
  175. package/lib/esm/tools/ScheduleScriptTools.js +11 -12
  176. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  177. package/lib/esm/tools/SelectionTools.js +4 -6
  178. package/lib/esm/tools/SelectionTools.js.map +1 -1
  179. package/lib/esm/tools/SetGpuMemoryLimitTool.js +1 -1
  180. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  181. package/lib/esm/tools/SourceAspectIdTools.js +2 -2
  182. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  183. package/lib/esm/tools/TileRequestDecoration.js +6 -3
  184. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  185. package/lib/esm/tools/TileTreeBoundsDecoration.d.ts.map +1 -1
  186. package/lib/esm/tools/TileTreeBoundsDecoration.js +8 -4
  187. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  188. package/lib/esm/tools/ToolTipProvider.js +2 -1
  189. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  190. package/lib/esm/tools/ViewportTools.js +22 -19
  191. package/lib/esm/tools/ViewportTools.js.map +1 -1
  192. package/lib/esm/widgets/DiagnosticsPanel.d.ts +1 -1
  193. package/lib/esm/widgets/DiagnosticsPanel.d.ts.map +1 -1
  194. package/lib/esm/widgets/DiagnosticsPanel.js +11 -1
  195. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  196. package/lib/esm/widgets/FpsTracker.d.ts +1 -1
  197. package/lib/esm/widgets/FpsTracker.d.ts.map +1 -1
  198. package/lib/esm/widgets/FpsTracker.js +5 -1
  199. package/lib/esm/widgets/FpsTracker.js.map +1 -1
  200. package/lib/esm/widgets/GpuProfiler.d.ts +1 -1
  201. package/lib/esm/widgets/GpuProfiler.d.ts.map +1 -1
  202. package/lib/esm/widgets/GpuProfiler.js +89 -82
  203. package/lib/esm/widgets/GpuProfiler.js.map +1 -1
  204. package/lib/esm/widgets/KeyinField.js +8 -1
  205. package/lib/esm/widgets/KeyinField.js.map +1 -1
  206. package/lib/esm/widgets/MemoryTracker.d.ts +1 -1
  207. package/lib/esm/widgets/MemoryTracker.d.ts.map +1 -1
  208. package/lib/esm/widgets/MemoryTracker.js +16 -4
  209. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  210. package/lib/esm/widgets/RenderCommandBreakdown.d.ts +1 -1
  211. package/lib/esm/widgets/RenderCommandBreakdown.d.ts.map +1 -1
  212. package/lib/esm/widgets/RenderCommandBreakdown.js +6 -2
  213. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  214. package/lib/esm/widgets/TileMemoryBreakdown.d.ts +1 -1
  215. package/lib/esm/widgets/TileMemoryBreakdown.d.ts.map +1 -1
  216. package/lib/esm/widgets/TileMemoryBreakdown.js +10 -8
  217. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  218. package/lib/esm/widgets/TileStatisticsTracker.d.ts +1 -1
  219. package/lib/esm/widgets/TileStatisticsTracker.d.ts.map +1 -1
  220. package/lib/esm/widgets/TileStatisticsTracker.js +5 -2
  221. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  222. package/lib/esm/widgets/ToolSettingsTracker.d.ts +1 -1
  223. package/lib/esm/widgets/ToolSettingsTracker.d.ts.map +1 -1
  224. package/lib/esm/widgets/ToolSettingsTracker.js +2 -2
  225. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  226. package/package.json +10 -10
@@ -21,11 +21,11 @@ var TileMemorySelector;
21
21
  TileMemorySelector[TileMemorySelector["Count"] = 5] = "Count";
22
22
  })(TileMemorySelector || (TileMemorySelector = {}));
23
23
  class TileMemoryTracer {
24
+ _stats = new core_frontend_1.RenderMemory.Statistics();
25
+ _processedTiles = new Set();
26
+ counters = [];
27
+ numSelected = 0;
24
28
  constructor() {
25
- this._stats = new core_frontend_1.RenderMemory.Statistics();
26
- this._processedTiles = new Set();
27
- this.counters = [];
28
- this.numSelected = 0;
29
29
  for (let i = 0; i < TileMemorySelector.Count; i++)
30
30
  this.counters.push({ numTiles: 0, bytesUsed: 0 });
31
31
  }
@@ -117,11 +117,13 @@ function format(count, label, bytesUsed) {
117
117
  * @beta
118
118
  */
119
119
  class TileMemoryBreakdown {
120
+ _tracer = new TileMemoryTracer();
121
+ _div;
122
+ _curIntervalId;
123
+ _statsElements = [];
124
+ _totalsElements = [];
120
125
  /** Construct a new breakdown widget as a child of the specified parent element. */
121
126
  constructor(parent) {
122
- this._tracer = new TileMemoryTracer();
123
- this._statsElements = [];
124
- this._totalsElements = [];
125
127
  (0, CheckBox_1.createCheckBox)({
126
128
  parent,
127
129
  name: "Tile Memory Breakdown",
@@ -157,7 +159,7 @@ class TileMemoryBreakdown {
157
159
  leftCell.appendChild(div);
158
160
  }
159
161
  }
160
- dispose() {
162
+ [Symbol.dispose]() {
161
163
  this.clearInterval();
162
164
  }
163
165
  toggle() {
@@ -1 +1 @@
1
- {"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.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/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { formatMemory } from \"./MemoryTracker\";\n\ninterface TileMemoryCounter {\n numTiles: number;\n bytesUsed: number;\n}\n\nenum TileMemorySelector {\n Selected, // Tiles selected for display by at least one viewport.\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\n Total, // Total of all the above\n Count,\n}\n\nclass TileMemoryTracer {\n private readonly _stats = new RenderMemory.Statistics();\n private readonly _processedTiles = new Set<Tile>();\n public readonly counters: TileMemoryCounter[] = [];\n public numSelected = 0;\n\n public constructor() {\n for (let i = 0; i < TileMemorySelector.Count; i++)\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\n }\n\n public update(): void {\n this.reset();\n\n const imodels = new Set<IModelConnection>();\n const selectedTiles = new Set<Tile>();\n for (const vp of IModelApp.viewManager) {\n imodels.add(vp.iModel);\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\n if (tiles)\n for (const tile of tiles)\n selectedTiles.add(tile);\n }\n\n for (const selected of selectedTiles)\n this.add(selected, TileMemorySelector.Selected);\n\n for (const selected of selectedTiles) {\n this.processParent(selected.parent);\n this.processChildren(selected.children);\n }\n\n for (const imodel of imodels) {\n imodel.tiles.forEachTreeOwner((owner) => {\n const tree = owner.tileTree;\n if (tree)\n this.processOrphan(tree.rootTile);\n });\n }\n\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\n }\n\n private reset(): void {\n this._processedTiles.clear();\n this.numSelected = 0;\n for (const counter of this.counters)\n counter.numTiles = counter.bytesUsed = 0;\n }\n\n private add(tile: Tile, selector: TileMemorySelector): void {\n this._processedTiles.add(tile);\n this._stats.clear();\n tile.collectStatistics(this._stats, false);\n\n const bytesUsed = this._stats.totalBytes;\n if (bytesUsed > 0) {\n const counter = this.counters[selector];\n ++counter.numTiles;\n counter.bytesUsed += bytesUsed;\n }\n }\n\n private processParent(parent: Tile | undefined): void {\n if (parent && !this._processedTiles.has(parent)) {\n this.add(parent, TileMemorySelector.Ancestors);\n this.processParent(parent.parent);\n }\n }\n\n private processChildren(children: Tile[] | undefined): void {\n if (!children)\n return;\n\n for (const child of children) {\n if (!this._processedTiles.has(child)) {\n this.add(child, TileMemorySelector.Descendants);\n this.processChildren(child.children);\n }\n }\n }\n\n private processOrphan(tile: Tile): void {\n if (!this._processedTiles.has(tile))\n this.add(tile, TileMemorySelector.Orphaned);\n\n const children = tile.children;\n if (children)\n for (const child of children)\n this.processOrphan(child);\n }\n}\n\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\n\nfunction format(count: number, label: string, bytesUsed: number): string {\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\n}\n\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\n * The left-hand pane obtains its information from [TileAdmin]($frontend), displaying the number of selected and unselected tiles that are consuming graphics memory along with the amount of memory consumed.\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\n * - \"Total\" - totals of the above categories.\n *\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\n * The widget includes a checkbox to toggle tracking and display of these statistics.\n * @beta\n */\nexport class TileMemoryBreakdown {\n private readonly _tracer = new TileMemoryTracer();\n private readonly _div: HTMLDivElement;\n private _curIntervalId?: number;\n private readonly _statsElements: HTMLElement[] = [];\n private readonly _totalsElements: HTMLElement[] = [];\n\n /** Construct a new breakdown widget as a child of the specified parent element. */\n public constructor(parent: HTMLElement) {\n createCheckBox({\n parent,\n name: \"Tile Memory Breakdown\",\n id: \"tileMemoryBreakdown\",\n handler: (_cb) => this.toggle(),\n });\n\n parent.appendChild(this._div = document.createElement(\"div\"));\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const leftCell = document.createElement(\"td\");\n const rightCell = document.createElement(\"td\");\n leftCell.style.width = rightCell.style.width = \"50%\";\n row.appendChild(leftCell);\n row.appendChild(rightCell);\n table.appendChild(row);\n\n for (let i = 0; i < TileMemorySelector.Count; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statsElements.push(elem);\n div.appendChild(elem);\n rightCell.appendChild(div);\n }\n\n for (let i = 0; i < 3; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._totalsElements.push(elem);\n div.appendChild(elem);\n leftCell.appendChild(div);\n }\n }\n\n public dispose(): void {\n this.clearInterval();\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private update(): void {\n this._tracer.update();\n for (let i = 0; i < this._statsElements.length; i++) {\n const counter = this._tracer.counters[i];\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\n }\n\n let numUnselected = 0;\n let unselectedBytes = 0;\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\n ++numUnselected;\n unselectedBytes += unselected.bytesUsed;\n }\n\n let numSelected = 0;\n let selectedBytes = 0;\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\n ++numSelected;\n selectedBytes += selected.bytesUsed;\n }\n\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\n }\n}\n"]}
1
+ {"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.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/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { formatMemory } from \"./MemoryTracker\";\n\ninterface TileMemoryCounter {\n numTiles: number;\n bytesUsed: number;\n}\n\nenum TileMemorySelector {\n Selected, // Tiles selected for display by at least one viewport.\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\n Total, // Total of all the above\n Count,\n}\n\nclass TileMemoryTracer {\n private readonly _stats = new RenderMemory.Statistics();\n private readonly _processedTiles = new Set<Tile>();\n public readonly counters: TileMemoryCounter[] = [];\n public numSelected = 0;\n\n public constructor() {\n for (let i = 0; i < TileMemorySelector.Count; i++)\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\n }\n\n public update(): void {\n this.reset();\n\n const imodels = new Set<IModelConnection>();\n const selectedTiles = new Set<Tile>();\n for (const vp of IModelApp.viewManager) {\n imodels.add(vp.iModel);\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\n if (tiles)\n for (const tile of tiles)\n selectedTiles.add(tile);\n }\n\n for (const selected of selectedTiles)\n this.add(selected, TileMemorySelector.Selected);\n\n for (const selected of selectedTiles) {\n this.processParent(selected.parent);\n this.processChildren(selected.children);\n }\n\n for (const imodel of imodels) {\n imodel.tiles.forEachTreeOwner((owner) => {\n const tree = owner.tileTree;\n if (tree)\n this.processOrphan(tree.rootTile);\n });\n }\n\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\n }\n\n private reset(): void {\n this._processedTiles.clear();\n this.numSelected = 0;\n for (const counter of this.counters)\n counter.numTiles = counter.bytesUsed = 0;\n }\n\n private add(tile: Tile, selector: TileMemorySelector): void {\n this._processedTiles.add(tile);\n this._stats.clear();\n tile.collectStatistics(this._stats, false);\n\n const bytesUsed = this._stats.totalBytes;\n if (bytesUsed > 0) {\n const counter = this.counters[selector];\n ++counter.numTiles;\n counter.bytesUsed += bytesUsed;\n }\n }\n\n private processParent(parent: Tile | undefined): void {\n if (parent && !this._processedTiles.has(parent)) {\n this.add(parent, TileMemorySelector.Ancestors);\n this.processParent(parent.parent);\n }\n }\n\n private processChildren(children: Tile[] | undefined): void {\n if (!children)\n return;\n\n for (const child of children) {\n if (!this._processedTiles.has(child)) {\n this.add(child, TileMemorySelector.Descendants);\n this.processChildren(child.children);\n }\n }\n }\n\n private processOrphan(tile: Tile): void {\n if (!this._processedTiles.has(tile))\n this.add(tile, TileMemorySelector.Orphaned);\n\n const children = tile.children;\n if (children)\n for (const child of children)\n this.processOrphan(child);\n }\n}\n\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\n\nfunction format(count: number, label: string, bytesUsed: number): string {\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\n}\n\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\n * The left-hand pane obtains its information from [TileAdmin]($frontend), displaying the number of selected and unselected tiles that are consuming graphics memory along with the amount of memory consumed.\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\n * - \"Total\" - totals of the above categories.\n *\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\n * The widget includes a checkbox to toggle tracking and display of these statistics.\n * @beta\n */\nexport class TileMemoryBreakdown {\n private readonly _tracer = new TileMemoryTracer();\n private readonly _div: HTMLDivElement;\n private _curIntervalId?: number;\n private readonly _statsElements: HTMLElement[] = [];\n private readonly _totalsElements: HTMLElement[] = [];\n\n /** Construct a new breakdown widget as a child of the specified parent element. */\n public constructor(parent: HTMLElement) {\n createCheckBox({\n parent,\n name: \"Tile Memory Breakdown\",\n id: \"tileMemoryBreakdown\",\n handler: (_cb) => this.toggle(),\n });\n\n parent.appendChild(this._div = document.createElement(\"div\"));\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const leftCell = document.createElement(\"td\");\n const rightCell = document.createElement(\"td\");\n leftCell.style.width = rightCell.style.width = \"50%\";\n row.appendChild(leftCell);\n row.appendChild(rightCell);\n table.appendChild(row);\n\n for (let i = 0; i < TileMemorySelector.Count; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statsElements.push(elem);\n div.appendChild(elem);\n rightCell.appendChild(div);\n }\n\n for (let i = 0; i < 3; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._totalsElements.push(elem);\n div.appendChild(elem);\n leftCell.appendChild(div);\n }\n }\n\n public [Symbol.dispose](): void {\n this.clearInterval();\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private update(): void {\n this._tracer.update();\n for (let i = 0; i < this._statsElements.length; i++) {\n const counter = this._tracer.counters[i];\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\n }\n\n let numUnselected = 0;\n let unselectedBytes = 0;\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\n ++numUnselected;\n unselectedBytes += unselected.bytesUsed;\n }\n\n let numSelected = 0;\n let selectedBytes = 0;\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\n ++numSelected;\n selectedBytes += selected.bytesUsed;\n }\n\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\n }\n}\n"]}
@@ -11,7 +11,7 @@ export declare class TileStatisticsTracker {
11
11
  private readonly _vp;
12
12
  private _curIntervalId?;
13
13
  constructor(parent: HTMLElement, vp: Viewport);
14
- dispose(): void;
14
+ [Symbol.dispose](): void;
15
15
  private addMaxActive;
16
16
  private updateMaxActive;
17
17
  private clearInterval;
@@ -1 +1 @@
1
- {"version":3,"file":"TileStatisticsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAwB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA0CtE;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAS;gBAEb,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ;IAgD7C,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,KAAK;CAId"}
1
+ {"version":3,"file":"TileStatisticsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAwB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA0CtE;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAS;gBAEb,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ;IAgD7C,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAI/B,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,KAAK;CAId"}
@@ -44,8 +44,11 @@ const indexOfFirstGlobalStatistic = 7; // "Completed"
44
44
  * @beta
45
45
  */
46
46
  class TileStatisticsTracker {
47
+ _statElements = [];
48
+ _div;
49
+ _vp;
50
+ _curIntervalId;
47
51
  constructor(parent, vp) {
48
- this._statElements = [];
49
52
  this._vp = vp;
50
53
  this.addMaxActive(parent);
51
54
  (0, CheckBox_1.createCheckBox)({
@@ -85,7 +88,7 @@ class TileStatisticsTracker {
85
88
  resetButton.div.style.textAlign = "center";
86
89
  parent.appendChild(this._div);
87
90
  }
88
- dispose() {
91
+ [Symbol.dispose]() {
89
92
  this.clearInterval();
90
93
  }
91
94
  addMaxActive(parent) {
@@ -1 +1 @@
1
- {"version":3,"file":"TileStatisticsTracker.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.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 Widgets\n */\n\nimport { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\nimport { createButton } from \"../ui/Button\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNumericInput } from \"../ui/NumericInput\";\n\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\ninterface StatEntry {\n label: string;\n getValue: GetStatValue;\n}\n\nfunction computeProgress(vp: Viewport): number {\n const ready = vp.numReadyTiles;\n const requested = vp.numRequestedTiles;\n const total = ready + requested;\n const ratio = (total > 0) ? (ready / total) : 1.0;\n return Math.round(ratio * 100);\n}\n\nconst statEntries: StatEntry[] = [\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\n { getValue: (stats) => Math.round(stats.decoding.mean), label: \"Decoding mean time (ms)\" },\n { getValue: (stats) => stats.decoding.max, label: \"Decoding max time (ms)\" },\n];\n\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\n\n/** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.\n * @beta\n */\nexport class TileStatisticsTracker {\n private readonly _statElements: HTMLElement[] = [];\n private readonly _div: HTMLDivElement;\n private readonly _vp: Viewport;\n private _curIntervalId?: number;\n\n public constructor(parent: HTMLElement, vp: Viewport) {\n this._vp = vp;\n this.addMaxActive(parent);\n createCheckBox({\n parent,\n name: \"Track Tile Requests\",\n id: \"stats_trackMemory\",\n handler: (_cb) => this.toggle(),\n });\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const frameColumn = document.createElement(\"td\");\n const globalColumn = document.createElement(\"td\");\n frameColumn.style.width = globalColumn.style.width = \"50%\";\n row.appendChild(frameColumn);\n row.appendChild(globalColumn);\n table.appendChild(row);\n\n for (let i = 0; i < statEntries.length; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statElements[i] = elem;\n div.appendChild(elem);\n\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\n column.appendChild(div);\n }\n\n const resetButton = createButton({\n parent: this._div,\n value: \"Reset\",\n tooltip: \"Reset all cumulative statistics\",\n handler: () => this.reset(),\n });\n resetButton.div.style.textAlign = \"center\";\n\n parent.appendChild(this._div);\n }\n\n public dispose(): void {\n this.clearInterval();\n }\n\n private addMaxActive(parent: HTMLElement): void {\n const div = document.createElement(\"div\");\n\n const label = document.createElement(\"label\");\n label.style.display = \"inline\";\n label.htmlFor = \"maxActiveRequests\";\n label.innerText = \"Max Active Requests: \";\n div.appendChild(label);\n\n createNumericInput({\n parent: div,\n id: \"maxActiveRequests\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\n handler: (value, _input) => this.updateMaxActive(value),\n });\n\n parent.appendChild(div);\n }\n\n private updateMaxActive(value: number): void {\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n // Currently on - turn off.\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n // Currently off - turn on.\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private update(): void {\n const stats = IModelApp.tileAdmin.statistics;\n for (let i = 0; i < statEntries.length; i++) {\n const stat = statEntries[i];\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\n this._statElements[i].innerText = label;\n }\n }\n\n private reset(): void {\n IModelApp.tileAdmin.resetStatistics();\n this.update();\n }\n}\n"]}
1
+ {"version":3,"file":"TileStatisticsTracker.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.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 Widgets\n */\n\nimport { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\nimport { createButton } from \"../ui/Button\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNumericInput } from \"../ui/NumericInput\";\n\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\ninterface StatEntry {\n label: string;\n getValue: GetStatValue;\n}\n\nfunction computeProgress(vp: Viewport): number {\n const ready = vp.numReadyTiles;\n const requested = vp.numRequestedTiles;\n const total = ready + requested;\n const ratio = (total > 0) ? (ready / total) : 1.0;\n return Math.round(ratio * 100);\n}\n\nconst statEntries: StatEntry[] = [\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\n { getValue: (stats) => Math.round(stats.decoding.mean), label: \"Decoding mean time (ms)\" },\n { getValue: (stats) => stats.decoding.max, label: \"Decoding max time (ms)\" },\n];\n\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\n\n/** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.\n * @beta\n */\nexport class TileStatisticsTracker {\n private readonly _statElements: HTMLElement[] = [];\n private readonly _div: HTMLDivElement;\n private readonly _vp: Viewport;\n private _curIntervalId?: number;\n\n public constructor(parent: HTMLElement, vp: Viewport) {\n this._vp = vp;\n this.addMaxActive(parent);\n createCheckBox({\n parent,\n name: \"Track Tile Requests\",\n id: \"stats_trackMemory\",\n handler: (_cb) => this.toggle(),\n });\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const frameColumn = document.createElement(\"td\");\n const globalColumn = document.createElement(\"td\");\n frameColumn.style.width = globalColumn.style.width = \"50%\";\n row.appendChild(frameColumn);\n row.appendChild(globalColumn);\n table.appendChild(row);\n\n for (let i = 0; i < statEntries.length; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statElements[i] = elem;\n div.appendChild(elem);\n\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\n column.appendChild(div);\n }\n\n const resetButton = createButton({\n parent: this._div,\n value: \"Reset\",\n tooltip: \"Reset all cumulative statistics\",\n handler: () => this.reset(),\n });\n resetButton.div.style.textAlign = \"center\";\n\n parent.appendChild(this._div);\n }\n\n public [Symbol.dispose](): void {\n this.clearInterval();\n }\n\n private addMaxActive(parent: HTMLElement): void {\n const div = document.createElement(\"div\");\n\n const label = document.createElement(\"label\");\n label.style.display = \"inline\";\n label.htmlFor = \"maxActiveRequests\";\n label.innerText = \"Max Active Requests: \";\n div.appendChild(label);\n\n createNumericInput({\n parent: div,\n id: \"maxActiveRequests\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\n handler: (value, _input) => this.updateMaxActive(value),\n });\n\n parent.appendChild(div);\n }\n\n private updateMaxActive(value: number): void {\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n // Currently on - turn off.\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n // Currently off - turn on.\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private update(): void {\n const stats = IModelApp.tileAdmin.statistics;\n for (let i = 0; i < statEntries.length; i++) {\n const stat = statEntries[i];\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\n this._statElements[i].innerText = label;\n }\n }\n\n private reset(): void {\n IModelApp.tileAdmin.resetStatistics();\n this.update();\n }\n}\n"]}
@@ -5,6 +5,6 @@ import { Viewport } from "@itwin/core-frontend";
5
5
  export declare class ToolSettingsTracker {
6
6
  private static _expandToolSettings;
7
7
  constructor(parent: HTMLElement, _vp: Viewport);
8
- dispose(): void;
8
+ [Symbol.dispose](): void;
9
9
  }
10
10
  //# sourceMappingURL=ToolSettingsTracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolSettingsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKzF;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAS;gBAExB,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ;IAwM9C,OAAO,IAAI,IAAI;CACvB"}
1
+ {"version":3,"file":"ToolSettingsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKzF;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAS;gBAExB,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ;IAwM9C,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAChC"}
@@ -17,6 +17,7 @@ const NumericInput_1 = require("../ui/NumericInput");
17
17
  * @alpha
18
18
  */
19
19
  class ToolSettingsTracker {
20
+ static _expandToolSettings = false;
20
21
  constructor(parent, _vp) {
21
22
  const settingsDiv = document.createElement("div");
22
23
  settingsDiv.style.display = "block";
@@ -205,8 +206,7 @@ class ToolSettingsTracker {
205
206
  name: "Inertial duration (seconds): ",
206
207
  });
207
208
  }
208
- dispose() { }
209
+ [Symbol.dispose]() { }
209
210
  }
210
211
  exports.ToolSettingsTracker = ToolSettingsTracker;
211
- ToolSettingsTracker._expandToolSettings = false;
212
212
  //# sourceMappingURL=ToolSettingsTracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolSettingsTracker.js","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAiD;AACjD,wDAAyF;AACzF,6CAAgD;AAChD,iDAAoD;AACpD,qDAAmF;AAEnF;;GAEG;AACH,MAAa,mBAAmB;IAG9B,YAAmB,MAAmB,EAAE,GAAa;QACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAErC,IAAA,6BAAgB,EAAC;YACf,KAAK,EAAE,eAAe;YACtB,MAAM;YACN,MAAM,EAAE,mBAAmB,CAAC,mBAAmB;YAC/C,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,mBAAmB,CAAC,mBAAmB,GAAG,QAAQ;YACzE,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QAEH,IAAI,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,IAAA,yBAAc,EAAC;YACb,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,iCAAiC;YACvC,EAAE,EAAE,oBAAoB;YACxB,SAAS,EAAE,4BAAY,CAAC,eAAe;YACvC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,4BAAY,CAAC,eAAe,GAAG,CAAC,4BAAY,CAAC,eAAe,CAAC;gBAC7D,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,mGAAmG;QACnG,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvF,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,IAAI,KAAK,GAAG,yBAAS,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,2BAA2B,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACxG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC;QACnC,IAAA,iCAAkB,EAAC;YACjB,MAAM,EAAE,GAAG;YACX,EAAE,EAAE,kBAAkB;YACtB,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,8BAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY;YACxD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,8BAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,yBAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1E,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,KAAK,GAAG,yBAAS,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,6BAA6B,CAAC;QAC9C,KAAK,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAC3C,IAAA,iCAAkB,EAAC;YACjB,MAAM,EAAE,GAAG;YACX,EAAE,EAAE,6BAA6B;YACjC,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,4BAAY,CAAC,wBAAwB;YAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,4BAAY,CAAC,wBAAwB,GAAG,KAAK,CAAC;gBAC9C,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,EAAE,IAAI,CAAC,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,IAAA,yBAAc,EAAC;YACb,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,mBAAmB;YACzB,EAAE,EAAE,mBAAmB;YACvB,SAAS,EAAE,4BAAY,CAAC,cAAc;YACtC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,4BAAY,CAAC,cAAc,GAAG,CAAC,4BAAY,CAAC,cAAc,CAAC;gBAC3D,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,KAAK,GAAG,yBAAS,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,+BAA+B,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACxG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,oBAAoB,CAAC;QACrC,IAAA,iCAAkB,EAAC;YACjB,MAAM,EAAE,GAAG;YACX,EAAE,EAAE,oBAAoB;YACxB,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,4BAAY,CAAC,eAAe,CAAC,OAAO;YAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,4BAAY,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC/C,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,EAAE,IAAI,CAAC,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,KAAK,GAAG,yBAAS,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qCAAqC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9G,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC;QAClC,IAAA,iCAAkB,EAAC;YACjB,MAAM,EAAE,GAAG;YACX,EAAE,EAAE,iBAAiB;YACrB,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,4BAAY,CAAC,YAAY;YAChC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,4BAAY,CAAC,YAAY,GAAG,KAAK,CAAC;gBAClC,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,EAAE,IAAI,CAAC,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,KAAK,GAAG,yBAAS,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qCAAqC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9G,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,0BAA0B,CAAC;QAC3C,IAAA,iCAAkB,EAAC;YACjB,MAAM,EAAE,GAAG;YACX,EAAE,EAAE,0BAA0B;YAC9B,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,4BAAY,CAAC,qBAAqB;YACzC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,4BAAY,CAAC,qBAAqB,GAAG,KAAK,CAAC;gBAC3C,mEAAmE;gBACnE,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,EAAE,IAAI,CAAC,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,GAAG,GAAG,yBAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,KAAK,GAAG,yBAAS,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7F,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,KAAK,CAAC,OAAO,GAAG,mBAAmB,CAAC;QACpC,IAAA,iCAAkB,EAAC;YACjB,MAAM,EAAE,GAAG;YACX,EAAE,EAAE,mBAAmB;YACvB,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,4BAAY,CAAC,cAAc;YAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC/B,4BAAY,CAAC,cAAc,GAAG,KAAK,CAAC;gBACpC,OAAO,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5C,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,EAAE,IAAI,CAAC,CAAC;QACT,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAE7B,IAAA,wCAAyB,EAAC;YACxB,EAAE,EAAE,oBAAoB;YACxB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,4BAAY,CAAC,cAAc,CAAC,OAAO;YAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC1B,4BAAY,CAAC,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC5C,OAAO,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5C,CAAC;YACD,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;QACH,IAAA,wCAAyB,EAAC;YACxB,EAAE,EAAE,qBAAqB;YACzB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,4BAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI;YAC/D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC1B,4BAAY,CAAC,cAAc,CAAC,QAAQ,GAAG,yBAAU,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;gBACjF,OAAO,yBAAS,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5C,CAAC;YACD,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,GAAG;YACT,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,+BAA+B;SACtC,CAAC,CAAC;IACL,CAAC;IAEM,OAAO,KAAW,CAAC;;AA3M5B,kDA4MC;AA3MgB,uCAAmB,GAAG,KAAK,CAAC","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 Widgets\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { IModelApp, ScreenViewport, ToolSettings, Viewport } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNestedMenu } from \"../ui/NestedMenu\";\nimport { createLabeledNumericInput, createNumericInput } from \"../ui/NumericInput\";\n\n/** Allows the global settings controlling the behavior of viewing tools to be customized.\n * @alpha\n */\nexport class ToolSettingsTracker {\n private static _expandToolSettings = false;\n\n public constructor(parent: HTMLElement, _vp: Viewport) {\n const settingsDiv = document.createElement(\"div\");\n settingsDiv.style.display = \"block\";\n settingsDiv.style.textAlign = \"left\";\n\n createNestedMenu({\n label: \"Tool Settings\",\n parent,\n expand: ToolSettingsTracker._expandToolSettings,\n handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded,\n body: settingsDiv,\n });\n\n let div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n createCheckBox({\n parent: div,\n name: \"Preserve World Up When Rotating\",\n id: \"ts_preserveWorldUp\",\n isChecked: ToolSettings.preserveWorldUp,\n handler: (_cb) => {\n ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.textAlign = \"left\";\n\n // We use a static so the expand/collapse state persists after closing and reopening the drop-down.\n settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? \"block\" : \"none\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n let label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Animation Duration (ms): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_animationTime\";\n createNumericInput({\n parent: div,\n id: \"ts_animationTime\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: ScreenViewport.animation.time.normal.milliseconds,\n handler: (value, _input) => {\n ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Pick Radius (inches): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_viewToolPickRadiusInches\";\n label.innerText = \"Pick Radius (inches): \";\n createNumericInput({\n parent: div,\n id: \"ts_viewToolPickRadiusInches\",\n display: \"inline\",\n min: 0,\n step: 0.01,\n value: ToolSettings.viewToolPickRadiusInches,\n handler: (value, _input) => {\n ToolSettings.viewToolPickRadiusInches = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n createCheckBox({\n parent: div,\n name: \"Walk Enforce Z Up\",\n id: \"ts_walkEnforceZUp\",\n isChecked: ToolSettings.walkEnforceZUp,\n handler: (_cb) => {\n ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Camera Angle (degrees): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_walkCameraAngle\";\n createNumericInput({\n parent: div,\n id: \"ts_walkCameraAngle\",\n display: \"inline\",\n min: 0,\n step: 0.1,\n value: ToolSettings.walkCameraAngle.degrees,\n handler: (value, _input) => {\n ToolSettings.walkCameraAngle.setDegrees(value);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Velocity (meters per second): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_walkVelocity\";\n createNumericInput({\n parent: div,\n id: \"ts_walkVelocity\",\n display: \"inline\",\n min: 0,\n step: 0.1,\n value: ToolSettings.walkVelocity,\n handler: (value, _input) => {\n ToolSettings.walkVelocity = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Bump Distance (meters): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_wheelZoomBumpDistance\";\n createNumericInput({\n parent: div,\n id: \"ts_wheelZoomBumpDistance\",\n display: \"inline\",\n min: 0,\n step: 0.025,\n value: ToolSettings.wheelZoomBumpDistance,\n handler: (value, _input) => {\n ToolSettings.wheelZoomBumpDistance = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Ratio: \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_wheelZoomRatio\";\n createNumericInput({\n parent: div,\n id: \"ts_wheelZoomRatio\",\n display: \"inline\",\n min: 1.0,\n step: 0.025,\n value: ToolSettings.wheelZoomRatio,\n handler: async (value, _input) => {\n ToolSettings.wheelZoomRatio = value;\n return IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n createLabeledNumericInput({\n id: \"num_inertiaDamping\",\n parent: settingsDiv,\n value: ToolSettings.viewingInertia.damping,\n handler: async (value, _) => {\n ToolSettings.viewingInertia.damping = value;\n return IModelApp.toolAdmin.exitViewTool();\n },\n min: 0,\n max: 1,\n step: 0.05,\n parseAsFloat: true,\n name: \"Inertial damping: \",\n });\n createLabeledNumericInput({\n id: \"num_inertiaDuration\",\n parent: settingsDiv,\n value: ToolSettings.viewingInertia.duration.milliseconds / 1000,\n handler: async (value, _) => {\n ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000);\n return IModelApp.toolAdmin.exitViewTool();\n },\n min: 0,\n max: 10,\n step: 0.5,\n parseAsFloat: true,\n name: \"Inertial duration (seconds): \",\n });\n }\n\n public dispose(): void { }\n}\n"]}
1
+ {"version":3,"file":"ToolSettingsTracker.js","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.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 Widgets\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { IModelApp, ScreenViewport, ToolSettings, Viewport } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNestedMenu } from \"../ui/NestedMenu\";\nimport { createLabeledNumericInput, createNumericInput } from \"../ui/NumericInput\";\n\n/** Allows the global settings controlling the behavior of viewing tools to be customized.\n * @alpha\n */\nexport class ToolSettingsTracker {\n private static _expandToolSettings = false;\n\n public constructor(parent: HTMLElement, _vp: Viewport) {\n const settingsDiv = document.createElement(\"div\");\n settingsDiv.style.display = \"block\";\n settingsDiv.style.textAlign = \"left\";\n\n createNestedMenu({\n label: \"Tool Settings\",\n parent,\n expand: ToolSettingsTracker._expandToolSettings,\n handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded,\n body: settingsDiv,\n });\n\n let div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n createCheckBox({\n parent: div,\n name: \"Preserve World Up When Rotating\",\n id: \"ts_preserveWorldUp\",\n isChecked: ToolSettings.preserveWorldUp,\n handler: (_cb) => {\n ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.textAlign = \"left\";\n\n // We use a static so the expand/collapse state persists after closing and reopening the drop-down.\n settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? \"block\" : \"none\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n let label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Animation Duration (ms): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_animationTime\";\n createNumericInput({\n parent: div,\n id: \"ts_animationTime\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: ScreenViewport.animation.time.normal.milliseconds,\n handler: (value, _input) => {\n ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Pick Radius (inches): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_viewToolPickRadiusInches\";\n label.innerText = \"Pick Radius (inches): \";\n createNumericInput({\n parent: div,\n id: \"ts_viewToolPickRadiusInches\",\n display: \"inline\",\n min: 0,\n step: 0.01,\n value: ToolSettings.viewToolPickRadiusInches,\n handler: (value, _input) => {\n ToolSettings.viewToolPickRadiusInches = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n createCheckBox({\n parent: div,\n name: \"Walk Enforce Z Up\",\n id: \"ts_walkEnforceZUp\",\n isChecked: ToolSettings.walkEnforceZUp,\n handler: (_cb) => {\n ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Camera Angle (degrees): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_walkCameraAngle\";\n createNumericInput({\n parent: div,\n id: \"ts_walkCameraAngle\",\n display: \"inline\",\n min: 0,\n step: 0.1,\n value: ToolSettings.walkCameraAngle.degrees,\n handler: (value, _input) => {\n ToolSettings.walkCameraAngle.setDegrees(value);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Velocity (meters per second): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_walkVelocity\";\n createNumericInput({\n parent: div,\n id: \"ts_walkVelocity\",\n display: \"inline\",\n min: 0,\n step: 0.1,\n value: ToolSettings.walkVelocity,\n handler: (value, _input) => {\n ToolSettings.walkVelocity = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Bump Distance (meters): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_wheelZoomBumpDistance\";\n createNumericInput({\n parent: div,\n id: \"ts_wheelZoomBumpDistance\",\n display: \"inline\",\n min: 0,\n step: 0.025,\n value: ToolSettings.wheelZoomBumpDistance,\n handler: (value, _input) => {\n ToolSettings.wheelZoomBumpDistance = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Ratio: \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_wheelZoomRatio\";\n createNumericInput({\n parent: div,\n id: \"ts_wheelZoomRatio\",\n display: \"inline\",\n min: 1.0,\n step: 0.025,\n value: ToolSettings.wheelZoomRatio,\n handler: async (value, _input) => {\n ToolSettings.wheelZoomRatio = value;\n return IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n createLabeledNumericInput({\n id: \"num_inertiaDamping\",\n parent: settingsDiv,\n value: ToolSettings.viewingInertia.damping,\n handler: async (value, _) => {\n ToolSettings.viewingInertia.damping = value;\n return IModelApp.toolAdmin.exitViewTool();\n },\n min: 0,\n max: 1,\n step: 0.05,\n parseAsFloat: true,\n name: \"Inertial damping: \",\n });\n createLabeledNumericInput({\n id: \"num_inertiaDuration\",\n parent: settingsDiv,\n value: ToolSettings.viewingInertia.duration.milliseconds / 1000,\n handler: async (value, _) => {\n ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000);\n return IModelApp.toolAdmin.exitViewTool();\n },\n min: 0,\n max: 10,\n step: 0.5,\n parseAsFloat: true,\n name: \"Inertial duration (seconds): \",\n });\n }\n\n public [Symbol.dispose](): void { }\n}\n"]}
@@ -45,6 +45,7 @@ import { ToggleToolTipsTool } from "./tools/ToolTipProvider";
45
45
  * @beta
46
46
  */
47
47
  export class FrontendDevTools {
48
+ static _initialized = false;
48
49
  /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.
49
50
  * To initialize when starting up your app:
50
51
  * ```ts
@@ -217,5 +218,4 @@ export class FrontendDevTools {
217
218
  this._initialized = false;
218
219
  }
219
220
  }
220
- FrontendDevTools._initialized = false;
221
221
  //# sourceMappingURL=FrontEndDevTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FrontEndDevTools.js","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC/I,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,8BAA8B,EAAE,sCAAsC,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,6BAA6B,EAAE,qCAAqC,EAC9M,2BAA2B,EAAE,iCAAiC,EAAE,oCAAoC,EAAE,2BAA2B,EAAE,aAAa,EAAE,sBAAsB,GACzK,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,WAAW,EAC/J,eAAe,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,mCAAmC,EACvJ,4BAA4B,EAAE,kCAAkC,EAAE,kCAAkC,EAAE,yBAAyB,EAAE,uBAAuB,EACxJ,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACjH,OAAO,EACL,uBAAuB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,WAAW,EACrI,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,GAC7E,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACxH,OAAO,EACL,2BAA2B,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,2BAA2B,GACjJ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC9H,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,oCAAoC,EACpC,6BAA6B,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,0BAA0B,EAC9L,2BAA2B,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,8BAA8B,EAClJ,wBAAwB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,GACxH,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,6BAA6B,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,oBAAoB,EAC5H,sBAAsB,EAAE,kBAAkB,EAAE,wBAAwB,GACrE,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAChJ,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EACL,qBAAqB,EAAE,sBAAsB,EAAE,oCAAoC,EAAE,sBAAsB,EAAE,oBAAoB,EACjI,wBAAwB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,wBAAwB,GAC9I,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EACL,gBAAgB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EACxL,wBAAwB,EAAE,wBAAwB,EAAE,uBAAuB,GAC5E,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC/G,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAG3B;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC5B,IAAI,IAAI,CAAC,YAAY;YACnB,OAAO;QAET,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,oCAAoC;QACpC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACrC,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG;YACZ,kBAAkB;YAClB,oBAAoB;YACpB,uBAAuB;YACvB,6BAA6B;YAC7B,oCAAoC;YACpC,gCAAgC;YAChC,0BAA0B;YAC1B,2BAA2B;YAC3B,8BAA8B;YAC9B,qBAAqB;YACrB,uBAAuB;YACvB,iBAAiB;YACjB,aAAa;YACb,yBAAyB;YACzB,gBAAgB;YAChB,0BAA0B;YAC1B,uBAAuB;YACvB,oBAAoB;YACpB,wBAAwB;YACxB,gCAAgC;YAChC,eAAe;YACf,mBAAmB;YACnB,gBAAgB;YAChB,2BAA2B;YAC3B,yBAAyB;YACzB,aAAa;YACb,oBAAoB;YACpB,kBAAkB;YAClB,2BAA2B;YAC3B,mBAAmB;YACnB,8BAA8B;YAC9B,oBAAoB;YACpB,mBAAmB;YACnB,YAAY;YACZ,+BAA+B;YAC/B,6BAA6B;YAC7B,4BAA4B;YAC5B,eAAe;YACf,WAAW;YACX,eAAe;YACf,eAAe;YACf,eAAe;YACf,kBAAkB;YAClB,kBAAkB;YAClB,2BAA2B;YAC3B,oBAAoB;YACpB,oBAAoB;YACpB,oBAAoB;YACpB,wBAAwB;YACxB,sBAAsB;YACtB,8BAA8B;YAC9B,gBAAgB;YAChB,gBAAgB;YAChB,uBAAuB;YACvB,qBAAqB;YACrB,uBAAuB;YACvB,uBAAuB;YACvB,+BAA+B;YAC/B,uBAAuB;YACvB,qBAAqB;YACrB,gBAAgB;YAChB,4BAA4B;YAC5B,yBAAyB;YACzB,gBAAgB;YAChB,gBAAgB;YAChB,sBAAsB;YACtB,YAAY;YACZ,sBAAsB;YACtB,gBAAgB;YAChB,sBAAsB;YACtB,qBAAqB;YACrB,uBAAuB;YACvB,cAAc;YACd,aAAa;YACb,eAAe;YACf,mBAAmB;YACnB,WAAW;YACX,aAAa;YACb,UAAU;YACV,+BAA+B;YAC/B,iBAAiB;YACjB,yBAAyB;YACzB,yBAAyB;YACzB,mBAAmB;YACnB,sBAAsB;YACtB,yBAAyB;YACzB,qBAAqB;YACrB,gBAAgB;YAChB,6BAA6B;YAC7B,wBAAwB;YACxB,oBAAoB;YACpB,mCAAmC;YACnC,6BAA6B;YAC7B,uBAAuB;YACvB,gBAAgB;YAChB,+BAA+B;YAC/B,kCAAkC;YAClC,4BAA4B;YAC5B,kBAAkB;YAClB,kCAAkC;YAClC,kCAAkC;YAClC,yBAAyB;YACzB,kBAAkB;YAClB,uBAAuB;YACvB,wBAAwB;YACxB,wBAAwB;YACxB,uBAAuB;YACvB,oBAAoB;YACpB,iBAAiB;YACjB,eAAe;YACf,uBAAuB;YACvB,4BAA4B;YAC5B,cAAc;YACd,cAAc;YACd,sBAAsB;YACtB,sBAAsB;YACtB,oBAAoB;YACpB,qBAAqB;YACrB,yBAAyB;YACzB,6BAA6B;YAC7B,+BAA+B;YAC/B,wBAAwB;YACxB,kBAAkB;YAClB,sBAAsB;YACtB,wBAAwB;YACxB,iBAAiB;YACjB,sBAAsB;YACtB,oBAAoB;YACpB,4BAA4B;YAC5B,oCAAoC;YACpC,6BAA6B;YAC7B,qBAAqB;YACrB,wBAAwB;YACxB,oCAAoC;YACpC,2BAA2B;YAC3B,2BAA2B;YAC3B,iCAAiC;YACjC,6BAA6B;YAC7B,qCAAqC;YACrC,sBAAsB;YACtB,4BAA4B;YAC5B,kCAAkC;YAClC,8BAA8B;YAC9B,sCAAsC;YACtC,aAAa;YACb,uBAAuB;SACxB,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE3B,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,MAAM,CAAC,QAAQ;QACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;;AAlLc,6BAAY,GAAG,KAAK,CAAC","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/** @packageDocumentation\n * @module Utilities\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { EdgeDetectionEffect, EmbossEffect, GaussianBlurEffect, SharpenEffect, SharpnessEffect, UnsharpenEffect } from \"./effects/Convolution\";\nimport { ClearEffectsTool } from \"./effects/EffectTools\";\nimport { ExplosionEffect } from \"./effects/Explosion\";\nimport { FlipImageConfig, FlipImageEffect } from \"./effects/FlipImage\";\nimport { LensDistortionConfig, LensDistortionEffect } from \"./effects/LensDistortion\";\nimport { SaturationConfig, SaturationEffect } from \"./effects/Saturation\";\nimport { SnowEffect } from \"./effects/Snow\";\nimport { VignetteConfig, VignetteEffect } from \"./effects/Vignette\";\nimport {\n MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool, MaskBackgroundMapByModelTool, MaskBackgroundMapBySubCategoryTool, MaskRealityModelByElementTool, MaskRealityModelByExcludedElementTool,\n MaskRealityModelByModelTool, MaskRealityModelBySubCategoryTool, SetHigherPriorityRealityModelMasking, SetMapHigherPriorityMasking, UnmaskMapTool, UnmaskRealityModelTool,\n} from \"./tools/PlanarMaskTools\";\nimport {\n ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool,\n FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool,\n ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel,\n ViewportTileSizeModifierTool,\n} from \"./tools/ViewportTools\";\nimport { AnimationIntervalTool } from \"./tools/AnimationIntervalTool\";\nimport { ChangeUnitsTool } from \"./tools/ChangeUnitsTool\";\nimport { ClipColorTool, ClipIntersectionTool, TestClipStyleTool, ToggleSectionCutTool } from \"./tools/ClipTools\";\nimport {\n ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool,\n SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool,\n} from \"./tools/DisplayStyleTools\";\nimport { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from \"./tools/ScheduleScriptTools\";\nimport {\n ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool,\n} from \"./tools/EmphasizeElementsTool\";\nimport { ToggleFrustumSnapshotTool, ToggleSelectedViewFrustumTool, ToggleShadowFrustumTool } from \"./tools/FrustumDecoration\";\nimport { InspectElementTool } from \"./tools/InspectElementTool\";\nimport {\n AttachArcGISFeatureMapLayerByUrlTool,\n AttachArcGISMapLayerByUrlTool, AttachMapLayerTool, AttachMapOverlayTool, AttachModelMapLayerTool, AttachOgcApiFeaturesMapLayerTool, AttachTileURLMapLayerByUrlTool, AttachWmsMapLayerByUrlTool,\n AttachWmtsMapLayerByUrlTool, DetachMapLayersTool, MapBaseColorTool, MapBaseTransparencyTool, MapBaseVisibilityTool, MapLayerSubLayerVisibilityTool,\n MapLayerTransparencyTool, MapLayerVisibilityTool, MapLayerZoomTool, ReorderMapLayers, SetMapBaseTool, ToggleTerrainTool,\n} from \"./tools/MapLayerTool\";\nimport { MeasureTileLoadTimeTool } from \"./tools/MeasureTileLoadTime\";\nimport {\n ClearModelAppearanceOverrides, SetModelColorTool, SetModelEmphasizedTool, SetModelIgnoresMaterialsTool, SetModelLineCodeTool,\n SetModelLineWeightTool, SetModelLocateTool, SetModelTransparencyTool,\n} from \"./tools/ModelAppearanceTools\";\nimport { ChangePlanProjectionSettingsTool, DumpPlanProjectionSettingsTool, OverrideSubCategoryPriorityTool } from \"./tools/PlanProjectionTools\";\nimport { ToggleProjectExtentsTool } from \"./tools/ProjectExtents\";\nimport {\n AttachCesiumAssetTool, AttachRealityModelTool, ClearRealityModelAppearanceOverrides, DetachRealityModelTool, SaveRealityModelTool,\n SetRealityModelColorTool, SetRealityModelEmphasizedTool, SetRealityModelLocateTool, SetRealityModelTransparencyTool, ToggleOSMBuildingDisplay,\n} from \"./tools/RealityModelTools\";\nimport { RealityTransitionTool } from \"./tools/RealityTransitionTool\";\nimport { CompileShadersTool, LoseWebGLContextTool, ToggleDPIForLODTool } from \"./tools/RenderSystemTools\";\nimport {\n SetAASamplesTool, ToggleDrapeFrustumTool, ToggleMaskFrustumTool, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\n} from \"./tools/RenderTargetTools\";\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\n\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\n * @beta\n */\nexport class FrontendDevTools {\n private static _initialized = false;\n\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await FrontendDevTools.initialize();\n * ```\n * @beta\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n const namespace = \"FrontendDevTools\";\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\n const tools = [\n AttachMapLayerTool,\n AttachMapOverlayTool,\n AttachModelMapLayerTool,\n AttachArcGISMapLayerByUrlTool,\n AttachArcGISFeatureMapLayerByUrlTool,\n AttachOgcApiFeaturesMapLayerTool,\n AttachWmsMapLayerByUrlTool,\n AttachWmtsMapLayerByUrlTool,\n AttachTileURLMapLayerByUrlTool,\n AnimationIntervalTool,\n ApplyRenderingStyleTool,\n ApplyViewByIdTool,\n ApplyViewTool,\n ChangeBackgroundColorTool,\n ChangeCameraTool,\n ChangeEmphasisSettingsTool,\n ChangeFlashSettingsTool,\n ChangeHiliteModeTool,\n ChangeHiliteSettingsTool,\n ChangePlanProjectionSettingsTool,\n ChangeUnitsTool,\n ChangeViewFlagsTool,\n ClearEffectsTool,\n ClearEmphasizedElementsTool,\n ClearIsolatedElementsTool,\n ClipColorTool,\n ClipIntersectionTool,\n CompileShadersTool,\n DefaultTileSizeModifierTool,\n DetachMapLayersTool,\n DumpPlanProjectionSettingsTool,\n DumpSelectionSetTool,\n EdgeDetectionEffect,\n EmbossEffect,\n ElementIdFromSourceAspectIdTool,\n EmphasizeSelectedElementsTool,\n EmphasizeVisibleElementsTool,\n ExplosionEffect,\n FadeOutTool,\n FlipImageConfig,\n FlipImageEffect,\n FreezeSceneTool,\n GaussianBlurEffect,\n InspectElementTool,\n IsolateSelectedElementsTool,\n LensDistortionConfig,\n LensDistortionEffect,\n LoseWebGLContextTool,\n MapLayerTransparencyTool,\n MapLayerVisibilityTool,\n MapLayerSubLayerVisibilityTool,\n MapLayerZoomTool,\n MapBaseColorTool,\n MapBaseTransparencyTool,\n MapBaseVisibilityTool,\n MeasureTileLoadTimeTool,\n OverrideSubCategoryTool,\n OverrideSubCategoryPriorityTool,\n QueryScheduleScriptTool,\n RealityTransitionTool,\n ReorderMapLayers,\n ReportWebGLCompatibilityTool,\n ReverseScheduleScriptTool,\n SaturationConfig,\n SaturationEffect,\n SaveRenderingStyleTool,\n SaveViewTool,\n SelectElementsByIdTool,\n SetAASamplesTool,\n SetAspectRatioSkewTool,\n SetScheduleScriptTool,\n ToggleVolClassIntersect,\n SetMapBaseTool,\n SharpenEffect,\n SharpnessEffect,\n ShowTileVolumesTool,\n SkyCubeTool,\n SkySphereTool,\n SnowEffect,\n SourceAspectIdFromElementIdTool,\n TestClipStyleTool,\n Toggle3dManipulationsTool,\n ToggleDrawingGraphicsTool,\n ToggleDPIForLODTool,\n ToggleDrapeFrustumTool,\n ToggleFrustumSnapshotTool,\n ToggleMaskFrustumTool,\n ToggleNormalMaps,\n TogglePrimitiveVisibilityTool,\n ToggleProjectExtentsTool,\n ToggleReadPixelsTool,\n ToggleSectionDrawingSpatialViewTool,\n ToggleSelectedViewFrustumTool,\n ToggleShadowFrustumTool,\n ToggleSkyboxTool,\n ToggleTileRequestDecorationTool,\n ToggleTileTreeBoundsDecorationTool,\n ToggleTileTreeReferencesTool,\n ToggleToolTipsTool,\n ToggleViewAttachmentBoundariesTool,\n ToggleViewAttachmentClipShapesTool,\n ToggleViewAttachmentsTool,\n ToggleWiremeshTool,\n ToggleRealityTileBounds,\n ToggleRealityTilePreload,\n ToggleRealityTileLogging,\n ToggleRealityTileFreeze,\n ToggleSectionCutTool,\n ToggleTerrainTool,\n UnsharpenEffect,\n ViewportAddRealityModel,\n ViewportTileSizeModifierTool,\n VignetteConfig,\n VignetteEffect,\n AttachRealityModelTool,\n DetachRealityModelTool,\n SaveRealityModelTool,\n SetGpuMemoryLimitTool,\n SetRealityModelLocateTool,\n SetRealityModelEmphasizedTool,\n SetRealityModelTransparencyTool,\n SetRealityModelColorTool,\n SetModelLocateTool,\n SetModelEmphasizedTool,\n SetModelTransparencyTool,\n SetModelColorTool,\n SetModelLineWeightTool,\n SetModelLineCodeTool,\n SetModelIgnoresMaterialsTool,\n ClearRealityModelAppearanceOverrides,\n ClearModelAppearanceOverrides,\n AttachCesiumAssetTool,\n ToggleOSMBuildingDisplay,\n SetHigherPriorityRealityModelMasking,\n SetMapHigherPriorityMasking,\n MaskRealityModelByModelTool,\n MaskRealityModelBySubCategoryTool,\n MaskRealityModelByElementTool,\n MaskRealityModelByExcludedElementTool,\n UnmaskRealityModelTool,\n MaskBackgroundMapByModelTool,\n MaskBackgroundMapBySubCategoryTool,\n MaskBackgroundMapByElementTool,\n MaskBackgroundMapByExcludedElementTool,\n UnmaskMapTool,\n WoWIgnoreBackgroundTool,\n ];\n\n for (const tool of tools)\n tool.register(namespace);\n\n return namespacePromise;\n }\n\n private static shutdown() {\n this._initialized = false;\n }\n}\n"]}
1
+ {"version":3,"file":"FrontEndDevTools.js","sourceRoot":"","sources":["../../src/FrontEndDevTools.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/** @packageDocumentation\n * @module Utilities\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { EdgeDetectionEffect, EmbossEffect, GaussianBlurEffect, SharpenEffect, SharpnessEffect, UnsharpenEffect } from \"./effects/Convolution\";\nimport { ClearEffectsTool } from \"./effects/EffectTools\";\nimport { ExplosionEffect } from \"./effects/Explosion\";\nimport { FlipImageConfig, FlipImageEffect } from \"./effects/FlipImage\";\nimport { LensDistortionConfig, LensDistortionEffect } from \"./effects/LensDistortion\";\nimport { SaturationConfig, SaturationEffect } from \"./effects/Saturation\";\nimport { SnowEffect } from \"./effects/Snow\";\nimport { VignetteConfig, VignetteEffect } from \"./effects/Vignette\";\nimport {\n MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool, MaskBackgroundMapByModelTool, MaskBackgroundMapBySubCategoryTool, MaskRealityModelByElementTool, MaskRealityModelByExcludedElementTool,\n MaskRealityModelByModelTool, MaskRealityModelBySubCategoryTool, SetHigherPriorityRealityModelMasking, SetMapHigherPriorityMasking, UnmaskMapTool, UnmaskRealityModelTool,\n} from \"./tools/PlanarMaskTools\";\nimport {\n ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool,\n FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool,\n ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel,\n ViewportTileSizeModifierTool,\n} from \"./tools/ViewportTools\";\nimport { AnimationIntervalTool } from \"./tools/AnimationIntervalTool\";\nimport { ChangeUnitsTool } from \"./tools/ChangeUnitsTool\";\nimport { ClipColorTool, ClipIntersectionTool, TestClipStyleTool, ToggleSectionCutTool } from \"./tools/ClipTools\";\nimport {\n ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool,\n SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool,\n} from \"./tools/DisplayStyleTools\";\nimport { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from \"./tools/ScheduleScriptTools\";\nimport {\n ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool,\n} from \"./tools/EmphasizeElementsTool\";\nimport { ToggleFrustumSnapshotTool, ToggleSelectedViewFrustumTool, ToggleShadowFrustumTool } from \"./tools/FrustumDecoration\";\nimport { InspectElementTool } from \"./tools/InspectElementTool\";\nimport {\n AttachArcGISFeatureMapLayerByUrlTool,\n AttachArcGISMapLayerByUrlTool, AttachMapLayerTool, AttachMapOverlayTool, AttachModelMapLayerTool, AttachOgcApiFeaturesMapLayerTool, AttachTileURLMapLayerByUrlTool, AttachWmsMapLayerByUrlTool,\n AttachWmtsMapLayerByUrlTool, DetachMapLayersTool, MapBaseColorTool, MapBaseTransparencyTool, MapBaseVisibilityTool, MapLayerSubLayerVisibilityTool,\n MapLayerTransparencyTool, MapLayerVisibilityTool, MapLayerZoomTool, ReorderMapLayers, SetMapBaseTool, ToggleTerrainTool,\n} from \"./tools/MapLayerTool\";\nimport { MeasureTileLoadTimeTool } from \"./tools/MeasureTileLoadTime\";\nimport {\n ClearModelAppearanceOverrides, SetModelColorTool, SetModelEmphasizedTool, SetModelIgnoresMaterialsTool, SetModelLineCodeTool,\n SetModelLineWeightTool, SetModelLocateTool, SetModelTransparencyTool,\n} from \"./tools/ModelAppearanceTools\";\nimport { ChangePlanProjectionSettingsTool, DumpPlanProjectionSettingsTool, OverrideSubCategoryPriorityTool } from \"./tools/PlanProjectionTools\";\nimport { ToggleProjectExtentsTool } from \"./tools/ProjectExtents\";\nimport {\n AttachCesiumAssetTool, AttachRealityModelTool, ClearRealityModelAppearanceOverrides, DetachRealityModelTool, SaveRealityModelTool,\n SetRealityModelColorTool, SetRealityModelEmphasizedTool, SetRealityModelLocateTool, SetRealityModelTransparencyTool, ToggleOSMBuildingDisplay,\n} from \"./tools/RealityModelTools\";\nimport { RealityTransitionTool } from \"./tools/RealityTransitionTool\";\nimport { CompileShadersTool, LoseWebGLContextTool, ToggleDPIForLODTool } from \"./tools/RenderSystemTools\";\nimport {\n SetAASamplesTool, ToggleDrapeFrustumTool, ToggleMaskFrustumTool, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\n} from \"./tools/RenderTargetTools\";\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\n\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\n * @beta\n */\nexport class FrontendDevTools {\n private static _initialized = false;\n\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await FrontendDevTools.initialize();\n * ```\n * @beta\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n const namespace = \"FrontendDevTools\";\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\n const tools = [\n AttachMapLayerTool,\n AttachMapOverlayTool,\n AttachModelMapLayerTool,\n AttachArcGISMapLayerByUrlTool,\n AttachArcGISFeatureMapLayerByUrlTool,\n AttachOgcApiFeaturesMapLayerTool,\n AttachWmsMapLayerByUrlTool,\n AttachWmtsMapLayerByUrlTool,\n AttachTileURLMapLayerByUrlTool,\n AnimationIntervalTool,\n ApplyRenderingStyleTool,\n ApplyViewByIdTool,\n ApplyViewTool,\n ChangeBackgroundColorTool,\n ChangeCameraTool,\n ChangeEmphasisSettingsTool,\n ChangeFlashSettingsTool,\n ChangeHiliteModeTool,\n ChangeHiliteSettingsTool,\n ChangePlanProjectionSettingsTool,\n ChangeUnitsTool,\n ChangeViewFlagsTool,\n ClearEffectsTool,\n ClearEmphasizedElementsTool,\n ClearIsolatedElementsTool,\n ClipColorTool,\n ClipIntersectionTool,\n CompileShadersTool,\n DefaultTileSizeModifierTool,\n DetachMapLayersTool,\n DumpPlanProjectionSettingsTool,\n DumpSelectionSetTool,\n EdgeDetectionEffect,\n EmbossEffect,\n ElementIdFromSourceAspectIdTool,\n EmphasizeSelectedElementsTool,\n EmphasizeVisibleElementsTool,\n ExplosionEffect,\n FadeOutTool,\n FlipImageConfig,\n FlipImageEffect,\n FreezeSceneTool,\n GaussianBlurEffect,\n InspectElementTool,\n IsolateSelectedElementsTool,\n LensDistortionConfig,\n LensDistortionEffect,\n LoseWebGLContextTool,\n MapLayerTransparencyTool,\n MapLayerVisibilityTool,\n MapLayerSubLayerVisibilityTool,\n MapLayerZoomTool,\n MapBaseColorTool,\n MapBaseTransparencyTool,\n MapBaseVisibilityTool,\n MeasureTileLoadTimeTool,\n OverrideSubCategoryTool,\n OverrideSubCategoryPriorityTool,\n QueryScheduleScriptTool,\n RealityTransitionTool,\n ReorderMapLayers,\n ReportWebGLCompatibilityTool,\n ReverseScheduleScriptTool,\n SaturationConfig,\n SaturationEffect,\n SaveRenderingStyleTool,\n SaveViewTool,\n SelectElementsByIdTool,\n SetAASamplesTool,\n SetAspectRatioSkewTool,\n SetScheduleScriptTool,\n ToggleVolClassIntersect,\n SetMapBaseTool,\n SharpenEffect,\n SharpnessEffect,\n ShowTileVolumesTool,\n SkyCubeTool,\n SkySphereTool,\n SnowEffect,\n SourceAspectIdFromElementIdTool,\n TestClipStyleTool,\n Toggle3dManipulationsTool,\n ToggleDrawingGraphicsTool,\n ToggleDPIForLODTool,\n ToggleDrapeFrustumTool,\n ToggleFrustumSnapshotTool,\n ToggleMaskFrustumTool,\n ToggleNormalMaps,\n TogglePrimitiveVisibilityTool,\n ToggleProjectExtentsTool,\n ToggleReadPixelsTool,\n ToggleSectionDrawingSpatialViewTool,\n ToggleSelectedViewFrustumTool,\n ToggleShadowFrustumTool,\n ToggleSkyboxTool,\n ToggleTileRequestDecorationTool,\n ToggleTileTreeBoundsDecorationTool,\n ToggleTileTreeReferencesTool,\n ToggleToolTipsTool,\n ToggleViewAttachmentBoundariesTool,\n ToggleViewAttachmentClipShapesTool,\n ToggleViewAttachmentsTool,\n ToggleWiremeshTool,\n ToggleRealityTileBounds,\n ToggleRealityTilePreload,\n ToggleRealityTileLogging,\n ToggleRealityTileFreeze,\n ToggleSectionCutTool,\n ToggleTerrainTool,\n UnsharpenEffect,\n ViewportAddRealityModel,\n ViewportTileSizeModifierTool,\n VignetteConfig,\n VignetteEffect,\n AttachRealityModelTool,\n DetachRealityModelTool,\n SaveRealityModelTool,\n SetGpuMemoryLimitTool,\n SetRealityModelLocateTool,\n SetRealityModelEmphasizedTool,\n SetRealityModelTransparencyTool,\n SetRealityModelColorTool,\n SetModelLocateTool,\n SetModelEmphasizedTool,\n SetModelTransparencyTool,\n SetModelColorTool,\n SetModelLineWeightTool,\n SetModelLineCodeTool,\n SetModelIgnoresMaterialsTool,\n ClearRealityModelAppearanceOverrides,\n ClearModelAppearanceOverrides,\n AttachCesiumAssetTool,\n ToggleOSMBuildingDisplay,\n SetHigherPriorityRealityModelMasking,\n SetMapHigherPriorityMasking,\n MaskRealityModelByModelTool,\n MaskRealityModelBySubCategoryTool,\n MaskRealityModelByElementTool,\n MaskRealityModelByExcludedElementTool,\n UnmaskRealityModelTool,\n MaskBackgroundMapByModelTool,\n MaskBackgroundMapBySubCategoryTool,\n MaskBackgroundMapByElementTool,\n MaskBackgroundMapByExcludedElementTool,\n UnmaskMapTool,\n WoWIgnoreBackgroundTool,\n ];\n\n for (const tool of tools)\n tool.register(namespace);\n\n return namespacePromise;\n }\n\n private static shutdown() {\n this._initialized = false;\n }\n}\n"]}
@@ -73,6 +73,7 @@ export class ConvolutionEffect extends AddEffectTool {
73
73
  * @beta
74
74
  */
75
75
  export class GaussianBlurEffect extends ConvolutionEffect {
76
+ static toolId = "GaussianBlurEffect";
76
77
  get effectName() { return "blur"; }
77
78
  get matrix() {
78
79
  return [
@@ -82,11 +83,11 @@ export class GaussianBlurEffect extends ConvolutionEffect {
82
83
  ];
83
84
  }
84
85
  }
85
- GaussianBlurEffect.toolId = "GaussianBlurEffect";
86
86
  /** Adds a screen-space unsharpen effect to the selected Viewport.
87
87
  * @beta
88
88
  */
89
89
  export class UnsharpenEffect extends ConvolutionEffect {
90
+ static toolId = "UnsharpenEffect";
90
91
  get effectName() { return "unsharpen"; }
91
92
  get matrix() {
92
93
  return [
@@ -96,11 +97,11 @@ export class UnsharpenEffect extends ConvolutionEffect {
96
97
  ];
97
98
  }
98
99
  }
99
- UnsharpenEffect.toolId = "UnsharpenEffect";
100
100
  /** Adds a screen-space emboss effect to the selected Viewport.
101
101
  * @beta
102
102
  */
103
103
  export class EmbossEffect extends ConvolutionEffect {
104
+ static toolId = "EmbossEffect";
104
105
  get effectName() { return "emboss"; }
105
106
  get matrix() {
106
107
  return [
@@ -110,11 +111,11 @@ export class EmbossEffect extends ConvolutionEffect {
110
111
  ];
111
112
  }
112
113
  }
113
- EmbossEffect.toolId = "EmbossEffect";
114
114
  /** Adds a screen-space sharpen effect to the selected Viewport.
115
115
  * @beta
116
116
  */
117
117
  export class SharpenEffect extends ConvolutionEffect {
118
+ static toolId = "SharpenEffect";
118
119
  get effectName() { return "sharpen"; }
119
120
  get matrix() {
120
121
  return [
@@ -124,11 +125,11 @@ export class SharpenEffect extends ConvolutionEffect {
124
125
  ];
125
126
  }
126
127
  }
127
- SharpenEffect.toolId = "SharpenEffect";
128
128
  /** Adds a screen-space sharpness effect to the selected Viewport.
129
129
  * @beta
130
130
  */
131
131
  export class SharpnessEffect extends ConvolutionEffect {
132
+ static toolId = "SharpnessEffect";
132
133
  get effectName() { return "sharpness"; }
133
134
  get matrix() {
134
135
  return [
@@ -138,11 +139,11 @@ export class SharpnessEffect extends ConvolutionEffect {
138
139
  ];
139
140
  }
140
141
  }
141
- SharpnessEffect.toolId = "SharpnessEffect";
142
142
  /** Adds a screen-space edge-detection effect to the selected Viewport.
143
143
  * @beta
144
144
  */
145
145
  export class EdgeDetectionEffect extends ConvolutionEffect {
146
+ static toolId = "EdgeDetectionEffect";
146
147
  get effectName() { return "edgedetect"; }
147
148
  get matrix() {
148
149
  return [
@@ -152,5 +153,4 @@ export class EdgeDetectionEffect extends ConvolutionEffect {
152
153
  ];
153
154
  }
154
155
  }
155
- EdgeDetectionEffect.toolId = "EdgeDetectionEffect";
156
156
  //# sourceMappingURL=Convolution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Convolution.js","sourceRoot":"","sources":["../../../src/effects/Convolution.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/** @packageDocumentation\n * @module Effects\n */\n\nimport { ScreenSpaceEffectBuilder, UniformType, VaryingType } from \"@itwin/core-frontend\";\nimport { AddEffectTool } from \"./EffectTools\";\n\n/** Adds one of a collection of \"convolution kernels\" that alter a [Viewport]($frontend)'s image by blending neighboring pixels.\n * Based on https://webglfundamentals.org/webgl/lessons/webgl-image-processing-continued.html\n * @beta\n */\nexport abstract class ConvolutionEffect extends AddEffectTool {\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 0; }\n\n protected abstract get matrix(): number[];\n\n protected get textureCoordFromPosition() { return true; }\n\n protected get source() {\n return {\n // The vertex shader simply computes the texture coordinate for use in the fragment shader.\n vertex: `\n void effectMain(vec4 pos) {\n v_texCoord = textureCoordFromPosition(pos);\n }`,\n // The fragment shader samples the pixel and its neighbors and applies the kernel.\n fragment: `\n vec4 effectMain() {\n vec2 onePixel = vec2(1.0, 1.0) / u_textureSize;\n vec4 colorSum =\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, -1)) * u_kernel[0] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, -1)) * u_kernel[1] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, -1)) * u_kernel[2] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 0)) * u_kernel[3] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 0)) * u_kernel[4] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 0)) * u_kernel[5] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 1)) * u_kernel[6] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 1)) * u_kernel[7] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 1)) * u_kernel[8] ;\n return vec4((colorSum / u_kernelWeight).rgb, 1);\n }`,\n };\n }\n\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\n // Define the varying for the texture coordinate.\n builder.addVarying(\"v_texCoord\", VaryingType.Vec2);\n\n // Hook up the uniforms.\n const matrix = this.matrix;\n builder.addUniform({\n name: \"u_textureSize\",\n type: UniformType.Vec2,\n bind: (uniform, context) => {\n const rect = context.viewport.viewRect;\n uniform.setUniform2fv([rect.width, rect.height]);\n },\n });\n builder.addUniformArray({\n name: \"u_kernel\",\n type: UniformType.Float,\n length: matrix.length,\n bind: (uniform) => uniform.setUniform1fv(matrix),\n });\n\n let weight = matrix.reduce((prev, curr) => prev + curr);\n if (weight <= 0)\n weight = 1;\n\n builder.addUniform({\n name: \"u_kernelWeight\",\n type: UniformType.Float,\n bind: (uniform) => uniform.setUniform1f(weight),\n });\n }\n}\n\n/** Adds a gaussian blur screen-space effect to the selected Viewport.\n * @beta\n */\nexport class GaussianBlurEffect extends ConvolutionEffect {\n public static override toolId = \"GaussianBlurEffect\";\n protected get effectName() { return \"blur\"; }\n protected get matrix() {\n return [\n 0.045, 0.122, 0.045,\n 0.122, 0.332, 0.122,\n 0.045, 0.122, 0.045,\n ];\n }\n}\n\n/** Adds a screen-space unsharpen effect to the selected Viewport.\n * @beta\n */\nexport class UnsharpenEffect extends ConvolutionEffect {\n public static override toolId = \"UnsharpenEffect\";\n protected get effectName() { return \"unsharpen\"; }\n protected get matrix() {\n return [\n -1, -1, -1,\n -1, 9, -1,\n -1, -1, -1,\n ];\n }\n}\n\n/** Adds a screen-space emboss effect to the selected Viewport.\n * @beta\n */\nexport class EmbossEffect extends ConvolutionEffect {\n public static override toolId = \"EmbossEffect\";\n protected get effectName() { return \"emboss\"; }\n protected get matrix() {\n return [\n -2, -1, 0,\n -1, 1, 1,\n 0, 1, 2,\n ];\n }\n}\n\n/** Adds a screen-space sharpen effect to the selected Viewport.\n * @beta\n */\nexport class SharpenEffect extends ConvolutionEffect {\n public static override toolId = \"SharpenEffect\";\n protected get effectName() { return \"sharpen\"; }\n protected get matrix() {\n return [\n 0, -1, 0,\n -1, 5, -1,\n 0, -1, 0,\n ];\n }\n}\n\n/** Adds a screen-space sharpness effect to the selected Viewport.\n * @beta\n */\nexport class SharpnessEffect extends ConvolutionEffect {\n public static override toolId = \"SharpnessEffect\";\n protected get effectName() { return \"sharpness\"; }\n protected get matrix() {\n return [\n 0, -1, 0,\n -1, 5, -1,\n 0, -1, 0,\n ];\n }\n}\n\n/** Adds a screen-space edge-detection effect to the selected Viewport.\n * @beta\n */\nexport class EdgeDetectionEffect extends ConvolutionEffect {\n public static override toolId = \"EdgeDetectionEffect\";\n protected get effectName() { return \"edgedetect\"; }\n protected get matrix() {\n return [\n -5, 0, 0,\n 0, 0, 0,\n 0, 0, 5,\n ];\n }\n}\n"]}
1
+ {"version":3,"file":"Convolution.js","sourceRoot":"","sources":["../../../src/effects/Convolution.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/** @packageDocumentation\n * @module Effects\n */\n\nimport { ScreenSpaceEffectBuilder, UniformType, VaryingType } from \"@itwin/core-frontend\";\nimport { AddEffectTool } from \"./EffectTools\";\n\n/** Adds one of a collection of \"convolution kernels\" that alter a [Viewport]($frontend)'s image by blending neighboring pixels.\n * Based on https://webglfundamentals.org/webgl/lessons/webgl-image-processing-continued.html\n * @beta\n */\nexport abstract class ConvolutionEffect extends AddEffectTool {\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 0; }\n\n protected abstract get matrix(): number[];\n\n protected get textureCoordFromPosition() { return true; }\n\n protected get source() {\n return {\n // The vertex shader simply computes the texture coordinate for use in the fragment shader.\n vertex: `\n void effectMain(vec4 pos) {\n v_texCoord = textureCoordFromPosition(pos);\n }`,\n // The fragment shader samples the pixel and its neighbors and applies the kernel.\n fragment: `\n vec4 effectMain() {\n vec2 onePixel = vec2(1.0, 1.0) / u_textureSize;\n vec4 colorSum =\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, -1)) * u_kernel[0] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, -1)) * u_kernel[1] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, -1)) * u_kernel[2] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 0)) * u_kernel[3] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 0)) * u_kernel[4] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 0)) * u_kernel[5] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 1)) * u_kernel[6] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 1)) * u_kernel[7] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 1)) * u_kernel[8] ;\n return vec4((colorSum / u_kernelWeight).rgb, 1);\n }`,\n };\n }\n\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\n // Define the varying for the texture coordinate.\n builder.addVarying(\"v_texCoord\", VaryingType.Vec2);\n\n // Hook up the uniforms.\n const matrix = this.matrix;\n builder.addUniform({\n name: \"u_textureSize\",\n type: UniformType.Vec2,\n bind: (uniform, context) => {\n const rect = context.viewport.viewRect;\n uniform.setUniform2fv([rect.width, rect.height]);\n },\n });\n builder.addUniformArray({\n name: \"u_kernel\",\n type: UniformType.Float,\n length: matrix.length,\n bind: (uniform) => uniform.setUniform1fv(matrix),\n });\n\n let weight = matrix.reduce((prev, curr) => prev + curr);\n if (weight <= 0)\n weight = 1;\n\n builder.addUniform({\n name: \"u_kernelWeight\",\n type: UniformType.Float,\n bind: (uniform) => uniform.setUniform1f(weight),\n });\n }\n}\n\n/** Adds a gaussian blur screen-space effect to the selected Viewport.\n * @beta\n */\nexport class GaussianBlurEffect extends ConvolutionEffect {\n public static override toolId = \"GaussianBlurEffect\";\n protected get effectName() { return \"blur\"; }\n protected get matrix() {\n return [\n 0.045, 0.122, 0.045,\n 0.122, 0.332, 0.122,\n 0.045, 0.122, 0.045,\n ];\n }\n}\n\n/** Adds a screen-space unsharpen effect to the selected Viewport.\n * @beta\n */\nexport class UnsharpenEffect extends ConvolutionEffect {\n public static override toolId = \"UnsharpenEffect\";\n protected get effectName() { return \"unsharpen\"; }\n protected get matrix() {\n return [\n -1, -1, -1,\n -1, 9, -1,\n -1, -1, -1,\n ];\n }\n}\n\n/** Adds a screen-space emboss effect to the selected Viewport.\n * @beta\n */\nexport class EmbossEffect extends ConvolutionEffect {\n public static override toolId = \"EmbossEffect\";\n protected get effectName() { return \"emboss\"; }\n protected get matrix() {\n return [\n -2, -1, 0,\n -1, 1, 1,\n 0, 1, 2,\n ];\n }\n}\n\n/** Adds a screen-space sharpen effect to the selected Viewport.\n * @beta\n */\nexport class SharpenEffect extends ConvolutionEffect {\n public static override toolId = \"SharpenEffect\";\n protected get effectName() { return \"sharpen\"; }\n protected get matrix() {\n return [\n 0, -1, 0,\n -1, 5, -1,\n 0, -1, 0,\n ];\n }\n}\n\n/** Adds a screen-space sharpness effect to the selected Viewport.\n * @beta\n */\nexport class SharpnessEffect extends ConvolutionEffect {\n public static override toolId = \"SharpnessEffect\";\n protected get effectName() { return \"sharpness\"; }\n protected get matrix() {\n return [\n 0, -1, 0,\n -1, 5, -1,\n 0, -1, 0,\n ];\n }\n}\n\n/** Adds a screen-space edge-detection effect to the selected Viewport.\n * @beta\n */\nexport class EdgeDetectionEffect extends ConvolutionEffect {\n public static override toolId = \"EdgeDetectionEffect\";\n protected get effectName() { return \"edgedetect\"; }\n protected get matrix() {\n return [\n -5, 0, 0,\n 0, 0, 0,\n 0, 0, 5,\n ];\n }\n}\n"]}
@@ -11,6 +11,7 @@ import { IModelApp, Tool, } from "@itwin/core-frontend";
11
11
  * @beta
12
12
  */
13
13
  export class AddEffectTool extends Tool {
14
+ static _registeredEffects = new Set();
14
15
  async run() {
15
16
  // Avoid conflicts with the names of other registered screen-space effects.
16
17
  const name = `fdt ${this.effectName}`;
@@ -32,11 +33,11 @@ export class AddEffectTool extends Tool {
32
33
  return true;
33
34
  }
34
35
  }
35
- AddEffectTool._registeredEffects = new Set();
36
36
  /** Removes all screen-space effects from the selected viewport.
37
37
  * @beta
38
38
  */
39
39
  export class ClearEffectsTool extends Tool {
40
+ static toolId = "ClearEffects";
40
41
  static get minArgs() { return 0; }
41
42
  static get maxArgs() { return 0; }
42
43
  async run() {
@@ -44,7 +45,6 @@ export class ClearEffectsTool extends Tool {
44
45
  return true;
45
46
  }
46
47
  }
47
- ClearEffectsTool.toolId = "ClearEffects";
48
48
  /** Requests that any viewport to which the specified effect has been applied redraw its contents.
49
49
  * Used by tools like [[VignetteConfig]] to update the view after the effect parameters are modified.
50
50
  * @beta
@@ -1 +1 @@
1
- {"version":3,"file":"EffectTools.js","sourceRoot":"","sources":["../../../src/effects/EffectTools.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,SAAS,EAAqD,IAAI,GACnE,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,OAAgB,aAAc,SAAQ,IAAI;IAY9B,KAAK,CAAC,GAAG;QACvB,2EAA2E;QAC3E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,uBAAuB;YACvB,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,8BAA8B,CAAC;gBACpE,IAAI;gBACJ,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;gBACvD,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,EAAE;YACJ,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;;AAlCuB,gCAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;AAqCjE;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,IAAI;IAEjC,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,GAAG;QACvB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;;AAPsB,uBAAM,GAAG,cAAc,CAAC;AAUjD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,MAAM,YAAY,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACjD,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChC,EAAE,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","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/** @packageDocumentation\n * @module Effects\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n IModelApp, ScreenSpaceEffectBuilder, ScreenSpaceEffectSource, Tool,\n} from \"@itwin/core-frontend\";\n\n/** Adds a screen-space effect to the selected viewport.\n * @beta\n */\nexport abstract class AddEffectTool extends Tool {\n private static readonly _registeredEffects = new Set<string>();\n\n /** Name of effect as used in keyins like `fdt effect add`. Ideally one word. */\n protected abstract get effectName(): string;\n /** vertex, fragment, and optional sampleSourcePixel GLSL snippets. */\n protected abstract get source(): ScreenSpaceEffectSource;\n /** Whether the fragment shader should include built-in `textureCoordFromPosition` function. */\n protected abstract get textureCoordFromPosition(): boolean;\n /** Add uniforms, varyings, etc. */\n protected abstract defineEffect(builder: ScreenSpaceEffectBuilder): void;\n\n public override async run(): Promise<boolean> {\n // Avoid conflicts with the names of other registered screen-space effects.\n const name = `fdt ${this.effectName}`;\n if (!AddEffectTool._registeredEffects.has(name)) {\n // Register the effect.\n const builder = IModelApp.renderSystem.createScreenSpaceEffectBuilder({\n name,\n textureCoordFromPosition: this.textureCoordFromPosition,\n source: this.source,\n });\n\n assert(undefined !== builder);\n this.defineEffect(builder);\n builder.finish();\n\n AddEffectTool._registeredEffects.add(name);\n }\n\n const vp = IModelApp.viewManager.selectedView;\n if (vp)\n vp.addScreenSpaceEffect(name);\n\n return true;\n }\n}\n\n/** Removes all screen-space effects from the selected viewport.\n * @beta\n */\nexport class ClearEffectsTool extends Tool {\n public static override toolId = \"ClearEffects\";\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 IModelApp.viewManager.selectedView?.removeScreenSpaceEffects();\n return true;\n }\n}\n\n/** Requests that any viewport to which the specified effect has been applied redraw its contents.\n * Used by tools like [[VignetteConfig]] to update the view after the effect parameters are modified.\n * @beta\n */\nexport function refreshViewportsForEffect(effectName: string): void {\n for (const vp of IModelApp.viewManager) {\n for (const vpEffectName of vp.screenSpaceEffects) {\n if (vpEffectName === effectName) {\n vp.requestRedraw();\n break;\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"EffectTools.js","sourceRoot":"","sources":["../../../src/effects/EffectTools.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,SAAS,EAAqD,IAAI,GACnE,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,OAAgB,aAAc,SAAQ,IAAI;IACtC,MAAM,CAAU,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAW/C,KAAK,CAAC,GAAG;QACvB,2EAA2E;QAC3E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,uBAAuB;YACvB,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,8BAA8B,CAAC;gBACpE,IAAI;gBACJ,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;gBACvD,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,EAAE;YACJ,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,IAAI;IACjC,MAAM,CAAU,MAAM,GAAG,cAAc,CAAC;IACxC,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,GAAG;QACvB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;;AAGH;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,MAAM,YAAY,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACjD,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChC,EAAE,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","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/** @packageDocumentation\n * @module Effects\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n IModelApp, ScreenSpaceEffectBuilder, ScreenSpaceEffectSource, Tool,\n} from \"@itwin/core-frontend\";\n\n/** Adds a screen-space effect to the selected viewport.\n * @beta\n */\nexport abstract class AddEffectTool extends Tool {\n private static readonly _registeredEffects = new Set<string>();\n\n /** Name of effect as used in keyins like `fdt effect add`. Ideally one word. */\n protected abstract get effectName(): string;\n /** vertex, fragment, and optional sampleSourcePixel GLSL snippets. */\n protected abstract get source(): ScreenSpaceEffectSource;\n /** Whether the fragment shader should include built-in `textureCoordFromPosition` function. */\n protected abstract get textureCoordFromPosition(): boolean;\n /** Add uniforms, varyings, etc. */\n protected abstract defineEffect(builder: ScreenSpaceEffectBuilder): void;\n\n public override async run(): Promise<boolean> {\n // Avoid conflicts with the names of other registered screen-space effects.\n const name = `fdt ${this.effectName}`;\n if (!AddEffectTool._registeredEffects.has(name)) {\n // Register the effect.\n const builder = IModelApp.renderSystem.createScreenSpaceEffectBuilder({\n name,\n textureCoordFromPosition: this.textureCoordFromPosition,\n source: this.source,\n });\n\n assert(undefined !== builder);\n this.defineEffect(builder);\n builder.finish();\n\n AddEffectTool._registeredEffects.add(name);\n }\n\n const vp = IModelApp.viewManager.selectedView;\n if (vp)\n vp.addScreenSpaceEffect(name);\n\n return true;\n }\n}\n\n/** Removes all screen-space effects from the selected viewport.\n * @beta\n */\nexport class ClearEffectsTool extends Tool {\n public static override toolId = \"ClearEffects\";\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 IModelApp.viewManager.selectedView?.removeScreenSpaceEffects();\n return true;\n }\n}\n\n/** Requests that any viewport to which the specified effect has been applied redraw its contents.\n * Used by tools like [[VignetteConfig]] to update the view after the effect parameters are modified.\n * @beta\n */\nexport function refreshViewportsForEffect(effectName: string): void {\n for (const vp of IModelApp.viewManager) {\n for (const vpEffectName of vp.screenSpaceEffects) {\n if (vpEffectName === effectName) {\n vp.requestRedraw();\n break;\n }\n }\n }\n}\n"]}