@itwin/frontend-devtools 5.5.0-dev.2 → 5.5.0-dev.5
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 +6 -1
- package/README.md +1 -0
- package/lib/cjs/ClipboardUtilities.js.map +1 -1
- package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
- package/lib/cjs/FrontEndDevTools.js +2 -0
- package/lib/cjs/FrontEndDevTools.js.map +1 -1
- package/lib/cjs/effects/Convolution.js +17 -17
- package/lib/cjs/effects/Convolution.js.map +1 -1
- package/lib/cjs/effects/EffectTools.js.map +1 -1
- package/lib/cjs/effects/Explosion.js.map +1 -1
- package/lib/cjs/effects/FlipImage.js +20 -20
- package/lib/cjs/effects/FlipImage.js.map +1 -1
- package/lib/cjs/effects/LensDistortion.js +21 -21
- package/lib/cjs/effects/LensDistortion.js.map +1 -1
- package/lib/cjs/effects/Random.js.map +1 -1
- package/lib/cjs/effects/Saturation.js +26 -26
- package/lib/cjs/effects/Saturation.js.map +1 -1
- package/lib/cjs/effects/Snow.js.map +1 -1
- package/lib/cjs/effects/Vignette.js +29 -29
- package/lib/cjs/effects/Vignette.js.map +1 -1
- package/lib/cjs/frontend-devtools.js.map +1 -1
- package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
- package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
- package/lib/cjs/tools/ClipTools.js.map +1 -1
- package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
- package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
- package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
- package/lib/cjs/tools/InspectElementTool.js.map +1 -1
- package/lib/cjs/tools/MapLayerTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
- package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
- package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
- package/lib/cjs/tools/ProjectExtents.js.map +1 -1
- package/lib/cjs/tools/RealityModelTools.js.map +1 -1
- package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
- package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
- package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
- package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
- package/lib/cjs/tools/SavedViews.js.map +1 -1
- package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
- package/lib/cjs/tools/SelectionTools.js.map +1 -1
- package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
- package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
- package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
- package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
- package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
- package/lib/cjs/tools/ViewDefinitionDecorator.d.ts +12 -0
- package/lib/cjs/tools/ViewDefinitionDecorator.d.ts.map +1 -0
- package/lib/cjs/tools/ViewDefinitionDecorator.js +115 -0
- package/lib/cjs/tools/ViewDefinitionDecorator.js.map +1 -0
- package/lib/cjs/tools/ViewportTools.js.map +1 -1
- package/lib/cjs/tools/parseArgs.js.map +1 -1
- package/lib/cjs/tools/parseBoolean.js.map +1 -1
- package/lib/cjs/tools/parseToggle.js.map +1 -1
- package/lib/cjs/ui/Button.js.map +1 -1
- package/lib/cjs/ui/CheckBox.js.map +1 -1
- package/lib/cjs/ui/ColorInput.js.map +1 -1
- package/lib/cjs/ui/ComboBox.js.map +1 -1
- package/lib/cjs/ui/DataList.js.map +1 -1
- package/lib/cjs/ui/NestedMenu.js.map +1 -1
- package/lib/cjs/ui/NumericInput.js.map +1 -1
- package/lib/cjs/ui/RadioBox.js.map +1 -1
- package/lib/cjs/ui/Slider.js.map +1 -1
- package/lib/cjs/ui/TextBox.js.map +1 -1
- package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
- package/lib/cjs/widgets/FpsTracker.js.map +1 -1
- package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
- package/lib/cjs/widgets/KeyinField.js.map +1 -1
- package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/esm/ClipboardUtilities.js.map +1 -1
- package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
- package/lib/esm/FrontEndDevTools.js +2 -0
- package/lib/esm/FrontEndDevTools.js.map +1 -1
- package/lib/esm/effects/Convolution.js +17 -17
- package/lib/esm/effects/Convolution.js.map +1 -1
- package/lib/esm/effects/EffectTools.js.map +1 -1
- package/lib/esm/effects/Explosion.js.map +1 -1
- package/lib/esm/effects/FlipImage.js +20 -20
- package/lib/esm/effects/FlipImage.js.map +1 -1
- package/lib/esm/effects/LensDistortion.js +21 -21
- package/lib/esm/effects/LensDistortion.js.map +1 -1
- package/lib/esm/effects/Random.js.map +1 -1
- package/lib/esm/effects/Saturation.js +26 -26
- package/lib/esm/effects/Saturation.js.map +1 -1
- package/lib/esm/effects/Snow.js.map +1 -1
- package/lib/esm/effects/Vignette.js +29 -29
- package/lib/esm/effects/Vignette.js.map +1 -1
- package/lib/esm/frontend-devtools.js.map +1 -1
- package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
- package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
- package/lib/esm/tools/ClipTools.js.map +1 -1
- package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
- package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
- package/lib/esm/tools/FrustumDecoration.js.map +1 -1
- package/lib/esm/tools/InspectElementTool.js.map +1 -1
- package/lib/esm/tools/MapLayerTool.js.map +1 -1
- package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
- package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
- package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
- package/lib/esm/tools/ProjectExtents.js.map +1 -1
- package/lib/esm/tools/RealityModelTools.js.map +1 -1
- package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
- package/lib/esm/tools/RenderSystemTools.js.map +1 -1
- package/lib/esm/tools/RenderTargetTools.js.map +1 -1
- package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
- package/lib/esm/tools/SavedViews.js.map +1 -1
- package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
- package/lib/esm/tools/SelectionTools.js.map +1 -1
- package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
- package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
- package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
- package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
- package/lib/esm/tools/ToolTipProvider.js.map +1 -1
- package/lib/esm/tools/ViewDefinitionDecorator.d.ts +12 -0
- package/lib/esm/tools/ViewDefinitionDecorator.d.ts.map +1 -0
- package/lib/esm/tools/ViewDefinitionDecorator.js +111 -0
- package/lib/esm/tools/ViewDefinitionDecorator.js.map +1 -0
- package/lib/esm/tools/ViewportTools.js.map +1 -1
- package/lib/esm/tools/parseArgs.js.map +1 -1
- package/lib/esm/tools/parseBoolean.js.map +1 -1
- package/lib/esm/tools/parseToggle.js.map +1 -1
- package/lib/esm/ui/Button.js.map +1 -1
- package/lib/esm/ui/CheckBox.js.map +1 -1
- package/lib/esm/ui/ColorInput.js.map +1 -1
- package/lib/esm/ui/ComboBox.js.map +1 -1
- package/lib/esm/ui/DataList.js.map +1 -1
- package/lib/esm/ui/NestedMenu.js.map +1 -1
- package/lib/esm/ui/NumericInput.js.map +1 -1
- package/lib/esm/ui/RadioBox.js.map +1 -1
- package/lib/esm/ui/Slider.js.map +1 -1
- package/lib/esm/ui/TextBox.js.map +1 -1
- package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
- package/lib/esm/widgets/FpsTracker.js.map +1 -1
- package/lib/esm/widgets/GpuProfiler.js.map +1 -1
- package/lib/esm/widgets/KeyinField.js.map +1 -1
- package/lib/esm/widgets/MemoryTracker.js.map +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/public/locales/en/FrontendDevTools.json +497 -494
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryTracker.js","sourceRoot":"","sources":["../../../src/widgets/MemoryTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { assert, BeTimePoint } from \"@itwin/core-bentley\";\nimport {\n DisclosedTileTreeSet, IModelApp, RenderMemory, TileTree, TileTreeOwner, Viewport,\n} from \"@itwin/core-frontend\";\nimport { ComboBoxEntry, createComboBox } from \"../ui/ComboBox\";\n\nfunction collectTileTreeMemory(stats: RenderMemory.Statistics, owner: TileTreeOwner): void {\n const tree = owner.tileTree;\n if (undefined !== tree)\n tree.collectStatistics(stats);\n}\n\n// Returns the number of tile trees processed.\ntype CalcMem = (stats: RenderMemory.Statistics, vp: Viewport) => number;\ntype PurgeMem = (olderThan?: BeTimePoint) => void;\n\nconst enum MemIndex { // eslint-disable-line no-restricted-syntax\n None = -1,\n ViewportTileTrees,\n SelectedTiles,\n AllTileTrees,\n RenderTarget,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n Viewport, // RenderTarget + Viewed Tile Trees\n System,\n All, // All Tile Trees + System + (RenderTarget for each ViewManager viewport)\n\n COUNT,\n}\n\n// Includes None (-1) at index 0\nconst memLabels = [\n \"None\",\n \"Viewed Tile Trees\",\n \"Selected Tiles\",\n \"All Tile Trees\",\n \"Render Target\",\n \"Viewport\",\n \"System\",\n \"All\",\n];\n\nfunction collectStatisticsForViewedTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\n vp.collectStatistics(stats);\n const trees = new DisclosedTileTreeSet();\n vp.discloseTileTrees(trees);\n return trees.size;\n}\n\nfunction collectStatisticsForSelectedTiles(vp: Viewport, stats: RenderMemory.Statistics): number {\n const trees = new Set<TileTree>();\n const selectedTiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\n if (selectedTiles) {\n for (const tile of selectedTiles) {\n trees.add(tile.tree);\n tile.collectStatistics(stats);\n }\n }\n\n return trees.size;\n}\n\nfunction collectStatisticsForAllTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\n let numTrees = 0;\n vp.view.iModel.tiles.forEachTreeOwner((owner) => {\n collectTileTreeMemory(stats, owner);\n if (undefined !== owner.tileTree)\n ++numTrees;\n });\n return numTrees;\n}\n\nconst calcMem: CalcMem[] = [\n (stats, vp) => collectStatisticsForViewedTileTrees(vp, stats),\n (stats, vp) => collectStatisticsForSelectedTiles(vp, stats),\n (stats, vp) => collectStatisticsForAllTileTrees(vp, stats),\n (stats, vp) => {\n vp.target.collectStatistics(stats);\n return 0;\n },\n (stats, vp) => {\n vp.target.collectStatistics(stats);\n return collectStatisticsForViewedTileTrees(vp, stats);\n },\n (stats, vp) => {\n vp.target.renderSystem.collectStatistics(stats);\n return 0;\n },\n (stats, vp) => {\n vp.target.renderSystem.collectStatistics(stats);\n for (const x of IModelApp.viewManager)\n x.target.collectStatistics(stats);\n\n return collectStatisticsForAllTileTrees(vp, stats);\n },\n];\n\n// ###TODO...\nconst purgeMem: Array<PurgeMem | undefined> = [\n undefined,\n (olderThan?) => IModelApp.viewManager.purgeTileTrees(olderThan ? olderThan : BeTimePoint.now()),\n];\n\n/** @internal */\nexport function formatMemory(numBytes: number): string {\n let suffix = \"b\";\n if (numBytes >= 1024) {\n numBytes /= 1024;\n suffix = \"kb\";\n if (numBytes >= 1024) {\n numBytes /= 1024;\n suffix = \"mb\";\n }\n }\n\n return numBytes.toFixed(2) + suffix;\n}\n\nclass MemoryPanel {\n private readonly _label: string;\n private readonly _labels: string[];\n private readonly _elems: HTMLElement[] = [];\n private readonly _div: HTMLDivElement;\n private readonly _header: HTMLElement;\n\n public constructor(parent: HTMLElement, label: string, labels: string[]) {\n this._label = label;\n this._labels = labels;\n this._div = document.createElement(\"div\");\n\n this._header = document.createElement(\"label\")!;\n this._header.style.fontWeight = \"bold\";\n this._div.appendChild(this._header);\n\n const numElems = labels.length;\n for (let i = 0; i < numElems; i++) {\n const elem = document.createElement(\"label\");\n this._elems.push(elem);\n this._div.appendChild(elem);\n }\n\n parent.appendChild(this._div);\n }\n\n public update(stats: RenderMemory.Consumers[], total: number): void {\n assert(this._labels.length === stats.length);\n assert(this._labels.length === this._elems.length);\n\n this._header.innerHTML = `${this._label}: ${formatMemory(total)}`;\n\n for (let i = 0; i < this._labels.length; i++) {\n const elem = this._elems[i];\n const stat = stats[i];\n if (0 === stat.totalBytes) {\n elem.style.display = \"none\";\n continue;\n }\n\n elem.style.display = \"block\";\n elem.innerHTML = `${this._labels[i]} (${stat.count}): ${formatMemory(stat.totalBytes)}`; // + \"\\n(max: \" + formatMemory(stat.maxBytes) + \")\";\n }\n }\n}\n\n/** Displays GPU memory allocated to tile trees - either all tile trees in the system, or only those associated with a specific Viewport.\n * @beta\n */\nexport class MemoryTracker {\n private readonly _stats = new RenderMemory.Statistics();\n private readonly _vp: Viewport;\n private readonly _div: HTMLDivElement;\n private _curIntervalId?: number;\n private _memIndex = MemIndex.None;\n private readonly _totalElem: HTMLElement;\n private readonly _totalTreesElem: HTMLElement;\n private readonly _purgeButton: HTMLButtonElement;\n private readonly _textures: MemoryPanel;\n private readonly _buffers: MemoryPanel;\n\n public constructor(parent: HTMLElement, vp: Viewport) {\n this._vp = vp;\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n this.addSelector(parent);\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row0 = document.createElement(\"tr\");\n const cell00 = document.createElement(\"td\");\n const cell01 = document.createElement(\"td\");\n cell00.style.width = cell01.style.width = \"50%\";\n row0.appendChild(cell00);\n row0.appendChild(cell01);\n table.appendChild(row0);\n\n const row1 = document.createElement(\"tr\");\n const cell10 = document.createElement(\"td\");\n const cell11 = document.createElement(\"td\");\n cell10.style.width = cell11.style.width = \"50%\";\n row1.appendChild(cell10);\n row1.appendChild(cell11);\n table.appendChild(row1);\n\n this._textures = new MemoryPanel(cell00, \"Textures\", [\"Surface Textures\", \"Vertex Tables\", \"Edge Tables\", \"Feature Tables\", \"Feature Overrides\", \"Clip Volumes\", \"Planar Classifiers\", \"Shadow Maps\", \"Texture Attachments\", \"Thematic Textures\"]);\n this._buffers = new MemoryPanel(cell01, \"Buffers\", [\"Surfaces\", \"Visible Edges\", \"Silhouettes\", \"Polyline Edges\", \"Indexed Edges\", \"Polylines\", \"Point Strings\", \"Point Clouds\", \"Instances\", \"Terrain\", \"Reality Mesh\"]);\n this._totalElem = this.addStatistics(cell10);\n this._totalTreesElem = this.addStatistics(cell11);\n\n this._purgeButton = this.addPurgeButton(this._div);\n\n parent.appendChild(this._div);\n }\n\n public [Symbol.dispose](): void {\n this.clearInterval();\n }\n\n private addSelector(parent: HTMLElement): void {\n const entries: ComboBoxEntry[] = [];\n for (let i = MemIndex.None; i < MemIndex.COUNT; i++)\n entries.push({ name: memLabels[i + 1], value: i });\n\n createComboBox({\n parent,\n name: \"Track Memory: \",\n id: \"memTracker_type\",\n value: MemIndex.None,\n handler: (select) => this.change(Number.parseInt(select.value, 10)),\n entries,\n });\n }\n\n private addPurgeButton(parent: HTMLElement): HTMLButtonElement {\n const div = document.createElement(\"div\");\n div.style.textAlign = \"center\";\n\n const button = document.createElement(\"button\");\n button.innerText = \"Purge\";\n button.addEventListener(\"click\", () => this.purge());\n\n div.appendChild(button);\n parent.appendChild(div);\n\n return button;\n }\n\n private addStatistics(parent: HTMLElement): HTMLElement {\n const div = document.createElement(\"div\");\n const text = document.createElement(\"text\");\n text.style.fontWeight = \"bold\";\n div.appendChild(text);\n parent.appendChild(div);\n return text;\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private change(newIndex: MemIndex): void {\n if (newIndex === this._memIndex)\n return;\n\n this._memIndex = newIndex;\n if (MemIndex.None === newIndex) {\n this.clearInterval();\n this._div.style.display = \"none\";\n return;\n }\n\n if (undefined === this._curIntervalId) {\n this._curIntervalId = window.setInterval(() => this.update(), 1000);\n this._div.style.display = \"block\";\n }\n\n this._purgeButton.disabled = undefined === purgeMem[this._memIndex];\n\n this.update();\n }\n\n private update(): void {\n const calc = calcMem[this._memIndex];\n this._stats.clear();\n const numTrees = calc(this._stats, this._vp);\n this._totalElem.innerText = `Total: ${formatMemory(this._stats.totalBytes)}`;\n this._totalTreesElem.innerText = `Total Tile Trees: ${numTrees}`;\n\n this._textures.update(this._stats.consumers, this._stats.totalBytes - this._stats.buffers.totalBytes);\n this._buffers.update(this._stats.buffers.consumers, this._stats.buffers.totalBytes);\n }\n\n private purge(): void {\n const purge = purgeMem[this._memIndex];\n if (undefined !== purge) {\n purge();\n this._vp.invalidateScene(); // to trigger reloading of tiles we actually do want to continue drawing\n this.update();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MemoryTracker.js","sourceRoot":"","sources":["../../../src/widgets/MemoryTracker.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 { assert, BeTimePoint } from \"@itwin/core-bentley\";\r\nimport {\r\n DisclosedTileTreeSet, IModelApp, RenderMemory, TileTree, TileTreeOwner, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { ComboBoxEntry, createComboBox } from \"../ui/ComboBox\";\r\n\r\nfunction collectTileTreeMemory(stats: RenderMemory.Statistics, owner: TileTreeOwner): void {\r\n const tree = owner.tileTree;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n}\r\n\r\n// Returns the number of tile trees processed.\r\ntype CalcMem = (stats: RenderMemory.Statistics, vp: Viewport) => number;\r\ntype PurgeMem = (olderThan?: BeTimePoint) => void;\r\n\r\nconst enum MemIndex { // eslint-disable-line no-restricted-syntax\r\n None = -1,\r\n ViewportTileTrees,\r\n SelectedTiles,\r\n AllTileTrees,\r\n RenderTarget,\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n Viewport, // RenderTarget + Viewed Tile Trees\r\n System,\r\n All, // All Tile Trees + System + (RenderTarget for each ViewManager viewport)\r\n\r\n COUNT,\r\n}\r\n\r\n// Includes None (-1) at index 0\r\nconst memLabels = [\r\n \"None\",\r\n \"Viewed Tile Trees\",\r\n \"Selected Tiles\",\r\n \"All Tile Trees\",\r\n \"Render Target\",\r\n \"Viewport\",\r\n \"System\",\r\n \"All\",\r\n];\r\n\r\nfunction collectStatisticsForViewedTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n vp.collectStatistics(stats);\r\n const trees = new DisclosedTileTreeSet();\r\n vp.discloseTileTrees(trees);\r\n return trees.size;\r\n}\r\n\r\nfunction collectStatisticsForSelectedTiles(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n const trees = new Set<TileTree>();\r\n const selectedTiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\r\n if (selectedTiles) {\r\n for (const tile of selectedTiles) {\r\n trees.add(tile.tree);\r\n tile.collectStatistics(stats);\r\n }\r\n }\r\n\r\n return trees.size;\r\n}\r\n\r\nfunction collectStatisticsForAllTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n let numTrees = 0;\r\n vp.view.iModel.tiles.forEachTreeOwner((owner) => {\r\n collectTileTreeMemory(stats, owner);\r\n if (undefined !== owner.tileTree)\r\n ++numTrees;\r\n });\r\n return numTrees;\r\n}\r\n\r\nconst calcMem: CalcMem[] = [\r\n (stats, vp) => collectStatisticsForViewedTileTrees(vp, stats),\r\n (stats, vp) => collectStatisticsForSelectedTiles(vp, stats),\r\n (stats, vp) => collectStatisticsForAllTileTrees(vp, stats),\r\n (stats, vp) => {\r\n vp.target.collectStatistics(stats);\r\n return 0;\r\n },\r\n (stats, vp) => {\r\n vp.target.collectStatistics(stats);\r\n return collectStatisticsForViewedTileTrees(vp, stats);\r\n },\r\n (stats, vp) => {\r\n vp.target.renderSystem.collectStatistics(stats);\r\n return 0;\r\n },\r\n (stats, vp) => {\r\n vp.target.renderSystem.collectStatistics(stats);\r\n for (const x of IModelApp.viewManager)\r\n x.target.collectStatistics(stats);\r\n\r\n return collectStatisticsForAllTileTrees(vp, stats);\r\n },\r\n];\r\n\r\n// ###TODO...\r\nconst purgeMem: Array<PurgeMem | undefined> = [\r\n undefined,\r\n (olderThan?) => IModelApp.viewManager.purgeTileTrees(olderThan ? olderThan : BeTimePoint.now()),\r\n];\r\n\r\n/** @internal */\r\nexport function formatMemory(numBytes: number): string {\r\n let suffix = \"b\";\r\n if (numBytes >= 1024) {\r\n numBytes /= 1024;\r\n suffix = \"kb\";\r\n if (numBytes >= 1024) {\r\n numBytes /= 1024;\r\n suffix = \"mb\";\r\n }\r\n }\r\n\r\n return numBytes.toFixed(2) + suffix;\r\n}\r\n\r\nclass MemoryPanel {\r\n private readonly _label: string;\r\n private readonly _labels: string[];\r\n private readonly _elems: HTMLElement[] = [];\r\n private readonly _div: HTMLDivElement;\r\n private readonly _header: HTMLElement;\r\n\r\n public constructor(parent: HTMLElement, label: string, labels: string[]) {\r\n this._label = label;\r\n this._labels = labels;\r\n this._div = document.createElement(\"div\");\r\n\r\n this._header = document.createElement(\"label\")!;\r\n this._header.style.fontWeight = \"bold\";\r\n this._div.appendChild(this._header);\r\n\r\n const numElems = labels.length;\r\n for (let i = 0; i < numElems; i++) {\r\n const elem = document.createElement(\"label\");\r\n this._elems.push(elem);\r\n this._div.appendChild(elem);\r\n }\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public update(stats: RenderMemory.Consumers[], total: number): void {\r\n assert(this._labels.length === stats.length);\r\n assert(this._labels.length === this._elems.length);\r\n\r\n this._header.innerHTML = `${this._label}: ${formatMemory(total)}`;\r\n\r\n for (let i = 0; i < this._labels.length; i++) {\r\n const elem = this._elems[i];\r\n const stat = stats[i];\r\n if (0 === stat.totalBytes) {\r\n elem.style.display = \"none\";\r\n continue;\r\n }\r\n\r\n elem.style.display = \"block\";\r\n elem.innerHTML = `${this._labels[i]} (${stat.count}): ${formatMemory(stat.totalBytes)}`; // + \"\\n(max: \" + formatMemory(stat.maxBytes) + \")\";\r\n }\r\n }\r\n}\r\n\r\n/** Displays GPU memory allocated to tile trees - either all tile trees in the system, or only those associated with a specific Viewport.\r\n * @beta\r\n */\r\nexport class MemoryTracker {\r\n private readonly _stats = new RenderMemory.Statistics();\r\n private readonly _vp: Viewport;\r\n private readonly _div: HTMLDivElement;\r\n private _curIntervalId?: number;\r\n private _memIndex = MemIndex.None;\r\n private readonly _totalElem: HTMLElement;\r\n private readonly _totalTreesElem: HTMLElement;\r\n private readonly _purgeButton: HTMLButtonElement;\r\n private readonly _textures: MemoryPanel;\r\n private readonly _buffers: MemoryPanel;\r\n\r\n public constructor(parent: HTMLElement, vp: Viewport) {\r\n this._vp = vp;\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 this.addSelector(parent);\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 row0 = document.createElement(\"tr\");\r\n const cell00 = document.createElement(\"td\");\r\n const cell01 = document.createElement(\"td\");\r\n cell00.style.width = cell01.style.width = \"50%\";\r\n row0.appendChild(cell00);\r\n row0.appendChild(cell01);\r\n table.appendChild(row0);\r\n\r\n const row1 = document.createElement(\"tr\");\r\n const cell10 = document.createElement(\"td\");\r\n const cell11 = document.createElement(\"td\");\r\n cell10.style.width = cell11.style.width = \"50%\";\r\n row1.appendChild(cell10);\r\n row1.appendChild(cell11);\r\n table.appendChild(row1);\r\n\r\n this._textures = new MemoryPanel(cell00, \"Textures\", [\"Surface Textures\", \"Vertex Tables\", \"Edge Tables\", \"Feature Tables\", \"Feature Overrides\", \"Clip Volumes\", \"Planar Classifiers\", \"Shadow Maps\", \"Texture Attachments\", \"Thematic Textures\"]);\r\n this._buffers = new MemoryPanel(cell01, \"Buffers\", [\"Surfaces\", \"Visible Edges\", \"Silhouettes\", \"Polyline Edges\", \"Indexed Edges\", \"Polylines\", \"Point Strings\", \"Point Clouds\", \"Instances\", \"Terrain\", \"Reality Mesh\"]);\r\n this._totalElem = this.addStatistics(cell10);\r\n this._totalTreesElem = this.addStatistics(cell11);\r\n\r\n this._purgeButton = this.addPurgeButton(this._div);\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public [Symbol.dispose](): void {\r\n this.clearInterval();\r\n }\r\n\r\n private addSelector(parent: HTMLElement): void {\r\n const entries: ComboBoxEntry[] = [];\r\n for (let i = MemIndex.None; i < MemIndex.COUNT; i++)\r\n entries.push({ name: memLabels[i + 1], value: i });\r\n\r\n createComboBox({\r\n parent,\r\n name: \"Track Memory: \",\r\n id: \"memTracker_type\",\r\n value: MemIndex.None,\r\n handler: (select) => this.change(Number.parseInt(select.value, 10)),\r\n entries,\r\n });\r\n }\r\n\r\n private addPurgeButton(parent: HTMLElement): HTMLButtonElement {\r\n const div = document.createElement(\"div\");\r\n div.style.textAlign = \"center\";\r\n\r\n const button = document.createElement(\"button\");\r\n button.innerText = \"Purge\";\r\n button.addEventListener(\"click\", () => this.purge());\r\n\r\n div.appendChild(button);\r\n parent.appendChild(div);\r\n\r\n return button;\r\n }\r\n\r\n private addStatistics(parent: HTMLElement): HTMLElement {\r\n const div = document.createElement(\"div\");\r\n const text = document.createElement(\"text\");\r\n text.style.fontWeight = \"bold\";\r\n div.appendChild(text);\r\n parent.appendChild(div);\r\n return text;\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 change(newIndex: MemIndex): void {\r\n if (newIndex === this._memIndex)\r\n return;\r\n\r\n this._memIndex = newIndex;\r\n if (MemIndex.None === newIndex) {\r\n this.clearInterval();\r\n this._div.style.display = \"none\";\r\n return;\r\n }\r\n\r\n if (undefined === this._curIntervalId) {\r\n this._curIntervalId = window.setInterval(() => this.update(), 1000);\r\n this._div.style.display = \"block\";\r\n }\r\n\r\n this._purgeButton.disabled = undefined === purgeMem[this._memIndex];\r\n\r\n this.update();\r\n }\r\n\r\n private update(): void {\r\n const calc = calcMem[this._memIndex];\r\n this._stats.clear();\r\n const numTrees = calc(this._stats, this._vp);\r\n this._totalElem.innerText = `Total: ${formatMemory(this._stats.totalBytes)}`;\r\n this._totalTreesElem.innerText = `Total Tile Trees: ${numTrees}`;\r\n\r\n this._textures.update(this._stats.consumers, this._stats.totalBytes - this._stats.buffers.totalBytes);\r\n this._buffers.update(this._stats.buffers.consumers, this._stats.buffers.totalBytes);\r\n }\r\n\r\n private purge(): void {\r\n const purge = purgeMem[this._memIndex];\r\n if (undefined !== purge) {\r\n purge();\r\n this._vp.invalidateScene(); // to trigger reloading of tiles we actually do want to continue drawing\r\n this.update();\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderCommandBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/RenderCommandBreakdown.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAiD;AACjD,6CAAgD;AAEhD,MAAa,sBAAsB;IAChB,IAAI,CAAiB;IACrB,QAAQ,CAAiB;IAClC,cAAc,CAAU;IACf,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxC,MAAM,CAAc;IAErC,YAAmB,MAAmB;QACpC,IAAA,yBAAc,EAAC;YACb,MAAM;YACN,IAAI,EAAE,iBAAiB;YACvB,EAAE,EAAE,wBAAwB;YAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC;IACrC,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,MAAM;QACZ,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,MAAM;QACZ,MAAM,IAAI,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;QACrE,IAAI,CAAC,IAAI;YACP,OAAO;QAET,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,CAAC;IAC5C,CAAC;CACF;AAnED,wDAmEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\n\nexport class RenderCommandBreakdown {\n private readonly _div: HTMLDivElement;\n private readonly _cellDiv: HTMLDivElement;\n private _curIntervalId?: number;\n private readonly _cells = new Map<string, HTMLElement>();\n private readonly _total: HTMLElement;\n\n public constructor(parent: HTMLElement) {\n createCheckBox({\n parent,\n name: \"Render Commands\",\n id: \"renderCommandBreakdown\",\n handler: () => this.toggle(),\n });\n\n parent.appendChild(this._div = document.createElement(\"div\"));\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n this._div.appendChild(this._cellDiv = document.createElement(\"div\"));\n\n this._div.appendChild(this._total = document.createElement(\"div\"));\n this._total.innerText = \"Total: 0\";\n }\n\n public [Symbol.dispose](): void {\n this.clearInterval();\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private update(): void {\n const ctrl = IModelApp.viewManager.selectedView?.target.debugControl;\n if (!ctrl)\n return;\n\n const cmds = ctrl.getRenderCommands();\n let total = 0;\n for (const cmd of cmds) {\n let cell = this._cells.get(cmd.name);\n if (!cell) {\n this._cellDiv.appendChild(cell = document.createElement(\"div\"));\n this._cells.set(cmd.name, cell);\n }\n\n total += cmd.count;\n cell.innerText = `${cmd.name}: ${cmd.count}`;\n }\n\n this._total.innerText = `Total: ${total}`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RenderCommandBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/RenderCommandBreakdown.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 } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\n\r\nexport class RenderCommandBreakdown {\r\n private readonly _div: HTMLDivElement;\r\n private readonly _cellDiv: HTMLDivElement;\r\n private _curIntervalId?: number;\r\n private readonly _cells = new Map<string, HTMLElement>();\r\n private readonly _total: HTMLElement;\r\n\r\n public constructor(parent: HTMLElement) {\r\n createCheckBox({\r\n parent,\r\n name: \"Render Commands\",\r\n id: \"renderCommandBreakdown\",\r\n handler: () => 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 this._div.appendChild(this._cellDiv = document.createElement(\"div\"));\r\n\r\n this._div.appendChild(this._total = document.createElement(\"div\"));\r\n this._total.innerText = \"Total: 0\";\r\n }\r\n\r\n public [Symbol.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 const ctrl = IModelApp.viewManager.selectedView?.target.debugControl;\r\n if (!ctrl)\r\n return;\r\n\r\n const cmds = ctrl.getRenderCommands();\r\n let total = 0;\r\n for (const cmd of cmds) {\r\n let cell = this._cells.get(cmd.name);\r\n if (!cell) {\r\n this._cellDiv.appendChild(cell = document.createElement(\"div\"));\r\n this._cells.set(cmd.name, cell);\r\n }\r\n\r\n total += cmd.count;\r\n cell.innerText = `${cmd.name}: ${cmd.count}`;\r\n }\r\n\r\n this._total.innerText = `Total: ${total}`;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { formatMemory } from \"./MemoryTracker\";\n\ninterface TileMemoryCounter {\n numTiles: number;\n bytesUsed: number;\n}\n\nenum TileMemorySelector {\n Selected, // Tiles selected for display by at least one viewport.\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\n Total, // Total of all the above\n Count,\n}\n\nclass TileMemoryTracer {\n private readonly _stats = new RenderMemory.Statistics();\n private readonly _processedTiles = new Set<Tile>();\n public readonly counters: TileMemoryCounter[] = [];\n public numSelected = 0;\n\n public constructor() {\n for (let i = 0; i < TileMemorySelector.Count; i++)\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\n }\n\n public update(): void {\n this.reset();\n\n const imodels = new Set<IModelConnection>();\n const selectedTiles = new Set<Tile>();\n for (const vp of IModelApp.viewManager) {\n imodels.add(vp.iModel);\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\n if (tiles)\n for (const tile of tiles)\n selectedTiles.add(tile);\n }\n\n for (const selected of selectedTiles)\n this.add(selected, TileMemorySelector.Selected);\n\n for (const selected of selectedTiles) {\n this.processParent(selected.parent);\n this.processChildren(selected.children);\n }\n\n for (const imodel of imodels) {\n imodel.tiles.forEachTreeOwner((owner) => {\n const tree = owner.tileTree;\n if (tree)\n this.processOrphan(tree.rootTile);\n });\n }\n\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\n }\n\n private reset(): void {\n this._processedTiles.clear();\n this.numSelected = 0;\n for (const counter of this.counters)\n counter.numTiles = counter.bytesUsed = 0;\n }\n\n private add(tile: Tile, selector: TileMemorySelector): void {\n this._processedTiles.add(tile);\n this._stats.clear();\n tile.collectStatistics(this._stats, false);\n\n const bytesUsed = this._stats.totalBytes;\n if (bytesUsed > 0) {\n const counter = this.counters[selector];\n ++counter.numTiles;\n counter.bytesUsed += bytesUsed;\n }\n }\n\n private processParent(parent: Tile | undefined): void {\n if (parent && !this._processedTiles.has(parent)) {\n this.add(parent, TileMemorySelector.Ancestors);\n this.processParent(parent.parent);\n }\n }\n\n private processChildren(children: Tile[] | undefined): void {\n if (!children)\n return;\n\n for (const child of children) {\n if (!this._processedTiles.has(child)) {\n this.add(child, TileMemorySelector.Descendants);\n this.processChildren(child.children);\n }\n }\n }\n\n private processOrphan(tile: Tile): void {\n if (!this._processedTiles.has(tile))\n this.add(tile, TileMemorySelector.Orphaned);\n\n const children = tile.children;\n if (children)\n for (const child of children)\n this.processOrphan(child);\n }\n}\n\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\n\nfunction format(count: number, label: string, bytesUsed: number): string {\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\n}\n\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\n * The left-hand pane obtains its information from [TileAdmin]($frontend), displaying the number of selected and unselected tiles that are consuming graphics memory along with the amount of memory consumed.\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\n * - \"Total\" - totals of the above categories.\n *\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\n * The widget includes a checkbox to toggle tracking and display of these statistics.\n * @beta\n */\nexport class TileMemoryBreakdown {\n private readonly _tracer = new TileMemoryTracer();\n private readonly _div: HTMLDivElement;\n private _curIntervalId?: number;\n private readonly _statsElements: HTMLElement[] = [];\n private readonly _totalsElements: HTMLElement[] = [];\n\n /** Construct a new breakdown widget as a child of the specified parent element. */\n public constructor(parent: HTMLElement) {\n createCheckBox({\n parent,\n name: \"Tile Memory Breakdown\",\n id: \"tileMemoryBreakdown\",\n handler: (_cb) => this.toggle(),\n });\n\n parent.appendChild(this._div = document.createElement(\"div\"));\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const leftCell = document.createElement(\"td\");\n const rightCell = document.createElement(\"td\");\n leftCell.style.width = rightCell.style.width = \"50%\";\n row.appendChild(leftCell);\n row.appendChild(rightCell);\n table.appendChild(row);\n\n for (let i = 0; i < TileMemorySelector.Count; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statsElements.push(elem);\n div.appendChild(elem);\n rightCell.appendChild(div);\n }\n\n for (let i = 0; i < 3; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._totalsElements.push(elem);\n div.appendChild(elem);\n leftCell.appendChild(div);\n }\n }\n\n public [Symbol.dispose](): void {\n this.clearInterval();\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private update(): void {\n this._tracer.update();\n for (let i = 0; i < this._statsElements.length; i++) {\n const counter = this._tracer.counters[i];\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\n }\n\n let numUnselected = 0;\n let unselectedBytes = 0;\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\n ++numUnselected;\n unselectedBytes += unselected.bytesUsed;\n }\n\n let numSelected = 0;\n let selectedBytes = 0;\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\n ++numSelected;\n selectedBytes += selected.bytesUsed;\n }\n\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\n }\n}\n"]}
|
|
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 [Symbol.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.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\nimport { createButton } from \"../ui/Button\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNumericInput } from \"../ui/NumericInput\";\n\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\ninterface StatEntry {\n label: string;\n getValue: GetStatValue;\n}\n\nfunction computeProgress(vp: Viewport): number {\n const ready = vp.numReadyTiles;\n const requested = vp.numRequestedTiles;\n const total = ready + requested;\n const ratio = (total > 0) ? (ready / total) : 1.0;\n return Math.round(ratio * 100);\n}\n\nconst statEntries: StatEntry[] = [\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\n { getValue: (stats) => Math.round(stats.decoding.mean), label: \"Decoding mean time (ms)\" },\n { getValue: (stats) => stats.decoding.max, label: \"Decoding max time (ms)\" },\n];\n\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\n\n/** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.\n * @beta\n */\nexport class TileStatisticsTracker {\n private readonly _statElements: HTMLElement[] = [];\n private readonly _div: HTMLDivElement;\n private readonly _vp: Viewport;\n private _curIntervalId?: number;\n\n public constructor(parent: HTMLElement, vp: Viewport) {\n this._vp = vp;\n this.addMaxActive(parent);\n createCheckBox({\n parent,\n name: \"Track Tile Requests\",\n id: \"stats_trackMemory\",\n handler: (_cb) => this.toggle(),\n });\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const frameColumn = document.createElement(\"td\");\n const globalColumn = document.createElement(\"td\");\n frameColumn.style.width = globalColumn.style.width = \"50%\";\n row.appendChild(frameColumn);\n row.appendChild(globalColumn);\n table.appendChild(row);\n\n for (let i = 0; i < statEntries.length; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statElements[i] = elem;\n div.appendChild(elem);\n\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\n column.appendChild(div);\n }\n\n const resetButton = createButton({\n parent: this._div,\n value: \"Reset\",\n tooltip: \"Reset all cumulative statistics\",\n handler: () => this.reset(),\n });\n resetButton.div.style.textAlign = \"center\";\n\n parent.appendChild(this._div);\n }\n\n public [Symbol.dispose](): void {\n this.clearInterval();\n }\n\n private addMaxActive(parent: HTMLElement): void {\n const div = document.createElement(\"div\");\n\n const label = document.createElement(\"label\");\n label.style.display = \"inline\";\n label.htmlFor = \"maxActiveRequests\";\n label.innerText = \"Max Active Requests: \";\n div.appendChild(label);\n\n createNumericInput({\n parent: div,\n id: \"maxActiveRequests\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\n handler: (value, _input) => this.updateMaxActive(value),\n });\n\n parent.appendChild(div);\n }\n\n private updateMaxActive(value: number): void {\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n // Currently on - turn off.\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n // Currently off - turn on.\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = window.setInterval(() => this.update(), 500);\n }\n }\n\n private update(): void {\n const stats = IModelApp.tileAdmin.statistics;\n for (let i = 0; i < statEntries.length; i++) {\n const stat = statEntries[i];\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\n this._statElements[i].innerText = label;\n }\n }\n\n private reset(): void {\n IModelApp.tileAdmin.resetStatistics();\n this.update();\n }\n}\n"]}
|
|
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 [Symbol.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":"ToolSettingsTracker.js","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { IModelApp, ScreenViewport, ToolSettings, Viewport } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNestedMenu } from \"../ui/NestedMenu\";\nimport { createLabeledNumericInput, createNumericInput } from \"../ui/NumericInput\";\n\n/** Allows the global settings controlling the behavior of viewing tools to be customized.\n * @alpha\n */\nexport class ToolSettingsTracker {\n private static _expandToolSettings = false;\n\n public constructor(parent: HTMLElement, _vp: Viewport) {\n const settingsDiv = document.createElement(\"div\");\n settingsDiv.style.display = \"block\";\n settingsDiv.style.textAlign = \"left\";\n\n createNestedMenu({\n label: \"Tool Settings\",\n parent,\n expand: ToolSettingsTracker._expandToolSettings,\n handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded,\n body: settingsDiv,\n });\n\n let div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n createCheckBox({\n parent: div,\n name: \"Preserve World Up When Rotating\",\n id: \"ts_preserveWorldUp\",\n isChecked: ToolSettings.preserveWorldUp,\n handler: (_cb) => {\n ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.textAlign = \"left\";\n\n // We use a static so the expand/collapse state persists after closing and reopening the drop-down.\n settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? \"block\" : \"none\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n let label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Animation Duration (ms): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_animationTime\";\n createNumericInput({\n parent: div,\n id: \"ts_animationTime\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: ScreenViewport.animation.time.normal.milliseconds,\n handler: (value, _input) => {\n ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Pick Radius (inches): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_viewToolPickRadiusInches\";\n label.innerText = \"Pick Radius (inches): \";\n createNumericInput({\n parent: div,\n id: \"ts_viewToolPickRadiusInches\",\n display: \"inline\",\n min: 0,\n step: 0.01,\n value: ToolSettings.viewToolPickRadiusInches,\n handler: (value, _input) => {\n ToolSettings.viewToolPickRadiusInches = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n createCheckBox({\n parent: div,\n name: \"Walk Enforce Z Up\",\n id: \"ts_walkEnforceZUp\",\n isChecked: ToolSettings.walkEnforceZUp,\n handler: (_cb) => {\n ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n });\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Camera Angle (degrees): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_walkCameraAngle\";\n createNumericInput({\n parent: div,\n id: \"ts_walkCameraAngle\",\n display: \"inline\",\n min: 0,\n step: 0.1,\n value: ToolSettings.walkCameraAngle.degrees,\n handler: (value, _input) => {\n ToolSettings.walkCameraAngle.setDegrees(value);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Velocity (meters per second): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_walkVelocity\";\n createNumericInput({\n parent: div,\n id: \"ts_walkVelocity\",\n display: \"inline\",\n min: 0,\n step: 0.1,\n value: ToolSettings.walkVelocity,\n handler: (value, _input) => {\n ToolSettings.walkVelocity = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Bump Distance (meters): \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_wheelZoomBumpDistance\";\n createNumericInput({\n parent: div,\n id: \"ts_wheelZoomBumpDistance\",\n display: \"inline\",\n min: 0,\n step: 0.025,\n value: ToolSettings.wheelZoomBumpDistance,\n handler: (value, _input) => {\n ToolSettings.wheelZoomBumpDistance = value;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Ratio: \", parent: div });\n label.style.display = \"inline\";\n label.htmlFor = \"ts_wheelZoomRatio\";\n createNumericInput({\n parent: div,\n id: \"ts_wheelZoomRatio\",\n display: \"inline\",\n min: 1.0,\n step: 0.025,\n value: ToolSettings.wheelZoomRatio,\n handler: async (value, _input) => {\n ToolSettings.wheelZoomRatio = value;\n return IModelApp.toolAdmin.exitViewTool();\n },\n parseAsFloat: true,\n }, true);\n div.style.display = \"block\";\n div.style.textAlign = \"left\";\n\n createLabeledNumericInput({\n id: \"num_inertiaDamping\",\n parent: settingsDiv,\n value: ToolSettings.viewingInertia.damping,\n handler: async (value, _) => {\n ToolSettings.viewingInertia.damping = value;\n return IModelApp.toolAdmin.exitViewTool();\n },\n min: 0,\n max: 1,\n step: 0.05,\n parseAsFloat: true,\n name: \"Inertial damping: \",\n });\n createLabeledNumericInput({\n id: \"num_inertiaDuration\",\n parent: settingsDiv,\n value: ToolSettings.viewingInertia.duration.milliseconds / 1000,\n handler: async (value, _) => {\n ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000);\n return IModelApp.toolAdmin.exitViewTool();\n },\n min: 0,\n max: 10,\n step: 0.5,\n parseAsFloat: true,\n name: \"Inertial duration (seconds): \",\n });\n }\n\n public [Symbol.dispose](): void { }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ToolSettingsTracker.js","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.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 { BeDuration } from \"@itwin/core-bentley\";\r\nimport { IModelApp, ScreenViewport, ToolSettings, Viewport } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { createNestedMenu } from \"../ui/NestedMenu\";\r\nimport { createLabeledNumericInput, createNumericInput } from \"../ui/NumericInput\";\r\n\r\n/** Allows the global settings controlling the behavior of viewing tools to be customized.\r\n * @alpha\r\n */\r\nexport class ToolSettingsTracker {\r\n private static _expandToolSettings = false;\r\n\r\n public constructor(parent: HTMLElement, _vp: Viewport) {\r\n const settingsDiv = document.createElement(\"div\");\r\n settingsDiv.style.display = \"block\";\r\n settingsDiv.style.textAlign = \"left\";\r\n\r\n createNestedMenu({\r\n label: \"Tool Settings\",\r\n parent,\r\n expand: ToolSettingsTracker._expandToolSettings,\r\n handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded,\r\n body: settingsDiv,\r\n });\r\n\r\n let div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n createCheckBox({\r\n parent: div,\r\n name: \"Preserve World Up When Rotating\",\r\n id: \"ts_preserveWorldUp\",\r\n isChecked: ToolSettings.preserveWorldUp,\r\n handler: (_cb) => {\r\n ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n });\r\n div.style.textAlign = \"left\";\r\n\r\n // We use a static so the expand/collapse state persists after closing and reopening the drop-down.\r\n settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? \"block\" : \"none\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n let label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Animation Duration (ms): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_animationTime\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_animationTime\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 1,\r\n value: ScreenViewport.animation.time.normal.milliseconds,\r\n handler: (value, _input) => {\r\n ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n });\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Pick Radius (inches): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_viewToolPickRadiusInches\";\r\n label.innerText = \"Pick Radius (inches): \";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_viewToolPickRadiusInches\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.01,\r\n value: ToolSettings.viewToolPickRadiusInches,\r\n handler: (value, _input) => {\r\n ToolSettings.viewToolPickRadiusInches = value;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n createCheckBox({\r\n parent: div,\r\n name: \"Walk Enforce Z Up\",\r\n id: \"ts_walkEnforceZUp\",\r\n isChecked: ToolSettings.walkEnforceZUp,\r\n handler: (_cb) => {\r\n ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n });\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Camera Angle (degrees): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_walkCameraAngle\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_walkCameraAngle\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.1,\r\n value: ToolSettings.walkCameraAngle.degrees,\r\n handler: (value, _input) => {\r\n ToolSettings.walkCameraAngle.setDegrees(value);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Velocity (meters per second): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_walkVelocity\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_walkVelocity\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.1,\r\n value: ToolSettings.walkVelocity,\r\n handler: (value, _input) => {\r\n ToolSettings.walkVelocity = value;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Bump Distance (meters): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_wheelZoomBumpDistance\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_wheelZoomBumpDistance\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.025,\r\n value: ToolSettings.wheelZoomBumpDistance,\r\n handler: (value, _input) => {\r\n ToolSettings.wheelZoomBumpDistance = value;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Ratio: \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_wheelZoomRatio\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_wheelZoomRatio\",\r\n display: \"inline\",\r\n min: 1.0,\r\n step: 0.025,\r\n value: ToolSettings.wheelZoomRatio,\r\n handler: async (value, _input) => {\r\n ToolSettings.wheelZoomRatio = value;\r\n return IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n createLabeledNumericInput({\r\n id: \"num_inertiaDamping\",\r\n parent: settingsDiv,\r\n value: ToolSettings.viewingInertia.damping,\r\n handler: async (value, _) => {\r\n ToolSettings.viewingInertia.damping = value;\r\n return IModelApp.toolAdmin.exitViewTool();\r\n },\r\n min: 0,\r\n max: 1,\r\n step: 0.05,\r\n parseAsFloat: true,\r\n name: \"Inertial damping: \",\r\n });\r\n createLabeledNumericInput({\r\n id: \"num_inertiaDuration\",\r\n parent: settingsDiv,\r\n value: ToolSettings.viewingInertia.duration.milliseconds / 1000,\r\n handler: async (value, _) => {\r\n ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000);\r\n return IModelApp.toolAdmin.exitViewTool();\r\n },\r\n min: 0,\r\n max: 10,\r\n step: 0.5,\r\n parseAsFloat: true,\r\n name: \"Inertial duration (seconds): \",\r\n });\r\n }\r\n\r\n public [Symbol.dispose](): void { }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipboardUtilities.js","sourceRoot":"","sources":["../../src/ClipboardUtilities.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;IACf,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC/B,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,EAAE,CAAC,MAAM,EAAE,CAAC;IACZ,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,uDAAuD;IACrF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\n\n/** Copy the input string to the system clipboard.\n * Obtained from https://techoverflow.net/2018/03/30/copying-strings-to-the-clipboard-using-pure-javascript/\n * @beta\n */\nexport function copyStringToClipboard(str: string): void {\n const el = document.createElement(\"textarea\");\n el.value = str;\n el.setAttribute(\"readonly\", \"\");\n el.style.position = \"absolute\";\n el.style.left = \"-9999px\";\n document.body.appendChild(el);\n el.select();\n document.execCommand(\"copy\"); // eslint-disable-line @typescript-eslint/no-deprecated\n document.body.removeChild(el);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ClipboardUtilities.js","sourceRoot":"","sources":["../../src/ClipboardUtilities.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;IACf,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC/B,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,EAAE,CAAC,MAAM,EAAE,CAAC;IACZ,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,uDAAuD;IACrF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utilities\r\n */\r\n\r\n/** Copy the input string to the system clipboard.\r\n * Obtained from https://techoverflow.net/2018/03/30/copying-strings-to-the-clipboard-using-pure-javascript/\r\n * @beta\r\n */\r\nexport function copyStringToClipboard(str: string): void {\r\n const el = document.createElement(\"textarea\");\r\n el.value = str;\r\n el.setAttribute(\"readonly\", \"\");\r\n el.style.position = \"absolute\";\r\n el.style.left = \"-9999px\";\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand(\"copy\"); // eslint-disable-line @typescript-eslint/no-deprecated\r\n document.body.removeChild(el);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrontEndDevTools.d.ts","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"FrontEndDevTools.d.ts","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAIA;;GAEG;AAmEH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IAEpC;;;;;;;OAOG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuK/C,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
|
|
@@ -41,6 +41,7 @@ import { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from
|
|
|
41
41
|
import { ToggleTileRequestDecorationTool } from "./tools/TileRequestDecoration";
|
|
42
42
|
import { ToggleTileTreeBoundsDecorationTool } from "./tools/TileTreeBoundsDecoration";
|
|
43
43
|
import { ToggleToolTipsTool } from "./tools/ToolTipProvider";
|
|
44
|
+
import { ViewDefinitionDecorationTool } from "./tools/ViewDefinitionDecorator";
|
|
44
45
|
/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].
|
|
45
46
|
* @beta
|
|
46
47
|
*/
|
|
@@ -165,6 +166,7 @@ export class FrontendDevTools {
|
|
|
165
166
|
ToggleViewAttachmentBoundariesTool,
|
|
166
167
|
ToggleViewAttachmentClipShapesTool,
|
|
167
168
|
ToggleViewAttachmentsTool,
|
|
169
|
+
ViewDefinitionDecorationTool,
|
|
168
170
|
ToggleWiremeshTool,
|
|
169
171
|
ToggleRealityTileBounds,
|
|
170
172
|
ToggleRealityTilePreload,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrontEndDevTools.js","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { EdgeDetectionEffect, EmbossEffect, GaussianBlurEffect, SharpenEffect, SharpnessEffect, UnsharpenEffect } from \"./effects/Convolution\";\nimport { ClearEffectsTool } from \"./effects/EffectTools\";\nimport { ExplosionEffect } from \"./effects/Explosion\";\nimport { FlipImageConfig, FlipImageEffect } from \"./effects/FlipImage\";\nimport { LensDistortionConfig, LensDistortionEffect } from \"./effects/LensDistortion\";\nimport { SaturationConfig, SaturationEffect } from \"./effects/Saturation\";\nimport { SnowEffect } from \"./effects/Snow\";\nimport { VignetteConfig, VignetteEffect } from \"./effects/Vignette\";\nimport {\n MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool, MaskBackgroundMapByModelTool, MaskBackgroundMapBySubCategoryTool, MaskRealityModelByElementTool, MaskRealityModelByExcludedElementTool,\n MaskRealityModelByModelTool, MaskRealityModelBySubCategoryTool, SetHigherPriorityRealityModelMasking, SetMapHigherPriorityMasking, UnmaskMapTool, UnmaskRealityModelTool,\n} from \"./tools/PlanarMaskTools\";\nimport {\n ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool,\n FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool,\n ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel,\n ViewportTileSizeModifierTool,\n} from \"./tools/ViewportTools\";\nimport { AnimationIntervalTool } from \"./tools/AnimationIntervalTool\";\nimport { ChangeUnitsTool } from \"./tools/ChangeUnitsTool\";\nimport { ClipColorTool, ClipIntersectionTool, TestClipStyleTool, ToggleSectionCutTool } from \"./tools/ClipTools\";\nimport {\n ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool,\n SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool,\n} from \"./tools/DisplayStyleTools\";\nimport { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from \"./tools/ScheduleScriptTools\";\nimport {\n ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool,\n} from \"./tools/EmphasizeElementsTool\";\nimport { ToggleFrustumSnapshotTool, ToggleSelectedViewFrustumTool, ToggleShadowFrustumTool } from \"./tools/FrustumDecoration\";\nimport { InspectElementTool } from \"./tools/InspectElementTool\";\nimport {\n AttachArcGISFeatureMapLayerByUrlTool,\n AttachArcGISMapLayerByUrlTool, AttachMapLayerTool, AttachMapOverlayTool, AttachModelMapLayerTool, AttachOgcApiFeaturesMapLayerTool, AttachTileURLMapLayerByUrlTool, AttachWmsMapLayerByUrlTool,\n AttachWmtsMapLayerByUrlTool, DetachMapLayersTool, MapBaseColorTool, MapBaseTransparencyTool, MapBaseVisibilityTool, MapLayerSubLayerVisibilityTool,\n MapLayerTransparencyTool, MapLayerVisibilityTool, MapLayerZoomTool, ReorderMapLayers, SetMapBaseTool, ToggleTerrainTool,\n} from \"./tools/MapLayerTool\";\nimport { MeasureTileLoadTimeTool } from \"./tools/MeasureTileLoadTime\";\nimport {\n ClearModelAppearanceOverrides, SetModelColorTool, SetModelEmphasizedTool, SetModelIgnoresMaterialsTool, SetModelLineCodeTool,\n SetModelLineWeightTool, SetModelLocateTool, SetModelTransparencyTool,\n} from \"./tools/ModelAppearanceTools\";\nimport { ChangePlanProjectionSettingsTool, DumpPlanProjectionSettingsTool, OverrideSubCategoryPriorityTool } from \"./tools/PlanProjectionTools\";\nimport { ToggleProjectExtentsTool } from \"./tools/ProjectExtents\";\nimport {\n AttachCesiumAssetTool, AttachRealityModelTool, ClearRealityModelAppearanceOverrides, DetachRealityModelTool, SaveRealityModelTool,\n SetRealityModelColorTool, SetRealityModelEmphasizedTool, SetRealityModelLocateTool, SetRealityModelTransparencyTool, ToggleOSMBuildingDisplay,\n} from \"./tools/RealityModelTools\";\nimport { RealityTransitionTool } from \"./tools/RealityTransitionTool\";\nimport { CompileShadersTool, LoseWebGLContextTool, ToggleDPIForLODTool } from \"./tools/RenderSystemTools\";\nimport {\n SetAASamplesTool, ToggleDrapeFrustumTool, ToggleMaskFrustumTool, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\n} from \"./tools/RenderTargetTools\";\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\n\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\n * @beta\n */\nexport class FrontendDevTools {\n private static _initialized = false;\n\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await FrontendDevTools.initialize();\n * ```\n * @beta\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n const namespace = \"FrontendDevTools\";\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\n const tools = [\n AttachMapLayerTool,\n AttachMapOverlayTool,\n AttachModelMapLayerTool,\n AttachArcGISMapLayerByUrlTool,\n AttachArcGISFeatureMapLayerByUrlTool,\n AttachOgcApiFeaturesMapLayerTool,\n AttachWmsMapLayerByUrlTool,\n AttachWmtsMapLayerByUrlTool,\n AttachTileURLMapLayerByUrlTool,\n AnimationIntervalTool,\n ApplyRenderingStyleTool,\n ApplyViewByIdTool,\n ApplyViewTool,\n ChangeBackgroundColorTool,\n ChangeCameraTool,\n ChangeEmphasisSettingsTool,\n ChangeFlashSettingsTool,\n ChangeHiliteModeTool,\n ChangeHiliteSettingsTool,\n ChangePlanProjectionSettingsTool,\n ChangeUnitsTool,\n ChangeViewFlagsTool,\n ClearEffectsTool,\n ClearEmphasizedElementsTool,\n ClearIsolatedElementsTool,\n ClipColorTool,\n ClipIntersectionTool,\n CompileShadersTool,\n DefaultTileSizeModifierTool,\n DetachMapLayersTool,\n DumpPlanProjectionSettingsTool,\n DumpSelectionSetTool,\n EdgeDetectionEffect,\n EmbossEffect,\n ElementIdFromSourceAspectIdTool,\n EmphasizeSelectedElementsTool,\n EmphasizeVisibleElementsTool,\n ExplosionEffect,\n FadeOutTool,\n FlipImageConfig,\n FlipImageEffect,\n FreezeSceneTool,\n GaussianBlurEffect,\n InspectElementTool,\n IsolateSelectedElementsTool,\n LensDistortionConfig,\n LensDistortionEffect,\n LoseWebGLContextTool,\n MapLayerTransparencyTool,\n MapLayerVisibilityTool,\n MapLayerSubLayerVisibilityTool,\n MapLayerZoomTool,\n MapBaseColorTool,\n MapBaseTransparencyTool,\n MapBaseVisibilityTool,\n MeasureTileLoadTimeTool,\n OverrideSubCategoryTool,\n OverrideSubCategoryPriorityTool,\n QueryScheduleScriptTool,\n RealityTransitionTool,\n ReorderMapLayers,\n ReportWebGLCompatibilityTool,\n ReverseScheduleScriptTool,\n SaturationConfig,\n SaturationEffect,\n SaveRenderingStyleTool,\n SaveViewTool,\n SelectElementsByIdTool,\n SetAASamplesTool,\n SetAspectRatioSkewTool,\n SetScheduleScriptTool,\n ToggleVolClassIntersect,\n SetMapBaseTool,\n SharpenEffect,\n SharpnessEffect,\n ShowTileVolumesTool,\n SkyCubeTool,\n SkySphereTool,\n SnowEffect,\n SourceAspectIdFromElementIdTool,\n TestClipStyleTool,\n Toggle3dManipulationsTool,\n ToggleDrawingGraphicsTool,\n ToggleDPIForLODTool,\n ToggleDrapeFrustumTool,\n ToggleFrustumSnapshotTool,\n ToggleMaskFrustumTool,\n ToggleNormalMaps,\n TogglePrimitiveVisibilityTool,\n ToggleProjectExtentsTool,\n ToggleReadPixelsTool,\n ToggleSectionDrawingSpatialViewTool,\n ToggleSelectedViewFrustumTool,\n ToggleShadowFrustumTool,\n ToggleSkyboxTool,\n ToggleTileRequestDecorationTool,\n ToggleTileTreeBoundsDecorationTool,\n ToggleTileTreeReferencesTool,\n ToggleToolTipsTool,\n ToggleViewAttachmentBoundariesTool,\n ToggleViewAttachmentClipShapesTool,\n ToggleViewAttachmentsTool,\n ToggleWiremeshTool,\n ToggleRealityTileBounds,\n ToggleRealityTilePreload,\n ToggleRealityTileLogging,\n ToggleRealityTileFreeze,\n ToggleSectionCutTool,\n ToggleTerrainTool,\n UnsharpenEffect,\n ViewportAddRealityModel,\n ViewportTileSizeModifierTool,\n VignetteConfig,\n VignetteEffect,\n AttachRealityModelTool,\n DetachRealityModelTool,\n SaveRealityModelTool,\n SetGpuMemoryLimitTool,\n SetRealityModelLocateTool,\n SetRealityModelEmphasizedTool,\n SetRealityModelTransparencyTool,\n SetRealityModelColorTool,\n SetModelLocateTool,\n SetModelEmphasizedTool,\n SetModelTransparencyTool,\n SetModelColorTool,\n SetModelLineWeightTool,\n SetModelLineCodeTool,\n SetModelIgnoresMaterialsTool,\n ClearRealityModelAppearanceOverrides,\n ClearModelAppearanceOverrides,\n AttachCesiumAssetTool,\n ToggleOSMBuildingDisplay,\n SetHigherPriorityRealityModelMasking,\n SetMapHigherPriorityMasking,\n MaskRealityModelByModelTool,\n MaskRealityModelBySubCategoryTool,\n MaskRealityModelByElementTool,\n MaskRealityModelByExcludedElementTool,\n UnmaskRealityModelTool,\n MaskBackgroundMapByModelTool,\n MaskBackgroundMapBySubCategoryTool,\n MaskBackgroundMapByElementTool,\n MaskBackgroundMapByExcludedElementTool,\n UnmaskMapTool,\n WoWIgnoreBackgroundTool,\n ];\n\n for (const tool of tools)\n tool.register(namespace);\n\n return namespacePromise;\n }\n\n private static shutdown() {\n this._initialized = false;\n }\n}\n"]}
|
|
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, AttachOgcApiFeaturesMapLayerTool, 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, ToggleMaskFrustumTool, 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\nimport { ViewDefinitionDecorationTool } from \"./tools/ViewDefinitionDecorator\";\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 AttachOgcApiFeaturesMapLayerTool,\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 ToggleMaskFrustumTool,\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 ViewDefinitionDecorationTool,\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"]}
|
|
@@ -18,25 +18,25 @@ export class ConvolutionEffect extends AddEffectTool {
|
|
|
18
18
|
get source() {
|
|
19
19
|
return {
|
|
20
20
|
// The vertex shader simply computes the texture coordinate for use in the fragment shader.
|
|
21
|
-
vertex: `
|
|
22
|
-
void effectMain(vec4 pos) {
|
|
23
|
-
v_texCoord = textureCoordFromPosition(pos);
|
|
21
|
+
vertex: `
|
|
22
|
+
void effectMain(vec4 pos) {
|
|
23
|
+
v_texCoord = textureCoordFromPosition(pos);
|
|
24
24
|
}`,
|
|
25
25
|
// The fragment shader samples the pixel and its neighbors and applies the kernel.
|
|
26
|
-
fragment: `
|
|
27
|
-
vec4 effectMain() {
|
|
28
|
-
vec2 onePixel = vec2(1.0, 1.0) / u_textureSize;
|
|
29
|
-
vec4 colorSum =
|
|
30
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, -1)) * u_kernel[0] +
|
|
31
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, -1)) * u_kernel[1] +
|
|
32
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, -1)) * u_kernel[2] +
|
|
33
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 0)) * u_kernel[3] +
|
|
34
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 0)) * u_kernel[4] +
|
|
35
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 0)) * u_kernel[5] +
|
|
36
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 1)) * u_kernel[6] +
|
|
37
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 1)) * u_kernel[7] +
|
|
38
|
-
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 1)) * u_kernel[8] ;
|
|
39
|
-
return vec4((colorSum / u_kernelWeight).rgb, 1);
|
|
26
|
+
fragment: `
|
|
27
|
+
vec4 effectMain() {
|
|
28
|
+
vec2 onePixel = vec2(1.0, 1.0) / u_textureSize;
|
|
29
|
+
vec4 colorSum =
|
|
30
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, -1)) * u_kernel[0] +
|
|
31
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, -1)) * u_kernel[1] +
|
|
32
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, -1)) * u_kernel[2] +
|
|
33
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 0)) * u_kernel[3] +
|
|
34
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 0)) * u_kernel[4] +
|
|
35
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 0)) * u_kernel[5] +
|
|
36
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 1)) * u_kernel[6] +
|
|
37
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 1)) * u_kernel[7] +
|
|
38
|
+
TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 1)) * u_kernel[8] ;
|
|
39
|
+
return vec4((colorSum / u_kernelWeight).rgb, 1);
|
|
40
40
|
}`,
|
|
41
41
|
};
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Convolution.js","sourceRoot":"","sources":["../../../src/effects/Convolution.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Effects\n */\n\nimport { ScreenSpaceEffectBuilder, UniformType, VaryingType } from \"@itwin/core-frontend\";\nimport { AddEffectTool } from \"./EffectTools\";\n\n/** Adds one of a collection of \"convolution kernels\" that alter a [Viewport]($frontend)'s image by blending neighboring pixels.\n * Based on https://webglfundamentals.org/webgl/lessons/webgl-image-processing-continued.html\n * @beta\n */\nexport abstract class ConvolutionEffect extends AddEffectTool {\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 0; }\n\n protected abstract get matrix(): number[];\n\n protected get textureCoordFromPosition() { return true; }\n\n protected get source() {\n return {\n // The vertex shader simply computes the texture coordinate for use in the fragment shader.\n vertex: `\n void effectMain(vec4 pos) {\n v_texCoord = textureCoordFromPosition(pos);\n }`,\n // The fragment shader samples the pixel and its neighbors and applies the kernel.\n fragment: `\n vec4 effectMain() {\n vec2 onePixel = vec2(1.0, 1.0) / u_textureSize;\n vec4 colorSum =\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, -1)) * u_kernel[0] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, -1)) * u_kernel[1] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, -1)) * u_kernel[2] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 0)) * u_kernel[3] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 0)) * u_kernel[4] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 0)) * u_kernel[5] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 1)) * u_kernel[6] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 1)) * u_kernel[7] +\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 1)) * u_kernel[8] ;\n return vec4((colorSum / u_kernelWeight).rgb, 1);\n }`,\n };\n }\n\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\n // Define the varying for the texture coordinate.\n builder.addVarying(\"v_texCoord\", VaryingType.Vec2);\n\n // Hook up the uniforms.\n const matrix = this.matrix;\n builder.addUniform({\n name: \"u_textureSize\",\n type: UniformType.Vec2,\n bind: (uniform, context) => {\n const rect = context.viewport.viewRect;\n uniform.setUniform2fv([rect.width, rect.height]);\n },\n });\n builder.addUniformArray({\n name: \"u_kernel\",\n type: UniformType.Float,\n length: matrix.length,\n bind: (uniform) => uniform.setUniform1fv(matrix),\n });\n\n let weight = matrix.reduce((prev, curr) => prev + curr);\n if (weight <= 0)\n weight = 1;\n\n builder.addUniform({\n name: \"u_kernelWeight\",\n type: UniformType.Float,\n bind: (uniform) => uniform.setUniform1f(weight),\n });\n }\n}\n\n/** Adds a gaussian blur screen-space effect to the selected Viewport.\n * @beta\n */\nexport class GaussianBlurEffect extends ConvolutionEffect {\n public static override toolId = \"GaussianBlurEffect\";\n protected get effectName() { return \"blur\"; }\n protected get matrix() {\n return [\n 0.045, 0.122, 0.045,\n 0.122, 0.332, 0.122,\n 0.045, 0.122, 0.045,\n ];\n }\n}\n\n/** Adds a screen-space unsharpen effect to the selected Viewport.\n * @beta\n */\nexport class UnsharpenEffect extends ConvolutionEffect {\n public static override toolId = \"UnsharpenEffect\";\n protected get effectName() { return \"unsharpen\"; }\n protected get matrix() {\n return [\n -1, -1, -1,\n -1, 9, -1,\n -1, -1, -1,\n ];\n }\n}\n\n/** Adds a screen-space emboss effect to the selected Viewport.\n * @beta\n */\nexport class EmbossEffect extends ConvolutionEffect {\n public static override toolId = \"EmbossEffect\";\n protected get effectName() { return \"emboss\"; }\n protected get matrix() {\n return [\n -2, -1, 0,\n -1, 1, 1,\n 0, 1, 2,\n ];\n }\n}\n\n/** Adds a screen-space sharpen effect to the selected Viewport.\n * @beta\n */\nexport class SharpenEffect extends ConvolutionEffect {\n public static override toolId = \"SharpenEffect\";\n protected get effectName() { return \"sharpen\"; }\n protected get matrix() {\n return [\n 0, -1, 0,\n -1, 5, -1,\n 0, -1, 0,\n ];\n }\n}\n\n/** Adds a screen-space sharpness effect to the selected Viewport.\n * @beta\n */\nexport class SharpnessEffect extends ConvolutionEffect {\n public static override toolId = \"SharpnessEffect\";\n protected get effectName() { return \"sharpness\"; }\n protected get matrix() {\n return [\n 0, -1, 0,\n -1, 5, -1,\n 0, -1, 0,\n ];\n }\n}\n\n/** Adds a screen-space edge-detection effect to the selected Viewport.\n * @beta\n */\nexport class EdgeDetectionEffect extends ConvolutionEffect {\n public static override toolId = \"EdgeDetectionEffect\";\n protected get effectName() { return \"edgedetect\"; }\n protected get matrix() {\n return [\n -5, 0, 0,\n 0, 0, 0,\n 0, 0, 5,\n ];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Convolution.js","sourceRoot":"","sources":["../../../src/effects/Convolution.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\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 Effects\r\n */\r\n\r\nimport { ScreenSpaceEffectBuilder, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { AddEffectTool } from \"./EffectTools\";\r\n\r\n/** Adds one of a collection of \"convolution kernels\" that alter a [Viewport]($frontend)'s image by blending neighboring pixels.\r\n * Based on https://webglfundamentals.org/webgl/lessons/webgl-image-processing-continued.html\r\n * @beta\r\n */\r\nexport abstract class ConvolutionEffect extends AddEffectTool {\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 0; }\r\n\r\n protected abstract get matrix(): number[];\r\n\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n return {\r\n // The vertex shader simply computes the texture coordinate for use in the fragment shader.\r\n vertex: `\r\n void effectMain(vec4 pos) {\r\n v_texCoord = textureCoordFromPosition(pos);\r\n }`,\r\n // The fragment shader samples the pixel and its neighbors and applies the kernel.\r\n fragment: `\r\n vec4 effectMain() {\r\n vec2 onePixel = vec2(1.0, 1.0) / u_textureSize;\r\n vec4 colorSum =\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, -1)) * u_kernel[0] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, -1)) * u_kernel[1] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, -1)) * u_kernel[2] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 0)) * u_kernel[3] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 0)) * u_kernel[4] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 0)) * u_kernel[5] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2(-1, 1)) * u_kernel[6] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 0, 1)) * u_kernel[7] +\r\n TEXTURE(u_diffuse, v_texCoord + onePixel * vec2( 1, 1)) * u_kernel[8] ;\r\n return vec4((colorSum / u_kernelWeight).rgb, 1);\r\n }`,\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n // Define the varying for the texture coordinate.\r\n builder.addVarying(\"v_texCoord\", VaryingType.Vec2);\r\n\r\n // Hook up the uniforms.\r\n const matrix = this.matrix;\r\n builder.addUniform({\r\n name: \"u_textureSize\",\r\n type: UniformType.Vec2,\r\n bind: (uniform, context) => {\r\n const rect = context.viewport.viewRect;\r\n uniform.setUniform2fv([rect.width, rect.height]);\r\n },\r\n });\r\n builder.addUniformArray({\r\n name: \"u_kernel\",\r\n type: UniformType.Float,\r\n length: matrix.length,\r\n bind: (uniform) => uniform.setUniform1fv(matrix),\r\n });\r\n\r\n let weight = matrix.reduce((prev, curr) => prev + curr);\r\n if (weight <= 0)\r\n weight = 1;\r\n\r\n builder.addUniform({\r\n name: \"u_kernelWeight\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(weight),\r\n });\r\n }\r\n}\r\n\r\n/** Adds a gaussian blur screen-space effect to the selected Viewport.\r\n * @beta\r\n */\r\nexport class GaussianBlurEffect extends ConvolutionEffect {\r\n public static override toolId = \"GaussianBlurEffect\";\r\n protected get effectName() { return \"blur\"; }\r\n protected get matrix() {\r\n return [\r\n 0.045, 0.122, 0.045,\r\n 0.122, 0.332, 0.122,\r\n 0.045, 0.122, 0.045,\r\n ];\r\n }\r\n}\r\n\r\n/** Adds a screen-space unsharpen effect to the selected Viewport.\r\n * @beta\r\n */\r\nexport class UnsharpenEffect extends ConvolutionEffect {\r\n public static override toolId = \"UnsharpenEffect\";\r\n protected get effectName() { return \"unsharpen\"; }\r\n protected get matrix() {\r\n return [\r\n -1, -1, -1,\r\n -1, 9, -1,\r\n -1, -1, -1,\r\n ];\r\n }\r\n}\r\n\r\n/** Adds a screen-space emboss effect to the selected Viewport.\r\n * @beta\r\n */\r\nexport class EmbossEffect extends ConvolutionEffect {\r\n public static override toolId = \"EmbossEffect\";\r\n protected get effectName() { return \"emboss\"; }\r\n protected get matrix() {\r\n return [\r\n -2, -1, 0,\r\n -1, 1, 1,\r\n 0, 1, 2,\r\n ];\r\n }\r\n}\r\n\r\n/** Adds a screen-space sharpen effect to the selected Viewport.\r\n * @beta\r\n */\r\nexport class SharpenEffect extends ConvolutionEffect {\r\n public static override toolId = \"SharpenEffect\";\r\n protected get effectName() { return \"sharpen\"; }\r\n protected get matrix() {\r\n return [\r\n 0, -1, 0,\r\n -1, 5, -1,\r\n 0, -1, 0,\r\n ];\r\n }\r\n}\r\n\r\n/** Adds a screen-space sharpness effect to the selected Viewport.\r\n * @beta\r\n */\r\nexport class SharpnessEffect extends ConvolutionEffect {\r\n public static override toolId = \"SharpnessEffect\";\r\n protected get effectName() { return \"sharpness\"; }\r\n protected get matrix() {\r\n return [\r\n 0, -1, 0,\r\n -1, 5, -1,\r\n 0, -1, 0,\r\n ];\r\n }\r\n}\r\n\r\n/** Adds a screen-space edge-detection effect to the selected Viewport.\r\n * @beta\r\n */\r\nexport class EdgeDetectionEffect extends ConvolutionEffect {\r\n public static override toolId = \"EdgeDetectionEffect\";\r\n protected get effectName() { return \"edgedetect\"; }\r\n protected get matrix() {\r\n return [\r\n -5, 0, 0,\r\n 0, 0, 0,\r\n 0, 0, 5,\r\n ];\r\n }\r\n}\r\n"]}
|