@itwin/frontend-devtools 4.3.0-dev.9 → 4.3.1
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.
- package/CHANGELOG.md +48 -1
- package/README.md +5 -0
- package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
- package/lib/cjs/FrontEndDevTools.js +1 -0
- package/lib/cjs/FrontEndDevTools.js.map +1 -1
- package/lib/cjs/tools/ClipTools.d.ts +40 -0
- package/lib/cjs/tools/ClipTools.d.ts.map +1 -1
- package/lib/cjs/tools/ClipTools.js +89 -1
- package/lib/cjs/tools/ClipTools.js.map +1 -1
- package/lib/cjs/widgets/FpsTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/FpsTracker.js +2 -2
- package/lib/cjs/widgets/FpsTracker.js.map +1 -1
- package/lib/cjs/widgets/MemoryTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/MemoryTracker.js +2 -2
- package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.d.ts.map +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.js +2 -2
- package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.d.ts.map +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.js +2 -2
- package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.js +2 -2
- package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
- package/lib/esm/FrontEndDevTools.js +2 -1
- package/lib/esm/FrontEndDevTools.js.map +1 -1
- package/lib/esm/tools/ClipTools.d.ts +40 -0
- package/lib/esm/tools/ClipTools.d.ts.map +1 -1
- package/lib/esm/tools/ClipTools.js +89 -1
- package/lib/esm/tools/ClipTools.js.map +1 -1
- package/lib/esm/widgets/FpsTracker.d.ts.map +1 -1
- package/lib/esm/widgets/FpsTracker.js +2 -2
- package/lib/esm/widgets/FpsTracker.js.map +1 -1
- package/lib/esm/widgets/MemoryTracker.d.ts.map +1 -1
- package/lib/esm/widgets/MemoryTracker.js +2 -2
- package/lib/esm/widgets/MemoryTracker.js.map +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.d.ts.map +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.js +2 -2
- package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.d.ts.map +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.js +2 -2
- package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.d.ts.map +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.js +2 -2
- package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/public/locales/en/FrontendDevTools.json +3 -0
- package/package.json +6 -7
|
@@ -168,12 +168,12 @@ class TileMemoryBreakdown {
|
|
|
168
168
|
else {
|
|
169
169
|
this._div.style.display = "block";
|
|
170
170
|
this.update();
|
|
171
|
-
this._curIntervalId = setInterval(() => this.update(), 500);
|
|
171
|
+
this._curIntervalId = window.setInterval(() => this.update(), 500);
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
clearInterval() {
|
|
175
175
|
if (undefined !== this._curIntervalId) {
|
|
176
|
-
clearInterval(this._curIntervalId);
|
|
176
|
+
window.clearInterval(this._curIntervalId);
|
|
177
177
|
this._curIntervalId = undefined;
|
|
178
178
|
}
|
|
179
179
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { formatMemory } from \"./MemoryTracker\";\r\n\r\ninterface TileMemoryCounter {\r\n numTiles: number;\r\n bytesUsed: number;\r\n}\r\n\r\nenum TileMemorySelector {\r\n Selected, // Tiles selected for display by at least one viewport.\r\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\r\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\r\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\r\n Total, // Total of all the above\r\n Count,\r\n}\r\n\r\nclass TileMemoryTracer {\r\n private readonly _stats = new RenderMemory.Statistics();\r\n private readonly _processedTiles = new Set<Tile>();\r\n public readonly counters: TileMemoryCounter[] = [];\r\n public numSelected = 0;\r\n\r\n public constructor() {\r\n for (let i = 0; i < TileMemorySelector.Count; i++)\r\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\r\n }\r\n\r\n public update(): void {\r\n this.reset();\r\n\r\n const imodels = new Set<IModelConnection>();\r\n const selectedTiles = new Set<Tile>();\r\n for (const vp of IModelApp.viewManager) {\r\n imodels.add(vp.iModel);\r\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\r\n if (tiles)\r\n for (const tile of tiles)\r\n selectedTiles.add(tile);\r\n }\r\n\r\n for (const selected of selectedTiles)\r\n this.add(selected, TileMemorySelector.Selected);\r\n\r\n for (const selected of selectedTiles) {\r\n this.processParent(selected.parent);\r\n this.processChildren(selected.children);\r\n }\r\n\r\n for (const imodel of imodels) {\r\n imodel.tiles.forEachTreeOwner((owner) => {\r\n const tree = owner.tileTree;\r\n if (tree)\r\n this.processOrphan(tree.rootTile);\r\n });\r\n }\r\n\r\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\r\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\r\n }\r\n\r\n private reset(): void {\r\n this._processedTiles.clear();\r\n this.numSelected = 0;\r\n for (const counter of this.counters)\r\n counter.numTiles = counter.bytesUsed = 0;\r\n }\r\n\r\n private add(tile: Tile, selector: TileMemorySelector): void {\r\n this._processedTiles.add(tile);\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n\r\n const bytesUsed = this._stats.totalBytes;\r\n if (bytesUsed > 0) {\r\n const counter = this.counters[selector];\r\n ++counter.numTiles;\r\n counter.bytesUsed += bytesUsed;\r\n }\r\n }\r\n\r\n private processParent(parent: Tile | undefined): void {\r\n if (parent && !this._processedTiles.has(parent)) {\r\n this.add(parent, TileMemorySelector.Ancestors);\r\n this.processParent(parent.parent);\r\n }\r\n }\r\n\r\n private processChildren(children: Tile[] | undefined): void {\r\n if (!children)\r\n return;\r\n\r\n for (const child of children) {\r\n if (!this._processedTiles.has(child)) {\r\n this.add(child, TileMemorySelector.Descendants);\r\n this.processChildren(child.children);\r\n }\r\n }\r\n }\r\n\r\n private processOrphan(tile: Tile): void {\r\n if (!this._processedTiles.has(tile))\r\n this.add(tile, TileMemorySelector.Orphaned);\r\n\r\n const children = tile.children;\r\n if (children)\r\n for (const child of children)\r\n this.processOrphan(child);\r\n }\r\n}\r\n\r\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\r\n\r\nfunction format(count: number, label: string, bytesUsed: number): string {\r\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\r\n}\r\n\r\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\r\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.\r\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\r\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\r\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\r\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\r\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\r\n * - \"Total\" - totals of the above categories.\r\n *\r\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\r\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\r\n * The widget includes a checkbox to toggle tracking and display of these statistics.\r\n * @beta\r\n */\r\nexport class TileMemoryBreakdown {\r\n private readonly _tracer = new TileMemoryTracer();\r\n private readonly _div: HTMLDivElement;\r\n private _curIntervalId?: NodeJS.Timer;\r\n private readonly _statsElements: HTMLElement[] = [];\r\n private readonly _totalsElements: HTMLElement[] = [];\r\n\r\n /** Construct a new breakdown widget as a child of the specified parent element. */\r\n public constructor(parent: HTMLElement) {\r\n createCheckBox({\r\n parent,\r\n name: \"Tile Memory Breakdown\",\r\n id: \"tileMemoryBreakdown\",\r\n handler: (_cb) => this.toggle(),\r\n });\r\n\r\n parent.appendChild(this._div = document.createElement(\"div\"));\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\r\n\r\n const table = document.createElement(\"table\");\r\n table.style.width = \"100%\";\r\n table.setAttribute(\"border\", \"1\");\r\n this._div.appendChild(table);\r\n\r\n const row = document.createElement(\"tr\");\r\n const leftCell = document.createElement(\"td\");\r\n const rightCell = document.createElement(\"td\");\r\n leftCell.style.width = rightCell.style.width = \"50%\";\r\n row.appendChild(leftCell);\r\n row.appendChild(rightCell);\r\n table.appendChild(row);\r\n\r\n for (let i = 0; i < TileMemorySelector.Count; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._statsElements.push(elem);\r\n div.appendChild(elem);\r\n rightCell.appendChild(div);\r\n }\r\n\r\n for (let i = 0; i < 3; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._totalsElements.push(elem);\r\n div.appendChild(elem);\r\n leftCell.appendChild(div);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private toggle(): void {\r\n if (undefined !== this._curIntervalId) {\r\n this._div.style.display = \"none\";\r\n this.clearInterval();\r\n } else {\r\n this._div.style.display = \"block\";\r\n this.update();\r\n this._curIntervalId = setInterval(() => this.update(), 500);\r\n }\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private update(): void {\r\n this._tracer.update();\r\n for (let i = 0; i < this._statsElements.length; i++) {\r\n const counter = this._tracer.counters[i];\r\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\r\n }\r\n\r\n let numUnselected = 0;\r\n let unselectedBytes = 0;\r\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\r\n ++numUnselected;\r\n unselectedBytes += unselected.bytesUsed;\r\n }\r\n\r\n let numSelected = 0;\r\n let selectedBytes = 0;\r\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\r\n ++numSelected;\r\n selectedBytes += selected.bytesUsed;\r\n }\r\n\r\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\r\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\r\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { formatMemory } from \"./MemoryTracker\";\r\n\r\ninterface TileMemoryCounter {\r\n numTiles: number;\r\n bytesUsed: number;\r\n}\r\n\r\nenum TileMemorySelector {\r\n Selected, // Tiles selected for display by at least one viewport.\r\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\r\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\r\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\r\n Total, // Total of all the above\r\n Count,\r\n}\r\n\r\nclass TileMemoryTracer {\r\n private readonly _stats = new RenderMemory.Statistics();\r\n private readonly _processedTiles = new Set<Tile>();\r\n public readonly counters: TileMemoryCounter[] = [];\r\n public numSelected = 0;\r\n\r\n public constructor() {\r\n for (let i = 0; i < TileMemorySelector.Count; i++)\r\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\r\n }\r\n\r\n public update(): void {\r\n this.reset();\r\n\r\n const imodels = new Set<IModelConnection>();\r\n const selectedTiles = new Set<Tile>();\r\n for (const vp of IModelApp.viewManager) {\r\n imodels.add(vp.iModel);\r\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\r\n if (tiles)\r\n for (const tile of tiles)\r\n selectedTiles.add(tile);\r\n }\r\n\r\n for (const selected of selectedTiles)\r\n this.add(selected, TileMemorySelector.Selected);\r\n\r\n for (const selected of selectedTiles) {\r\n this.processParent(selected.parent);\r\n this.processChildren(selected.children);\r\n }\r\n\r\n for (const imodel of imodels) {\r\n imodel.tiles.forEachTreeOwner((owner) => {\r\n const tree = owner.tileTree;\r\n if (tree)\r\n this.processOrphan(tree.rootTile);\r\n });\r\n }\r\n\r\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\r\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\r\n }\r\n\r\n private reset(): void {\r\n this._processedTiles.clear();\r\n this.numSelected = 0;\r\n for (const counter of this.counters)\r\n counter.numTiles = counter.bytesUsed = 0;\r\n }\r\n\r\n private add(tile: Tile, selector: TileMemorySelector): void {\r\n this._processedTiles.add(tile);\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n\r\n const bytesUsed = this._stats.totalBytes;\r\n if (bytesUsed > 0) {\r\n const counter = this.counters[selector];\r\n ++counter.numTiles;\r\n counter.bytesUsed += bytesUsed;\r\n }\r\n }\r\n\r\n private processParent(parent: Tile | undefined): void {\r\n if (parent && !this._processedTiles.has(parent)) {\r\n this.add(parent, TileMemorySelector.Ancestors);\r\n this.processParent(parent.parent);\r\n }\r\n }\r\n\r\n private processChildren(children: Tile[] | undefined): void {\r\n if (!children)\r\n return;\r\n\r\n for (const child of children) {\r\n if (!this._processedTiles.has(child)) {\r\n this.add(child, TileMemorySelector.Descendants);\r\n this.processChildren(child.children);\r\n }\r\n }\r\n }\r\n\r\n private processOrphan(tile: Tile): void {\r\n if (!this._processedTiles.has(tile))\r\n this.add(tile, TileMemorySelector.Orphaned);\r\n\r\n const children = tile.children;\r\n if (children)\r\n for (const child of children)\r\n this.processOrphan(child);\r\n }\r\n}\r\n\r\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\r\n\r\nfunction format(count: number, label: string, bytesUsed: number): string {\r\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\r\n}\r\n\r\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\r\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.\r\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\r\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\r\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\r\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\r\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\r\n * - \"Total\" - totals of the above categories.\r\n *\r\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\r\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\r\n * The widget includes a checkbox to toggle tracking and display of these statistics.\r\n * @beta\r\n */\r\nexport class TileMemoryBreakdown {\r\n private readonly _tracer = new TileMemoryTracer();\r\n private readonly _div: HTMLDivElement;\r\n private _curIntervalId?: number;\r\n private readonly _statsElements: HTMLElement[] = [];\r\n private readonly _totalsElements: HTMLElement[] = [];\r\n\r\n /** Construct a new breakdown widget as a child of the specified parent element. */\r\n public constructor(parent: HTMLElement) {\r\n createCheckBox({\r\n parent,\r\n name: \"Tile Memory Breakdown\",\r\n id: \"tileMemoryBreakdown\",\r\n handler: (_cb) => this.toggle(),\r\n });\r\n\r\n parent.appendChild(this._div = document.createElement(\"div\"));\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\r\n\r\n const table = document.createElement(\"table\");\r\n table.style.width = \"100%\";\r\n table.setAttribute(\"border\", \"1\");\r\n this._div.appendChild(table);\r\n\r\n const row = document.createElement(\"tr\");\r\n const leftCell = document.createElement(\"td\");\r\n const rightCell = document.createElement(\"td\");\r\n leftCell.style.width = rightCell.style.width = \"50%\";\r\n row.appendChild(leftCell);\r\n row.appendChild(rightCell);\r\n table.appendChild(row);\r\n\r\n for (let i = 0; i < TileMemorySelector.Count; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._statsElements.push(elem);\r\n div.appendChild(elem);\r\n rightCell.appendChild(div);\r\n }\r\n\r\n for (let i = 0; i < 3; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._totalsElements.push(elem);\r\n div.appendChild(elem);\r\n leftCell.appendChild(div);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private toggle(): void {\r\n if (undefined !== this._curIntervalId) {\r\n this._div.style.display = \"none\";\r\n this.clearInterval();\r\n } else {\r\n this._div.style.display = \"block\";\r\n this.update();\r\n this._curIntervalId = window.setInterval(() => this.update(), 500);\r\n }\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n window.clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private update(): void {\r\n this._tracer.update();\r\n for (let i = 0; i < this._statsElements.length; i++) {\r\n const counter = this._tracer.counters[i];\r\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\r\n }\r\n\r\n let numUnselected = 0;\r\n let unselectedBytes = 0;\r\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\r\n ++numUnselected;\r\n unselectedBytes += unselected.bytesUsed;\r\n }\r\n\r\n let numSelected = 0;\r\n let selectedBytes = 0;\r\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\r\n ++numSelected;\r\n selectedBytes += selected.bytesUsed;\r\n }\r\n\r\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\r\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\r\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\r\n }\r\n}\r\n"]}
|
|
@@ -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,
|
|
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"}
|
|
@@ -111,7 +111,7 @@ class TileStatisticsTracker {
|
|
|
111
111
|
}
|
|
112
112
|
clearInterval() {
|
|
113
113
|
if (undefined !== this._curIntervalId) {
|
|
114
|
-
clearInterval(this._curIntervalId);
|
|
114
|
+
window.clearInterval(this._curIntervalId);
|
|
115
115
|
this._curIntervalId = undefined;
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -125,7 +125,7 @@ class TileStatisticsTracker {
|
|
|
125
125
|
// Currently off - turn on.
|
|
126
126
|
this._div.style.display = "block";
|
|
127
127
|
this.update();
|
|
128
|
-
this._curIntervalId = setInterval(() => this.update(), 500);
|
|
128
|
+
this._curIntervalId = window.setInterval(() => this.update(), 500);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
update() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileStatisticsTracker.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\r\nimport { createButton } from \"../ui/Button\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { createNumericInput } from \"../ui/NumericInput\";\r\n\r\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\r\ninterface StatEntry {\r\n label: string;\r\n getValue: GetStatValue;\r\n}\r\n\r\nfunction computeProgress(vp: Viewport): number {\r\n const ready = vp.numReadyTiles;\r\n const requested = vp.numRequestedTiles;\r\n const total = ready + requested;\r\n const ratio = (total > 0) ? (ready / total) : 1.0;\r\n return Math.round(ratio * 100);\r\n}\r\n\r\nconst statEntries: StatEntry[] = [\r\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\r\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\r\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\r\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\r\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\r\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\r\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\r\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\r\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\r\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\r\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\r\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\r\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\r\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\r\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\r\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\r\n { getValue: (stats) => Math.round(stats.decoding.mean), label: \"Decoding mean time (ms)\" },\r\n { getValue: (stats) => stats.decoding.max, label: \"Decoding max time (ms)\" },\r\n];\r\n\r\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\r\n\r\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.\r\n * @beta\r\n */\r\nexport class TileStatisticsTracker {\r\n private readonly _statElements: HTMLElement[] = [];\r\n private readonly _div: HTMLDivElement;\r\n private readonly _vp: Viewport;\r\n private _curIntervalId?: NodeJS.Timer;\r\n\r\n public constructor(parent: HTMLElement, vp: Viewport) {\r\n this._vp = vp;\r\n this.addMaxActive(parent);\r\n createCheckBox({\r\n parent,\r\n name: \"Track Tile Requests\",\r\n id: \"stats_trackMemory\",\r\n handler: (_cb) => this.toggle(),\r\n });\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\r\n\r\n const table = document.createElement(\"table\");\r\n table.style.width = \"100%\";\r\n table.setAttribute(\"border\", \"1\");\r\n this._div.appendChild(table);\r\n\r\n const row = document.createElement(\"tr\");\r\n const frameColumn = document.createElement(\"td\");\r\n const globalColumn = document.createElement(\"td\");\r\n frameColumn.style.width = globalColumn.style.width = \"50%\";\r\n row.appendChild(frameColumn);\r\n row.appendChild(globalColumn);\r\n table.appendChild(row);\r\n\r\n for (let i = 0; i < statEntries.length; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._statElements[i] = elem;\r\n div.appendChild(elem);\r\n\r\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\r\n column.appendChild(div);\r\n }\r\n\r\n const resetButton = createButton({\r\n parent: this._div,\r\n value: \"Reset\",\r\n tooltip: \"Reset all cumulative statistics\",\r\n handler: () => this.reset(),\r\n });\r\n resetButton.div.style.textAlign = \"center\";\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private addMaxActive(parent: HTMLElement): void {\r\n const div = document.createElement(\"div\");\r\n\r\n const label = document.createElement(\"label\");\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"maxActiveRequests\";\r\n label.innerText = \"Max Active Requests: \";\r\n div.appendChild(label);\r\n\r\n createNumericInput({\r\n parent: div,\r\n id: \"maxActiveRequests\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 1,\r\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\r\n handler: (value, _input) => this.updateMaxActive(value),\r\n });\r\n\r\n parent.appendChild(div);\r\n }\r\n\r\n private updateMaxActive(value: number): void {\r\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private toggle(): void {\r\n if (undefined !== this._curIntervalId) {\r\n // Currently on - turn off.\r\n this._div.style.display = \"none\";\r\n this.clearInterval();\r\n } else {\r\n // Currently off - turn on.\r\n this._div.style.display = \"block\";\r\n this.update();\r\n this._curIntervalId = setInterval(() => this.update(), 500);\r\n }\r\n }\r\n\r\n private update(): void {\r\n const stats = IModelApp.tileAdmin.statistics;\r\n for (let i = 0; i < statEntries.length; i++) {\r\n const stat = statEntries[i];\r\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\r\n this._statElements[i].innerText = label;\r\n }\r\n }\r\n\r\n private reset(): void {\r\n IModelApp.tileAdmin.resetStatistics();\r\n this.update();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TileStatisticsTracker.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\r\nimport { createButton } from \"../ui/Button\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { createNumericInput } from \"../ui/NumericInput\";\r\n\r\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\r\ninterface StatEntry {\r\n label: string;\r\n getValue: GetStatValue;\r\n}\r\n\r\nfunction computeProgress(vp: Viewport): number {\r\n const ready = vp.numReadyTiles;\r\n const requested = vp.numRequestedTiles;\r\n const total = ready + requested;\r\n const ratio = (total > 0) ? (ready / total) : 1.0;\r\n return Math.round(ratio * 100);\r\n}\r\n\r\nconst statEntries: StatEntry[] = [\r\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\r\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\r\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\r\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\r\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\r\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\r\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\r\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\r\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\r\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\r\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\r\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\r\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\r\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\r\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\r\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\r\n { getValue: (stats) => Math.round(stats.decoding.mean), label: \"Decoding mean time (ms)\" },\r\n { getValue: (stats) => stats.decoding.max, label: \"Decoding max time (ms)\" },\r\n];\r\n\r\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\r\n\r\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.\r\n * @beta\r\n */\r\nexport class TileStatisticsTracker {\r\n private readonly _statElements: HTMLElement[] = [];\r\n private readonly _div: HTMLDivElement;\r\n private readonly _vp: Viewport;\r\n private _curIntervalId?: number;\r\n\r\n public constructor(parent: HTMLElement, vp: Viewport) {\r\n this._vp = vp;\r\n this.addMaxActive(parent);\r\n createCheckBox({\r\n parent,\r\n name: \"Track Tile Requests\",\r\n id: \"stats_trackMemory\",\r\n handler: (_cb) => this.toggle(),\r\n });\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\r\n\r\n const table = document.createElement(\"table\");\r\n table.style.width = \"100%\";\r\n table.setAttribute(\"border\", \"1\");\r\n this._div.appendChild(table);\r\n\r\n const row = document.createElement(\"tr\");\r\n const frameColumn = document.createElement(\"td\");\r\n const globalColumn = document.createElement(\"td\");\r\n frameColumn.style.width = globalColumn.style.width = \"50%\";\r\n row.appendChild(frameColumn);\r\n row.appendChild(globalColumn);\r\n table.appendChild(row);\r\n\r\n for (let i = 0; i < statEntries.length; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._statElements[i] = elem;\r\n div.appendChild(elem);\r\n\r\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\r\n column.appendChild(div);\r\n }\r\n\r\n const resetButton = createButton({\r\n parent: this._div,\r\n value: \"Reset\",\r\n tooltip: \"Reset all cumulative statistics\",\r\n handler: () => this.reset(),\r\n });\r\n resetButton.div.style.textAlign = \"center\";\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private addMaxActive(parent: HTMLElement): void {\r\n const div = document.createElement(\"div\");\r\n\r\n const label = document.createElement(\"label\");\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"maxActiveRequests\";\r\n label.innerText = \"Max Active Requests: \";\r\n div.appendChild(label);\r\n\r\n createNumericInput({\r\n parent: div,\r\n id: \"maxActiveRequests\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 1,\r\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\r\n handler: (value, _input) => this.updateMaxActive(value),\r\n });\r\n\r\n parent.appendChild(div);\r\n }\r\n\r\n private updateMaxActive(value: number): void {\r\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n window.clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private toggle(): void {\r\n if (undefined !== this._curIntervalId) {\r\n // Currently on - turn off.\r\n this._div.style.display = \"none\";\r\n this.clearInterval();\r\n } else {\r\n // Currently off - turn on.\r\n this._div.style.display = \"block\";\r\n this.update();\r\n this._curIntervalId = window.setInterval(() => this.update(), 500);\r\n }\r\n }\r\n\r\n private update(): void {\r\n const stats = IModelApp.tileAdmin.statistics;\r\n for (let i = 0; i < statEntries.length; i++) {\r\n const stat = statEntries[i];\r\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\r\n this._statElements[i].innerText = label;\r\n }\r\n }\r\n\r\n private reset(): void {\r\n IModelApp.tileAdmin.resetStatistics();\r\n this.update();\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrontEndDevTools.d.ts","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAIA;;GAEG;AAkEH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IAEpC;;;;;;;OAOG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FrontEndDevTools.d.ts","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAIA;;GAEG;AAkEH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IAEpC;;;;;;;OAOG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoK/C,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
|
|
@@ -18,7 +18,7 @@ import { MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool,
|
|
|
18
18
|
import { ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool, FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool, ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel, ViewportTileSizeModifierTool, } from "./tools/ViewportTools";
|
|
19
19
|
import { AnimationIntervalTool } from "./tools/AnimationIntervalTool";
|
|
20
20
|
import { ChangeUnitsTool } from "./tools/ChangeUnitsTool";
|
|
21
|
-
import { ClipColorTool, TestClipStyleTool, ToggleSectionCutTool } from "./tools/ClipTools";
|
|
21
|
+
import { ClipColorTool, ClipIntersectionTool, TestClipStyleTool, ToggleSectionCutTool } from "./tools/ClipTools";
|
|
22
22
|
import { ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool, SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool, } from "./tools/DisplayStyleTools";
|
|
23
23
|
import { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from "./tools/ScheduleScriptTools";
|
|
24
24
|
import { ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool, } from "./tools/EmphasizeElementsTool";
|
|
@@ -87,6 +87,7 @@ class FrontendDevTools {
|
|
|
87
87
|
ClearEmphasizedElementsTool,
|
|
88
88
|
ClearIsolatedElementsTool,
|
|
89
89
|
ClipColorTool,
|
|
90
|
+
ClipIntersectionTool,
|
|
90
91
|
CompileShadersTool,
|
|
91
92
|
DefaultTileSizeModifierTool,
|
|
92
93
|
DetachMapLayersTool,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrontEndDevTools.js","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utilities\r\n */\r\n\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { EdgeDetectionEffect, EmbossEffect, GaussianBlurEffect, SharpenEffect, SharpnessEffect, UnsharpenEffect } from \"./effects/Convolution\";\r\nimport { ClearEffectsTool } from \"./effects/EffectTools\";\r\nimport { ExplosionEffect } from \"./effects/Explosion\";\r\nimport { FlipImageConfig, FlipImageEffect } from \"./effects/FlipImage\";\r\nimport { LensDistortionConfig, LensDistortionEffect } from \"./effects/LensDistortion\";\r\nimport { SaturationConfig, SaturationEffect } from \"./effects/Saturation\";\r\nimport { SnowEffect } from \"./effects/Snow\";\r\nimport { VignetteConfig, VignetteEffect } from \"./effects/Vignette\";\r\nimport {\r\n MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool, MaskBackgroundMapByModelTool, MaskBackgroundMapBySubCategoryTool, MaskRealityModelByElementTool, MaskRealityModelByExcludedElementTool,\r\n MaskRealityModelByModelTool, MaskRealityModelBySubCategoryTool, SetHigherPriorityRealityModelMasking, SetMapHigherPriorityMasking, UnmaskMapTool, UnmaskRealityModelTool,\r\n} from \"./tools/PlanarMaskTools\";\r\nimport {\r\n ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool,\r\n FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool,\r\n ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n} from \"./tools/ViewportTools\";\r\nimport { AnimationIntervalTool } from \"./tools/AnimationIntervalTool\";\r\nimport { ChangeUnitsTool } from \"./tools/ChangeUnitsTool\";\r\nimport { ClipColorTool, TestClipStyleTool, ToggleSectionCutTool } from \"./tools/ClipTools\";\r\nimport {\r\n ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool,\r\n SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool,\r\n} from \"./tools/DisplayStyleTools\";\r\nimport { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from \"./tools/ScheduleScriptTools\";\r\nimport {\r\n ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool,\r\n} from \"./tools/EmphasizeElementsTool\";\r\nimport { ToggleFrustumSnapshotTool, ToggleSelectedViewFrustumTool, ToggleShadowFrustumTool } from \"./tools/FrustumDecoration\";\r\nimport { InspectElementTool } from \"./tools/InspectElementTool\";\r\nimport {\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n AttachArcGISMapLayerByUrlTool, AttachMapLayerTool, AttachMapOverlayTool, AttachModelMapLayerTool, AttachTileURLMapLayerByUrlTool, AttachWmsMapLayerByUrlTool,\r\n AttachWmtsMapLayerByUrlTool, DetachMapLayersTool, MapBaseColorTool, MapBaseTransparencyTool, MapBaseVisibilityTool, MapLayerSubLayerVisibilityTool,\r\n MapLayerTransparencyTool, MapLayerVisibilityTool, MapLayerZoomTool, ReorderMapLayers, SetMapBaseTool, ToggleTerrainTool,\r\n} from \"./tools/MapLayerTool\";\r\nimport { MeasureTileLoadTimeTool } from \"./tools/MeasureTileLoadTime\";\r\nimport {\r\n ClearModelAppearanceOverrides, SetModelColorTool, SetModelEmphasizedTool, SetModelIgnoresMaterialsTool, SetModelLineCodeTool,\r\n SetModelLineWeightTool, SetModelLocateTool, SetModelTransparencyTool,\r\n} from \"./tools/ModelAppearanceTools\";\r\nimport { ChangePlanProjectionSettingsTool, DumpPlanProjectionSettingsTool, OverrideSubCategoryPriorityTool } from \"./tools/PlanProjectionTools\";\r\nimport { ToggleProjectExtentsTool } from \"./tools/ProjectExtents\";\r\nimport {\r\n AttachCesiumAssetTool, AttachRealityModelTool, ClearRealityModelAppearanceOverrides, DetachRealityModelTool, SaveRealityModelTool,\r\n SetRealityModelColorTool, SetRealityModelEmphasizedTool, SetRealityModelLocateTool, SetRealityModelTransparencyTool, ToggleOSMBuildingDisplay,\r\n} from \"./tools/RealityModelTools\";\r\nimport { RealityTransitionTool } from \"./tools/RealityTransitionTool\";\r\nimport { CompileShadersTool, LoseWebGLContextTool, ToggleDPIForLODTool } from \"./tools/RenderSystemTools\";\r\nimport {\r\n SetAASamplesTool, ToggleDrapeFrustumTool, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\r\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\r\n} from \"./tools/RenderTargetTools\";\r\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\r\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\r\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\r\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\r\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\r\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\r\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\r\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\r\n\r\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\r\n * @beta\r\n */\r\nexport class FrontendDevTools {\r\n private static _initialized = false;\r\n\r\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await FrontendDevTools.initialize();\r\n * ```\r\n * @beta\r\n */\r\n public static async initialize(): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n this._initialized = true;\r\n\r\n // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\r\n\r\n const namespace = \"FrontendDevTools\";\r\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\r\n const tools = [\r\n AttachMapLayerTool,\r\n AttachMapOverlayTool,\r\n AttachModelMapLayerTool,\r\n AttachArcGISMapLayerByUrlTool,\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n AttachWmsMapLayerByUrlTool,\r\n AttachWmtsMapLayerByUrlTool,\r\n AttachTileURLMapLayerByUrlTool,\r\n AnimationIntervalTool,\r\n ApplyRenderingStyleTool,\r\n ApplyViewByIdTool,\r\n ApplyViewTool,\r\n ChangeBackgroundColorTool,\r\n ChangeCameraTool,\r\n ChangeEmphasisSettingsTool,\r\n ChangeFlashSettingsTool,\r\n ChangeHiliteModeTool,\r\n ChangeHiliteSettingsTool,\r\n ChangePlanProjectionSettingsTool,\r\n ChangeUnitsTool,\r\n ChangeViewFlagsTool,\r\n ClearEffectsTool,\r\n ClearEmphasizedElementsTool,\r\n ClearIsolatedElementsTool,\r\n ClipColorTool,\r\n CompileShadersTool,\r\n DefaultTileSizeModifierTool,\r\n DetachMapLayersTool,\r\n DumpPlanProjectionSettingsTool,\r\n DumpSelectionSetTool,\r\n EdgeDetectionEffect,\r\n EmbossEffect,\r\n ElementIdFromSourceAspectIdTool,\r\n EmphasizeSelectedElementsTool,\r\n EmphasizeVisibleElementsTool,\r\n ExplosionEffect,\r\n FadeOutTool,\r\n FlipImageConfig,\r\n FlipImageEffect,\r\n FreezeSceneTool,\r\n GaussianBlurEffect,\r\n InspectElementTool,\r\n IsolateSelectedElementsTool,\r\n LensDistortionConfig,\r\n LensDistortionEffect,\r\n LoseWebGLContextTool,\r\n MapLayerTransparencyTool,\r\n MapLayerVisibilityTool,\r\n MapLayerSubLayerVisibilityTool,\r\n MapLayerZoomTool,\r\n MapBaseColorTool,\r\n MapBaseTransparencyTool,\r\n MapBaseVisibilityTool,\r\n MeasureTileLoadTimeTool,\r\n OverrideSubCategoryTool,\r\n OverrideSubCategoryPriorityTool,\r\n QueryScheduleScriptTool,\r\n RealityTransitionTool,\r\n ReorderMapLayers,\r\n ReportWebGLCompatibilityTool,\r\n ReverseScheduleScriptTool,\r\n SaturationConfig,\r\n SaturationEffect,\r\n SaveRenderingStyleTool,\r\n SaveViewTool,\r\n SelectElementsByIdTool,\r\n SetAASamplesTool,\r\n SetAspectRatioSkewTool,\r\n SetScheduleScriptTool,\r\n ToggleVolClassIntersect,\r\n SetMapBaseTool,\r\n SharpenEffect,\r\n SharpnessEffect,\r\n ShowTileVolumesTool,\r\n SkyCubeTool,\r\n SkySphereTool,\r\n SnowEffect,\r\n SourceAspectIdFromElementIdTool,\r\n TestClipStyleTool,\r\n Toggle3dManipulationsTool,\r\n ToggleDrawingGraphicsTool,\r\n ToggleDPIForLODTool,\r\n ToggleDrapeFrustumTool,\r\n ToggleFrustumSnapshotTool,\r\n ToggleNormalMaps,\r\n TogglePrimitiveVisibilityTool,\r\n ToggleProjectExtentsTool,\r\n ToggleReadPixelsTool,\r\n ToggleSectionDrawingSpatialViewTool,\r\n ToggleSelectedViewFrustumTool,\r\n ToggleShadowFrustumTool,\r\n ToggleSkyboxTool,\r\n ToggleTileRequestDecorationTool,\r\n ToggleTileTreeBoundsDecorationTool,\r\n ToggleTileTreeReferencesTool,\r\n ToggleToolTipsTool,\r\n ToggleViewAttachmentBoundariesTool,\r\n ToggleViewAttachmentClipShapesTool,\r\n ToggleViewAttachmentsTool,\r\n ToggleWiremeshTool,\r\n ToggleRealityTileBounds,\r\n ToggleRealityTilePreload,\r\n ToggleRealityTileLogging,\r\n ToggleRealityTileFreeze,\r\n ToggleSectionCutTool,\r\n ToggleTerrainTool,\r\n UnsharpenEffect,\r\n ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n VignetteConfig,\r\n VignetteEffect,\r\n AttachRealityModelTool,\r\n DetachRealityModelTool,\r\n SaveRealityModelTool,\r\n SetGpuMemoryLimitTool,\r\n SetRealityModelLocateTool,\r\n SetRealityModelEmphasizedTool,\r\n SetRealityModelTransparencyTool,\r\n SetRealityModelColorTool,\r\n SetModelLocateTool,\r\n SetModelEmphasizedTool,\r\n SetModelTransparencyTool,\r\n SetModelColorTool,\r\n SetModelLineWeightTool,\r\n SetModelLineCodeTool,\r\n SetModelIgnoresMaterialsTool,\r\n ClearRealityModelAppearanceOverrides,\r\n ClearModelAppearanceOverrides,\r\n AttachCesiumAssetTool,\r\n ToggleOSMBuildingDisplay,\r\n SetHigherPriorityRealityModelMasking,\r\n SetMapHigherPriorityMasking,\r\n MaskRealityModelByModelTool,\r\n MaskRealityModelBySubCategoryTool,\r\n MaskRealityModelByElementTool,\r\n MaskRealityModelByExcludedElementTool,\r\n UnmaskRealityModelTool,\r\n MaskBackgroundMapByModelTool,\r\n MaskBackgroundMapBySubCategoryTool,\r\n MaskBackgroundMapByElementTool,\r\n MaskBackgroundMapByExcludedElementTool,\r\n UnmaskMapTool,\r\n WoWIgnoreBackgroundTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(namespace);\r\n\r\n return namespacePromise;\r\n }\r\n\r\n private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"FrontEndDevTools.js","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utilities\r\n */\r\n\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { EdgeDetectionEffect, EmbossEffect, GaussianBlurEffect, SharpenEffect, SharpnessEffect, UnsharpenEffect } from \"./effects/Convolution\";\r\nimport { ClearEffectsTool } from \"./effects/EffectTools\";\r\nimport { ExplosionEffect } from \"./effects/Explosion\";\r\nimport { FlipImageConfig, FlipImageEffect } from \"./effects/FlipImage\";\r\nimport { LensDistortionConfig, LensDistortionEffect } from \"./effects/LensDistortion\";\r\nimport { SaturationConfig, SaturationEffect } from \"./effects/Saturation\";\r\nimport { SnowEffect } from \"./effects/Snow\";\r\nimport { VignetteConfig, VignetteEffect } from \"./effects/Vignette\";\r\nimport {\r\n MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool, MaskBackgroundMapByModelTool, MaskBackgroundMapBySubCategoryTool, MaskRealityModelByElementTool, MaskRealityModelByExcludedElementTool,\r\n MaskRealityModelByModelTool, MaskRealityModelBySubCategoryTool, SetHigherPriorityRealityModelMasking, SetMapHigherPriorityMasking, UnmaskMapTool, UnmaskRealityModelTool,\r\n} from \"./tools/PlanarMaskTools\";\r\nimport {\r\n ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool,\r\n FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool,\r\n ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n} from \"./tools/ViewportTools\";\r\nimport { AnimationIntervalTool } from \"./tools/AnimationIntervalTool\";\r\nimport { ChangeUnitsTool } from \"./tools/ChangeUnitsTool\";\r\nimport { ClipColorTool, ClipIntersectionTool, TestClipStyleTool, ToggleSectionCutTool } from \"./tools/ClipTools\";\r\nimport {\r\n ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool,\r\n SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool,\r\n} from \"./tools/DisplayStyleTools\";\r\nimport { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from \"./tools/ScheduleScriptTools\";\r\nimport {\r\n ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool,\r\n} from \"./tools/EmphasizeElementsTool\";\r\nimport { ToggleFrustumSnapshotTool, ToggleSelectedViewFrustumTool, ToggleShadowFrustumTool } from \"./tools/FrustumDecoration\";\r\nimport { InspectElementTool } from \"./tools/InspectElementTool\";\r\nimport {\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n AttachArcGISMapLayerByUrlTool, AttachMapLayerTool, AttachMapOverlayTool, AttachModelMapLayerTool, AttachTileURLMapLayerByUrlTool, AttachWmsMapLayerByUrlTool,\r\n AttachWmtsMapLayerByUrlTool, DetachMapLayersTool, MapBaseColorTool, MapBaseTransparencyTool, MapBaseVisibilityTool, MapLayerSubLayerVisibilityTool,\r\n MapLayerTransparencyTool, MapLayerVisibilityTool, MapLayerZoomTool, ReorderMapLayers, SetMapBaseTool, ToggleTerrainTool,\r\n} from \"./tools/MapLayerTool\";\r\nimport { MeasureTileLoadTimeTool } from \"./tools/MeasureTileLoadTime\";\r\nimport {\r\n ClearModelAppearanceOverrides, SetModelColorTool, SetModelEmphasizedTool, SetModelIgnoresMaterialsTool, SetModelLineCodeTool,\r\n SetModelLineWeightTool, SetModelLocateTool, SetModelTransparencyTool,\r\n} from \"./tools/ModelAppearanceTools\";\r\nimport { ChangePlanProjectionSettingsTool, DumpPlanProjectionSettingsTool, OverrideSubCategoryPriorityTool } from \"./tools/PlanProjectionTools\";\r\nimport { ToggleProjectExtentsTool } from \"./tools/ProjectExtents\";\r\nimport {\r\n AttachCesiumAssetTool, AttachRealityModelTool, ClearRealityModelAppearanceOverrides, DetachRealityModelTool, SaveRealityModelTool,\r\n SetRealityModelColorTool, SetRealityModelEmphasizedTool, SetRealityModelLocateTool, SetRealityModelTransparencyTool, ToggleOSMBuildingDisplay,\r\n} from \"./tools/RealityModelTools\";\r\nimport { RealityTransitionTool } from \"./tools/RealityTransitionTool\";\r\nimport { CompileShadersTool, LoseWebGLContextTool, ToggleDPIForLODTool } from \"./tools/RenderSystemTools\";\r\nimport {\r\n SetAASamplesTool, ToggleDrapeFrustumTool, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\r\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\r\n} from \"./tools/RenderTargetTools\";\r\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\r\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\r\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\r\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\r\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\r\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\r\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\r\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\r\n\r\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\r\n * @beta\r\n */\r\nexport class FrontendDevTools {\r\n private static _initialized = false;\r\n\r\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await FrontendDevTools.initialize();\r\n * ```\r\n * @beta\r\n */\r\n public static async initialize(): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n this._initialized = true;\r\n\r\n // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\r\n\r\n const namespace = \"FrontendDevTools\";\r\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\r\n const tools = [\r\n AttachMapLayerTool,\r\n AttachMapOverlayTool,\r\n AttachModelMapLayerTool,\r\n AttachArcGISMapLayerByUrlTool,\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n AttachWmsMapLayerByUrlTool,\r\n AttachWmtsMapLayerByUrlTool,\r\n AttachTileURLMapLayerByUrlTool,\r\n AnimationIntervalTool,\r\n ApplyRenderingStyleTool,\r\n ApplyViewByIdTool,\r\n ApplyViewTool,\r\n ChangeBackgroundColorTool,\r\n ChangeCameraTool,\r\n ChangeEmphasisSettingsTool,\r\n ChangeFlashSettingsTool,\r\n ChangeHiliteModeTool,\r\n ChangeHiliteSettingsTool,\r\n ChangePlanProjectionSettingsTool,\r\n ChangeUnitsTool,\r\n ChangeViewFlagsTool,\r\n ClearEffectsTool,\r\n ClearEmphasizedElementsTool,\r\n ClearIsolatedElementsTool,\r\n ClipColorTool,\r\n ClipIntersectionTool,\r\n CompileShadersTool,\r\n DefaultTileSizeModifierTool,\r\n DetachMapLayersTool,\r\n DumpPlanProjectionSettingsTool,\r\n DumpSelectionSetTool,\r\n EdgeDetectionEffect,\r\n EmbossEffect,\r\n ElementIdFromSourceAspectIdTool,\r\n EmphasizeSelectedElementsTool,\r\n EmphasizeVisibleElementsTool,\r\n ExplosionEffect,\r\n FadeOutTool,\r\n FlipImageConfig,\r\n FlipImageEffect,\r\n FreezeSceneTool,\r\n GaussianBlurEffect,\r\n InspectElementTool,\r\n IsolateSelectedElementsTool,\r\n LensDistortionConfig,\r\n LensDistortionEffect,\r\n LoseWebGLContextTool,\r\n MapLayerTransparencyTool,\r\n MapLayerVisibilityTool,\r\n MapLayerSubLayerVisibilityTool,\r\n MapLayerZoomTool,\r\n MapBaseColorTool,\r\n MapBaseTransparencyTool,\r\n MapBaseVisibilityTool,\r\n MeasureTileLoadTimeTool,\r\n OverrideSubCategoryTool,\r\n OverrideSubCategoryPriorityTool,\r\n QueryScheduleScriptTool,\r\n RealityTransitionTool,\r\n ReorderMapLayers,\r\n ReportWebGLCompatibilityTool,\r\n ReverseScheduleScriptTool,\r\n SaturationConfig,\r\n SaturationEffect,\r\n SaveRenderingStyleTool,\r\n SaveViewTool,\r\n SelectElementsByIdTool,\r\n SetAASamplesTool,\r\n SetAspectRatioSkewTool,\r\n SetScheduleScriptTool,\r\n ToggleVolClassIntersect,\r\n SetMapBaseTool,\r\n SharpenEffect,\r\n SharpnessEffect,\r\n ShowTileVolumesTool,\r\n SkyCubeTool,\r\n SkySphereTool,\r\n SnowEffect,\r\n SourceAspectIdFromElementIdTool,\r\n TestClipStyleTool,\r\n Toggle3dManipulationsTool,\r\n ToggleDrawingGraphicsTool,\r\n ToggleDPIForLODTool,\r\n ToggleDrapeFrustumTool,\r\n ToggleFrustumSnapshotTool,\r\n ToggleNormalMaps,\r\n TogglePrimitiveVisibilityTool,\r\n ToggleProjectExtentsTool,\r\n ToggleReadPixelsTool,\r\n ToggleSectionDrawingSpatialViewTool,\r\n ToggleSelectedViewFrustumTool,\r\n ToggleShadowFrustumTool,\r\n ToggleSkyboxTool,\r\n ToggleTileRequestDecorationTool,\r\n ToggleTileTreeBoundsDecorationTool,\r\n ToggleTileTreeReferencesTool,\r\n ToggleToolTipsTool,\r\n ToggleViewAttachmentBoundariesTool,\r\n ToggleViewAttachmentClipShapesTool,\r\n ToggleViewAttachmentsTool,\r\n ToggleWiremeshTool,\r\n ToggleRealityTileBounds,\r\n ToggleRealityTilePreload,\r\n ToggleRealityTileLogging,\r\n ToggleRealityTileFreeze,\r\n ToggleSectionCutTool,\r\n ToggleTerrainTool,\r\n UnsharpenEffect,\r\n ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n VignetteConfig,\r\n VignetteEffect,\r\n AttachRealityModelTool,\r\n DetachRealityModelTool,\r\n SaveRealityModelTool,\r\n SetGpuMemoryLimitTool,\r\n SetRealityModelLocateTool,\r\n SetRealityModelEmphasizedTool,\r\n SetRealityModelTransparencyTool,\r\n SetRealityModelColorTool,\r\n SetModelLocateTool,\r\n SetModelEmphasizedTool,\r\n SetModelTransparencyTool,\r\n SetModelColorTool,\r\n SetModelLineWeightTool,\r\n SetModelLineCodeTool,\r\n SetModelIgnoresMaterialsTool,\r\n ClearRealityModelAppearanceOverrides,\r\n ClearModelAppearanceOverrides,\r\n AttachCesiumAssetTool,\r\n ToggleOSMBuildingDisplay,\r\n SetHigherPriorityRealityModelMasking,\r\n SetMapHigherPriorityMasking,\r\n MaskRealityModelByModelTool,\r\n MaskRealityModelBySubCategoryTool,\r\n MaskRealityModelByElementTool,\r\n MaskRealityModelByExcludedElementTool,\r\n UnmaskRealityModelTool,\r\n MaskBackgroundMapByModelTool,\r\n MaskBackgroundMapBySubCategoryTool,\r\n MaskBackgroundMapByElementTool,\r\n MaskBackgroundMapByExcludedElementTool,\r\n UnmaskMapTool,\r\n WoWIgnoreBackgroundTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(namespace);\r\n\r\n return namespacePromise;\r\n }\r\n\r\n private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
|
|
@@ -37,6 +37,46 @@ export declare class ClipColorTool extends Tool {
|
|
|
37
37
|
*/
|
|
38
38
|
parseAndRun(...args: string[]): Promise<boolean>;
|
|
39
39
|
}
|
|
40
|
+
/** This tool specifies or un-specifies a color and width to use for pixels within the specified width of a clip plane.
|
|
41
|
+
* Arguments can be:
|
|
42
|
+
* - off
|
|
43
|
+
* - default
|
|
44
|
+
* - color <color string>
|
|
45
|
+
* - width <number>
|
|
46
|
+
* <color string> must be in one of the following forms:
|
|
47
|
+
* "rgb(255,0,0)"
|
|
48
|
+
* "rgba(255,0,0,255)"
|
|
49
|
+
* "rgb(100%,0%,0%)"
|
|
50
|
+
* "hsl(120,50%,50%)"
|
|
51
|
+
* "#rrbbgg"
|
|
52
|
+
* "blanchedAlmond" (see possible values from [[ColorByName]]). Case insensitive.
|
|
53
|
+
* @see [ColorDef]
|
|
54
|
+
* @beta
|
|
55
|
+
*/
|
|
56
|
+
export declare class ClipIntersectionTool extends Tool {
|
|
57
|
+
static toolId: string;
|
|
58
|
+
static get minArgs(): number;
|
|
59
|
+
static get maxArgs(): number;
|
|
60
|
+
private _toggleIntersectionStyle;
|
|
61
|
+
private _defaultClipIntersection;
|
|
62
|
+
private setClipIntersection;
|
|
63
|
+
/** This runs the tool using the given arguments, specifying or unspecifying a color and width to use for pixels within the specified width of a clip plane.
|
|
64
|
+
* Arguments can be:
|
|
65
|
+
* - off
|
|
66
|
+
* - default
|
|
67
|
+
* - color <color string>
|
|
68
|
+
* - width <number>
|
|
69
|
+
* <color string> must be in one of the following forms:
|
|
70
|
+
* "rgb(255,0,0)"
|
|
71
|
+
* "rgba(255,0,0,255)"
|
|
72
|
+
* "rgb(100%,0%,0%)"
|
|
73
|
+
* "hsl(120,50%,50%)"
|
|
74
|
+
* "#rrbbgg"
|
|
75
|
+
* "blanchedAlmond" (see possible values from [[ColorByName]]). Case insensitive.
|
|
76
|
+
* @beta
|
|
77
|
+
*/
|
|
78
|
+
parseAndRun(...args: string[]): Promise<boolean>;
|
|
79
|
+
}
|
|
40
80
|
/** Controls a view state's view details' flag for producing cut geometry for a clip style.
|
|
41
81
|
* @beta
|
|
42
82
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipTools.d.ts","sourceRoot":"","sources":["../../../src/tools/ClipTools.ts"],"names":[],"mappings":"AAYA,OAAO,EAAa,IAAI,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,SAAQ,IAAI;IACrC,OAAuB,MAAM,SAAmB;IAChD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,YAAY;IASpB;;;;;;;;;;;;;OAaG;IACmB,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAcvE;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,IAAI;IAC5C,OAAuB,MAAM,SAAsB;IACnD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD;;OAEG;IACmB,GAAG,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBzE;;OAEG;IACmB,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,OAAuB,MAAM,SAAmB;IAChD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,SAAS,CAAS;IAE1B,cAAuB,SAAS,YAAmB;cAEnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;cAKvC,OAAO,CAAC,EAAE,EAAE,QAAQ;CA+BrC"}
|
|
1
|
+
{"version":3,"file":"ClipTools.d.ts","sourceRoot":"","sources":["../../../src/tools/ClipTools.ts"],"names":[],"mappings":"AAYA,OAAO,EAAa,IAAI,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,SAAQ,IAAI;IACrC,OAAuB,MAAM,SAAmB;IAChD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,YAAY;IASpB;;;;;;;;;;;;;OAaG;IACmB,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAcvE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,oBAAqB,SAAQ,IAAI;IAC5C,OAAuB,MAAM,SAA0B;IACvD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,mBAAmB;IAmB3B;;;;;;;;;;;;;;OAcG;IACmB,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAevE;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,IAAI;IAC5C,OAAuB,MAAM,SAAsB;IACnD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD;;OAEG;IACmB,GAAG,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBzE;;OAEG;IACmB,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,OAAuB,MAAM,SAAmB;IAChD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAElD,OAAO,CAAC,SAAS,CAAS;IAE1B,cAAuB,SAAS,YAAmB;cAEnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;cAKvC,OAAO,CAAC,EAAE,EAAE,QAAQ;CA+BrC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Tools
|
|
7
7
|
*/
|
|
8
|
-
import { ClipStyle, ColorByName, ColorDef, LinePixels, RenderMode, RgbColor, } from "@itwin/core-common";
|
|
8
|
+
import { ClipIntersectionStyle, ClipStyle, ColorByName, ColorDef, LinePixels, RenderMode, RgbColor, } from "@itwin/core-common";
|
|
9
9
|
import { IModelApp, Tool } from "@itwin/core-frontend";
|
|
10
10
|
import { parseToggle } from "./parseToggle";
|
|
11
11
|
import { parseBoolean } from "./parseBoolean";
|
|
@@ -72,6 +72,94 @@ class ClipColorTool extends Tool {
|
|
|
72
72
|
}
|
|
73
73
|
ClipColorTool.toolId = "ClipColorTool";
|
|
74
74
|
export { ClipColorTool };
|
|
75
|
+
/** This tool specifies or un-specifies a color and width to use for pixels within the specified width of a clip plane.
|
|
76
|
+
* Arguments can be:
|
|
77
|
+
* - off
|
|
78
|
+
* - default
|
|
79
|
+
* - color <color string>
|
|
80
|
+
* - width <number>
|
|
81
|
+
* <color string> must be in one of the following forms:
|
|
82
|
+
* "rgb(255,0,0)"
|
|
83
|
+
* "rgba(255,0,0,255)"
|
|
84
|
+
* "rgb(100%,0%,0%)"
|
|
85
|
+
* "hsl(120,50%,50%)"
|
|
86
|
+
* "#rrbbgg"
|
|
87
|
+
* "blanchedAlmond" (see possible values from [[ColorByName]]). Case insensitive.
|
|
88
|
+
* @see [ColorDef]
|
|
89
|
+
* @beta
|
|
90
|
+
*/
|
|
91
|
+
class ClipIntersectionTool extends Tool {
|
|
92
|
+
static get minArgs() { return 0; }
|
|
93
|
+
static get maxArgs() { return 4; }
|
|
94
|
+
_toggleIntersectionStyle(toggle) {
|
|
95
|
+
const vp = IModelApp.viewManager.selectedView;
|
|
96
|
+
if (undefined !== vp) {
|
|
97
|
+
const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};
|
|
98
|
+
props.colorizeIntersection = toggle;
|
|
99
|
+
vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_defaultClipIntersection() {
|
|
103
|
+
const vp = IModelApp.viewManager.selectedView;
|
|
104
|
+
if (undefined !== vp) {
|
|
105
|
+
const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};
|
|
106
|
+
if (!props.intersectionStyle) {
|
|
107
|
+
props.intersectionStyle = ClipIntersectionStyle.defaults;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
props.intersectionStyle.color = RgbColor.fromColorDef(ColorDef.white);
|
|
111
|
+
props.intersectionStyle.width = 1;
|
|
112
|
+
}
|
|
113
|
+
vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
setClipIntersection(colStr, width) {
|
|
117
|
+
const vp = IModelApp.viewManager.selectedView;
|
|
118
|
+
if (vp) {
|
|
119
|
+
const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};
|
|
120
|
+
if (!props.intersectionStyle) {
|
|
121
|
+
props.intersectionStyle = ClipIntersectionStyle.defaults;
|
|
122
|
+
}
|
|
123
|
+
if (colStr) {
|
|
124
|
+
props.intersectionStyle.color = RgbColor.fromColorDef(ColorDef.fromString(colStr));
|
|
125
|
+
}
|
|
126
|
+
if (width) {
|
|
127
|
+
props.intersectionStyle.width = width;
|
|
128
|
+
}
|
|
129
|
+
vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** This runs the tool using the given arguments, specifying or unspecifying a color and width to use for pixels within the specified width of a clip plane.
|
|
133
|
+
* Arguments can be:
|
|
134
|
+
* - off
|
|
135
|
+
* - default
|
|
136
|
+
* - color <color string>
|
|
137
|
+
* - width <number>
|
|
138
|
+
* <color string> must be in one of the following forms:
|
|
139
|
+
* "rgb(255,0,0)"
|
|
140
|
+
* "rgba(255,0,0,255)"
|
|
141
|
+
* "rgb(100%,0%,0%)"
|
|
142
|
+
* "hsl(120,50%,50%)"
|
|
143
|
+
* "#rrbbgg"
|
|
144
|
+
* "blanchedAlmond" (see possible values from [[ColorByName]]). Case insensitive.
|
|
145
|
+
* @beta
|
|
146
|
+
*/
|
|
147
|
+
async parseAndRun(...args) {
|
|
148
|
+
if (args[0] === "off") {
|
|
149
|
+
this._toggleIntersectionStyle(false);
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
this._toggleIntersectionStyle(true);
|
|
153
|
+
if (args[0] === "default") {
|
|
154
|
+
this._defaultClipIntersection();
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
args[0] === "color" ? this.setClipIntersection(args[1], +args[3]) : this.setClipIntersection(args[3], +args[1]);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
ClipIntersectionTool.toolId = "ClipIntersectionTool";
|
|
162
|
+
export { ClipIntersectionTool };
|
|
75
163
|
/** Controls a view state's view details' flag for producing cut geometry for a clip style.
|
|
76
164
|
* @beta
|
|
77
165
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipTools.js","sourceRoot":"","sources":["../../../src/tools/ClipTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport {\r\n ClipStyle, ClipStyleProps, ColorByName, ColorDef, LinePixels, RenderMode, RgbColor,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp, Tool, Viewport } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { parseBoolean } from \"./parseBoolean\";\r\nimport { DisplayStyleTool } from \"./DisplayStyleTools\";\r\n\r\n/** This tool specifies or un-specifies a clip color to use for pixels inside or outside the clip region.\r\n * Arguments can be:\r\n * - clear\r\n * - inside <color string> | clear\r\n * - outside <color string> | clear\r\n * <color string> must be in one of the following forms:\r\n * \"rgb(255,0,0)\"\r\n * \"rgba(255,0,0,255)\"\r\n * \"rgb(100%,0%,0%)\"\r\n * \"hsl(120,50%,50%)\"\r\n * \"#rrbbgg\"\r\n * \"blanchedAlmond\" (see possible values from [[ColorByName]]). Case insensitive.\r\n * @see [ColorDef]\r\n * @beta\r\n */\r\nexport class ClipColorTool extends Tool {\r\n public static override toolId = \"ClipColorTool\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n private _clearClipColors() {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n props.insideColor = props.outsideColor = undefined;\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n private setClipColor(colStr: string, which: \"insideColor\" | \"outsideColor\") {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n props[which] = colStr === \"clear\" ? undefined : RgbColor.fromColorDef(ColorDef.fromString(colStr));\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n /** This runs the tool using the given arguments, specifying or unspecifying a clip color to use for pixels inside or outside the clip region.\r\n * Arguments can be:\r\n * - clear\r\n * - inside <color string> | clear\r\n * - outside <color string> | clear\r\n * <color string> must be in one of the following forms:\r\n * \"rgb(255,0,0)\"\r\n * \"rgba(255,0,0,255)\"\r\n * \"rgb(100%,0%,0%)\"\r\n * \"hsl(120,50%,50%)\"\r\n * \"#rrbbgg\"\r\n * \"blanchedAlmond\" (see possible values from [[ColorByName]]). Case insensitive.\r\n * @beta\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n if (1 === args.length) {\r\n if (args[0] === \"clear\")\r\n this._clearClipColors();\r\n\r\n return true;\r\n }\r\n\r\n const which = args[0];\r\n if (which === \"inside\" || which === \"outside\")\r\n this.setClipColor(args[1], \"inside\" === which ? \"insideColor\" : \"outsideColor\");\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Controls a view state's view details' flag for producing cut geometry for a clip style.\r\n * @beta\r\n */\r\nexport class ToggleSectionCutTool extends Tool {\r\n public static override toolId = \"ToggleSectionCut\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** This method runs the tool, controlling a view state's view details' flag for producing cut geometry for a clip style.\r\n * @param produceCutGeometry whether to produce cut geometry\r\n */\r\n public override async run(produceCutGeometry?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp) {\r\n const style = vp.view.displayStyle.settings.clipStyle;\r\n produceCutGeometry = produceCutGeometry ?? !style.produceCutGeometry;\r\n if (produceCutGeometry !== style.produceCutGeometry) {\r\n const json = {\r\n ...vp.view.displayStyle.settings.clipStyle.toJSON(),\r\n produceCutGeometry,\r\n };\r\n\r\n vp.view.displayStyle.settings.clipStyle = ClipStyle.fromJSON(json);\r\n vp.invalidateScene();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Executes this tool's run method with args[0] containing `produceCutGeometry`.\r\n * @see [[run]]\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Simple tool that toggles a hard-coded clip style overriding various aspects of the cut geometry appearance.\r\n * @beta\r\n */\r\nexport class TestClipStyleTool extends DisplayStyleTool {\r\n public static override toolId = \"TestClipStyle\";\r\n public static override get maxArgs() { return 1; }\r\n public static override get minArgs() { return 1; }\r\n\r\n private _useStyle = false;\r\n\r\n protected override get require3d() { return true; }\r\n\r\n protected async parse(args: string[]): Promise<boolean> {\r\n this._useStyle = parseBoolean(args[0]) ?? false;\r\n return true;\r\n }\r\n\r\n protected async execute(vp: Viewport) {\r\n const props: ClipStyleProps = { produceCutGeometry: true };\r\n if (this._useStyle) {\r\n props.cutStyle = {\r\n viewflags: {\r\n renderMode: RenderMode.SmoothShade,\r\n visibleEdges: true,\r\n hiddenEdges: false,\r\n },\r\n appearance: {\r\n rgb: { r: 0xff, g: 0x7f, b: 0 },\r\n transparency: 0.5,\r\n nonLocatable: true,\r\n },\r\n hiddenLine: {\r\n visible: {\r\n ovrColor: true,\r\n color: ColorByName.blue,\r\n pattern: LinePixels.Solid,\r\n width: 3,\r\n },\r\n },\r\n };\r\n }\r\n\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n vp.invalidateRenderPlan();\r\n vp.setFeatureOverrideProviderChanged();\r\n\r\n return true;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ClipTools.js","sourceRoot":"","sources":["../../../src/tools/ClipTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport {\r\n ClipIntersectionStyle, ClipStyle, ClipStyleProps, ColorByName, ColorDef, LinePixels, RenderMode, RgbColor,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp, Tool, Viewport } from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\nimport { parseBoolean } from \"./parseBoolean\";\r\nimport { DisplayStyleTool } from \"./DisplayStyleTools\";\r\n\r\n/** This tool specifies or un-specifies a clip color to use for pixels inside or outside the clip region.\r\n * Arguments can be:\r\n * - clear\r\n * - inside <color string> | clear\r\n * - outside <color string> | clear\r\n * <color string> must be in one of the following forms:\r\n * \"rgb(255,0,0)\"\r\n * \"rgba(255,0,0,255)\"\r\n * \"rgb(100%,0%,0%)\"\r\n * \"hsl(120,50%,50%)\"\r\n * \"#rrbbgg\"\r\n * \"blanchedAlmond\" (see possible values from [[ColorByName]]). Case insensitive.\r\n * @see [ColorDef]\r\n * @beta\r\n */\r\nexport class ClipColorTool extends Tool {\r\n public static override toolId = \"ClipColorTool\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n private _clearClipColors() {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n props.insideColor = props.outsideColor = undefined;\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n private setClipColor(colStr: string, which: \"insideColor\" | \"outsideColor\") {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n props[which] = colStr === \"clear\" ? undefined : RgbColor.fromColorDef(ColorDef.fromString(colStr));\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n /** This runs the tool using the given arguments, specifying or unspecifying a clip color to use for pixels inside or outside the clip region.\r\n * Arguments can be:\r\n * - clear\r\n * - inside <color string> | clear\r\n * - outside <color string> | clear\r\n * <color string> must be in one of the following forms:\r\n * \"rgb(255,0,0)\"\r\n * \"rgba(255,0,0,255)\"\r\n * \"rgb(100%,0%,0%)\"\r\n * \"hsl(120,50%,50%)\"\r\n * \"#rrbbgg\"\r\n * \"blanchedAlmond\" (see possible values from [[ColorByName]]). Case insensitive.\r\n * @beta\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n if (1 === args.length) {\r\n if (args[0] === \"clear\")\r\n this._clearClipColors();\r\n\r\n return true;\r\n }\r\n\r\n const which = args[0];\r\n if (which === \"inside\" || which === \"outside\")\r\n this.setClipColor(args[1], \"inside\" === which ? \"insideColor\" : \"outsideColor\");\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** This tool specifies or un-specifies a color and width to use for pixels within the specified width of a clip plane.\r\n * Arguments can be:\r\n * - off\r\n * - default\r\n * - color <color string>\r\n * - width <number>\r\n * <color string> must be in one of the following forms:\r\n * \"rgb(255,0,0)\"\r\n * \"rgba(255,0,0,255)\"\r\n * \"rgb(100%,0%,0%)\"\r\n * \"hsl(120,50%,50%)\"\r\n * \"#rrbbgg\"\r\n * \"blanchedAlmond\" (see possible values from [[ColorByName]]). Case insensitive.\r\n * @see [ColorDef]\r\n * @beta\r\n */\r\nexport class ClipIntersectionTool extends Tool {\r\n public static override toolId = \"ClipIntersectionTool\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 4; }\r\n\r\n private _toggleIntersectionStyle(toggle: boolean) {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n props.colorizeIntersection = toggle;\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n private _defaultClipIntersection() {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n if (!props.intersectionStyle) {\r\n props.intersectionStyle = ClipIntersectionStyle.defaults;\r\n } else {\r\n props.intersectionStyle.color = RgbColor.fromColorDef(ColorDef.white);\r\n props.intersectionStyle.width = 1;\r\n }\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n private setClipIntersection(colStr: string, width: number) {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp) {\r\n const props = vp.displayStyle.settings.clipStyle.toJSON() ?? {};\r\n\r\n if (!props.intersectionStyle) {\r\n props.intersectionStyle = ClipIntersectionStyle.defaults;\r\n }\r\n if (colStr) {\r\n props.intersectionStyle.color = RgbColor.fromColorDef(ColorDef.fromString(colStr));\r\n }\r\n if (width) {\r\n props.intersectionStyle.width = width;\r\n }\r\n\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n }\r\n }\r\n\r\n /** This runs the tool using the given arguments, specifying or unspecifying a color and width to use for pixels within the specified width of a clip plane.\r\n * Arguments can be:\r\n * - off\r\n * - default\r\n * - color <color string>\r\n * - width <number>\r\n * <color string> must be in one of the following forms:\r\n * \"rgb(255,0,0)\"\r\n * \"rgba(255,0,0,255)\"\r\n * \"rgb(100%,0%,0%)\"\r\n * \"hsl(120,50%,50%)\"\r\n * \"#rrbbgg\"\r\n * \"blanchedAlmond\" (see possible values from [[ColorByName]]). Case insensitive.\r\n * @beta\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n if (args[0] === \"off\") {\r\n this._toggleIntersectionStyle(false);\r\n return true;\r\n }\r\n\r\n this._toggleIntersectionStyle(true);\r\n if (args[0] === \"default\") {\r\n this._defaultClipIntersection();\r\n return true;\r\n }\r\n\r\n args[0] === \"color\" ? this.setClipIntersection(args[1], +args[3]) : this.setClipIntersection(args[3], +args[1]);\r\n return true;\r\n }\r\n}\r\n\r\n/** Controls a view state's view details' flag for producing cut geometry for a clip style.\r\n * @beta\r\n */\r\nexport class ToggleSectionCutTool extends Tool {\r\n public static override toolId = \"ToggleSectionCut\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** This method runs the tool, controlling a view state's view details' flag for producing cut geometry for a clip style.\r\n * @param produceCutGeometry whether to produce cut geometry\r\n */\r\n public override async run(produceCutGeometry?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp) {\r\n const style = vp.view.displayStyle.settings.clipStyle;\r\n produceCutGeometry = produceCutGeometry ?? !style.produceCutGeometry;\r\n if (produceCutGeometry !== style.produceCutGeometry) {\r\n const json = {\r\n ...vp.view.displayStyle.settings.clipStyle.toJSON(),\r\n produceCutGeometry,\r\n };\r\n\r\n vp.view.displayStyle.settings.clipStyle = ClipStyle.fromJSON(json);\r\n vp.invalidateScene();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Executes this tool's run method with args[0] containing `produceCutGeometry`.\r\n * @see [[run]]\r\n */\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Simple tool that toggles a hard-coded clip style overriding various aspects of the cut geometry appearance.\r\n * @beta\r\n */\r\nexport class TestClipStyleTool extends DisplayStyleTool {\r\n public static override toolId = \"TestClipStyle\";\r\n public static override get maxArgs() { return 1; }\r\n public static override get minArgs() { return 1; }\r\n\r\n private _useStyle = false;\r\n\r\n protected override get require3d() { return true; }\r\n\r\n protected async parse(args: string[]): Promise<boolean> {\r\n this._useStyle = parseBoolean(args[0]) ?? false;\r\n return true;\r\n }\r\n\r\n protected async execute(vp: Viewport) {\r\n const props: ClipStyleProps = { produceCutGeometry: true };\r\n if (this._useStyle) {\r\n props.cutStyle = {\r\n viewflags: {\r\n renderMode: RenderMode.SmoothShade,\r\n visibleEdges: true,\r\n hiddenEdges: false,\r\n },\r\n appearance: {\r\n rgb: { r: 0xff, g: 0x7f, b: 0 },\r\n transparency: 0.5,\r\n nonLocatable: true,\r\n },\r\n hiddenLine: {\r\n visible: {\r\n ovrColor: true,\r\n color: ColorByName.blue,\r\n pattern: LinePixels.Solid,\r\n width: 3,\r\n },\r\n },\r\n };\r\n }\r\n\r\n vp.displayStyle.settings.clipStyle = ClipStyle.fromJSON(props);\r\n vp.invalidateRenderPlan();\r\n vp.setFeatureOverrideProviderChanged();\r\n\r\n return true;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FpsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAA8B,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"FpsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAA8B,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;gBAEZ,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ;IAUnD,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,SAAS;CAKlB"}
|
|
@@ -26,7 +26,7 @@ export class FpsTracker {
|
|
|
26
26
|
}
|
|
27
27
|
clearInterval() {
|
|
28
28
|
if (undefined !== this._curIntervalId) {
|
|
29
|
-
clearInterval(this._curIntervalId);
|
|
29
|
+
window.clearInterval(this._curIntervalId);
|
|
30
30
|
this._curIntervalId = undefined;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -34,7 +34,7 @@ export class FpsTracker {
|
|
|
34
34
|
this._vp.continuousRendering = enabled;
|
|
35
35
|
if (enabled) {
|
|
36
36
|
this._metrics = new PerformanceMetrics(false, true);
|
|
37
|
-
this._curIntervalId = setInterval(() => this.updateFPS(), 500);
|
|
37
|
+
this._curIntervalId = window.setInterval(() => this.updateFPS(), 500);
|
|
38
38
|
this._label.innerText = "Tracking FPS...";
|
|
39
39
|
}
|
|
40
40
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FpsTracker.js","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,UAAU;IAMrB,YAAmB,MAAmB,EAAE,QAAkB;QACxD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;YAC3B,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,mBAAmB;YACvB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;SACzC,CAAC,CAAC,KAAK,CAAC;IACX,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACrC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"FpsTracker.js","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,UAAU;IAMrB,YAAmB,MAAmB,EAAE,QAAkB;QACxD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;YAC3B,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,mBAAmB;YACvB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;SACzC,CAAC,CAAC,KAAK,CAAC;IACX,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACrC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;SACjC;IACH,CAAC;IAEO,MAAM,CAAC,OAAgB;QAC7B,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACvC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;SACrC;QAEA,IAAI,CAAC,GAAG,CAAC,MAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjE,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAS,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC;IACxC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { PerformanceMetrics, Target, Viewport } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\n\r\n/** Displays average frames-per-second.\r\n * NOTE: Enabling fps tracking causes a new frame to render on every tick of the render loop, which may negatively impact battery life.\r\n * @beta\r\n */\r\nexport class FpsTracker {\r\n private readonly _label: HTMLLabelElement;\r\n private _metrics?: PerformanceMetrics;\r\n private _curIntervalId?: number;\r\n private readonly _vp: Viewport;\r\n\r\n public constructor(parent: HTMLElement, viewport: Viewport) {\r\n this._vp = viewport;\r\n this._label = createCheckBox({\r\n parent,\r\n name: \"Track FPS\",\r\n id: \"fpsTracker_toggle\",\r\n handler: (cb) => this.toggle(cb.checked),\r\n }).label;\r\n }\r\n\r\n public dispose(): void {\r\n this.toggle(false);\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n window.clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private toggle(enabled: boolean): void {\r\n this._vp.continuousRendering = enabled;\r\n if (enabled) {\r\n this._metrics = new PerformanceMetrics(false, true);\r\n this._curIntervalId = window.setInterval(() => this.updateFPS(), 500);\r\n this._label.innerText = \"Tracking FPS...\";\r\n } else {\r\n this._metrics = undefined;\r\n this.clearInterval();\r\n this._label.innerText = \"Track FPS\";\r\n }\r\n\r\n (this._vp.target as Target).performanceMetrics = this._metrics;\r\n }\r\n\r\n private updateFPS(): void {\r\n const metrics = this._metrics!;\r\n const fps = (metrics.spfTimes.length / metrics.spfSum).toFixed(2);\r\n this._label.innerText = `FPS: ${fps}`;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/MemoryTracker.ts"],"names":[],"mappings":"AAUA,OAAO,EACmE,QAAQ,EACjF,MAAM,sBAAsB,CAAC;AAoG9B,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYrD;AAgDD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"MemoryTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/MemoryTracker.ts"],"names":[],"mappings":"AAUA,OAAO,EACmE,QAAQ,EACjF,MAAM,sBAAsB,CAAC;AAoG9B,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYrD;AAgDD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;gBAEpB,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ;IAwC7C,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAqBd,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,KAAK;CAQd"}
|
|
@@ -197,7 +197,7 @@ export class MemoryTracker {
|
|
|
197
197
|
}
|
|
198
198
|
clearInterval() {
|
|
199
199
|
if (undefined !== this._curIntervalId) {
|
|
200
|
-
clearInterval(this._curIntervalId);
|
|
200
|
+
window.clearInterval(this._curIntervalId);
|
|
201
201
|
this._curIntervalId = undefined;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
@@ -211,7 +211,7 @@ export class MemoryTracker {
|
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
213
213
|
if (undefined === this._curIntervalId) {
|
|
214
|
-
this._curIntervalId = setInterval(() => this.update(), 1000);
|
|
214
|
+
this._curIntervalId = window.setInterval(() => this.update(), 1000);
|
|
215
215
|
this._div.style.display = "block";
|
|
216
216
|
}
|
|
217
217
|
this._purgeButton.disabled = undefined === purgeMem[this._memIndex];
|