@itwin/frontend-devtools 4.6.0-dev.9 → 4.7.0-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +6 -5
  3. package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
  4. package/lib/cjs/FrontEndDevTools.js +2 -1
  5. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  6. package/lib/cjs/effects/Convolution.js +6 -6
  7. package/lib/cjs/effects/Convolution.js.map +1 -1
  8. package/lib/cjs/effects/EffectTools.js +2 -2
  9. package/lib/cjs/effects/EffectTools.js.map +1 -1
  10. package/lib/cjs/effects/Explosion.js +1 -1
  11. package/lib/cjs/effects/Explosion.js.map +1 -1
  12. package/lib/cjs/effects/FlipImage.js +2 -2
  13. package/lib/cjs/effects/FlipImage.js.map +1 -1
  14. package/lib/cjs/effects/LensDistortion.js +2 -2
  15. package/lib/cjs/effects/LensDistortion.js.map +1 -1
  16. package/lib/cjs/effects/Saturation.js +2 -2
  17. package/lib/cjs/effects/Saturation.js.map +1 -1
  18. package/lib/cjs/effects/Snow.js +2 -2
  19. package/lib/cjs/effects/Snow.js.map +1 -1
  20. package/lib/cjs/effects/Vignette.js +2 -2
  21. package/lib/cjs/effects/Vignette.js.map +1 -1
  22. package/lib/cjs/tools/AnimationIntervalTool.js +1 -1
  23. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  24. package/lib/cjs/tools/ChangeUnitsTool.js +1 -1
  25. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  26. package/lib/cjs/tools/ClipTools.js +4 -4
  27. package/lib/cjs/tools/ClipTools.js.map +1 -1
  28. package/lib/cjs/tools/DisplayStyleTools.js +10 -10
  29. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  30. package/lib/cjs/tools/EmphasizeElementsTool.js +5 -5
  31. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  32. package/lib/cjs/tools/FrustumDecoration.js +3 -3
  33. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  34. package/lib/cjs/tools/InspectElementTool.js +1 -1
  35. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  36. package/lib/cjs/tools/MapLayerTool.d.ts +7 -0
  37. package/lib/cjs/tools/MapLayerTool.d.ts.map +1 -1
  38. package/lib/cjs/tools/MapLayerTool.js +28 -20
  39. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  40. package/lib/cjs/tools/MeasureTileLoadTime.js +1 -1
  41. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  42. package/lib/cjs/tools/ModelAppearanceTools.js +8 -8
  43. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  44. package/lib/cjs/tools/PlanProjectionTools.js +3 -3
  45. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  46. package/lib/cjs/tools/PlanarMaskTools.js +12 -12
  47. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  48. package/lib/cjs/tools/ProjectExtents.js +1 -1
  49. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  50. package/lib/cjs/tools/RealityModelTools.js +10 -10
  51. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  52. package/lib/cjs/tools/RealityTransitionTool.js +1 -1
  53. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  54. package/lib/cjs/tools/RenderSystemTools.js +3 -3
  55. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  56. package/lib/cjs/tools/RenderTargetTools.js +10 -10
  57. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  58. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +1 -1
  59. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  60. package/lib/cjs/tools/SavedViews.js +3 -3
  61. package/lib/cjs/tools/SavedViews.js.map +1 -1
  62. package/lib/cjs/tools/ScheduleScriptTools.js +3 -3
  63. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  64. package/lib/cjs/tools/SelectionTools.js +2 -2
  65. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  66. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +1 -1
  67. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  68. package/lib/cjs/tools/SourceAspectIdTools.js +2 -2
  69. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  70. package/lib/cjs/tools/TileRequestDecoration.js +1 -1
  71. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  72. package/lib/cjs/tools/TileTreeBoundsDecoration.js +1 -1
  73. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  74. package/lib/cjs/tools/ToolTipProvider.js +1 -1
  75. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  76. package/lib/cjs/tools/ViewportTools.js +19 -19
  77. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  78. package/lib/cjs/tools/parseArgs.js.map +1 -1
  79. package/lib/cjs/tools/parseBoolean.js.map +1 -1
  80. package/lib/cjs/tools/parseToggle.js.map +1 -1
  81. package/lib/cjs/ui/ColorInput.js.map +1 -1
  82. package/lib/cjs/ui/ComboBox.js.map +1 -1
  83. package/lib/cjs/ui/DataList.js.map +1 -1
  84. package/lib/cjs/ui/NumericInput.js.map +1 -1
  85. package/lib/cjs/ui/RadioBox.js.map +1 -1
  86. package/lib/cjs/ui/Slider.js.map +1 -1
  87. package/lib/cjs/ui/TextBox.js.map +1 -1
  88. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  89. package/lib/cjs/widgets/FpsTracker.js.map +1 -1
  90. package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
  91. package/lib/cjs/widgets/KeyinField.js +1 -1
  92. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  93. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  94. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  95. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  96. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  97. package/lib/cjs/widgets/ToolSettingsTracker.js +1 -1
  98. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  99. package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
  100. package/lib/esm/FrontEndDevTools.js +3 -3
  101. package/lib/esm/FrontEndDevTools.js.map +1 -1
  102. package/lib/esm/effects/Convolution.js +6 -12
  103. package/lib/esm/effects/Convolution.js.map +1 -1
  104. package/lib/esm/effects/EffectTools.js +2 -4
  105. package/lib/esm/effects/EffectTools.js.map +1 -1
  106. package/lib/esm/effects/Explosion.js +1 -2
  107. package/lib/esm/effects/Explosion.js.map +1 -1
  108. package/lib/esm/effects/FlipImage.js +2 -4
  109. package/lib/esm/effects/FlipImage.js.map +1 -1
  110. package/lib/esm/effects/LensDistortion.js +2 -4
  111. package/lib/esm/effects/LensDistortion.js.map +1 -1
  112. package/lib/esm/effects/Saturation.js +2 -4
  113. package/lib/esm/effects/Saturation.js.map +1 -1
  114. package/lib/esm/effects/Snow.js +2 -4
  115. package/lib/esm/effects/Snow.js.map +1 -1
  116. package/lib/esm/effects/Vignette.js +2 -4
  117. package/lib/esm/effects/Vignette.js.map +1 -1
  118. package/lib/esm/tools/AnimationIntervalTool.js +1 -2
  119. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  120. package/lib/esm/tools/ChangeUnitsTool.js +1 -2
  121. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  122. package/lib/esm/tools/ClipTools.js +4 -8
  123. package/lib/esm/tools/ClipTools.js.map +1 -1
  124. package/lib/esm/tools/DisplayStyleTools.js +10 -20
  125. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  126. package/lib/esm/tools/EmphasizeElementsTool.js +5 -10
  127. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  128. package/lib/esm/tools/FrustumDecoration.js +3 -6
  129. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  130. package/lib/esm/tools/InspectElementTool.js +1 -2
  131. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  132. package/lib/esm/tools/MapLayerTool.d.ts +7 -0
  133. package/lib/esm/tools/MapLayerTool.d.ts.map +1 -1
  134. package/lib/esm/tools/MapLayerTool.js +26 -38
  135. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  136. package/lib/esm/tools/MeasureTileLoadTime.js +1 -2
  137. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  138. package/lib/esm/tools/ModelAppearanceTools.js +8 -16
  139. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  140. package/lib/esm/tools/PlanProjectionTools.js +3 -6
  141. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  142. package/lib/esm/tools/PlanarMaskTools.js +12 -24
  143. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  144. package/lib/esm/tools/ProjectExtents.js +1 -2
  145. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  146. package/lib/esm/tools/RealityModelTools.js +10 -20
  147. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  148. package/lib/esm/tools/RealityTransitionTool.js +1 -2
  149. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  150. package/lib/esm/tools/RenderSystemTools.js +3 -6
  151. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  152. package/lib/esm/tools/RenderTargetTools.js +10 -20
  153. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  154. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +1 -2
  155. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  156. package/lib/esm/tools/SavedViews.js +3 -6
  157. package/lib/esm/tools/SavedViews.js.map +1 -1
  158. package/lib/esm/tools/ScheduleScriptTools.js +3 -6
  159. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  160. package/lib/esm/tools/SelectionTools.js +2 -4
  161. package/lib/esm/tools/SelectionTools.js.map +1 -1
  162. package/lib/esm/tools/SetGpuMemoryLimitTool.js +1 -2
  163. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  164. package/lib/esm/tools/SourceAspectIdTools.js +2 -4
  165. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  166. package/lib/esm/tools/TileRequestDecoration.js +1 -2
  167. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  168. package/lib/esm/tools/TileTreeBoundsDecoration.js +1 -2
  169. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  170. package/lib/esm/tools/ToolTipProvider.js +1 -2
  171. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  172. package/lib/esm/tools/ViewportTools.js +19 -38
  173. package/lib/esm/tools/ViewportTools.js.map +1 -1
  174. package/lib/esm/tools/parseArgs.js.map +1 -1
  175. package/lib/esm/tools/parseBoolean.js.map +1 -1
  176. package/lib/esm/tools/parseToggle.js.map +1 -1
  177. package/lib/esm/ui/ColorInput.js.map +1 -1
  178. package/lib/esm/ui/ComboBox.js.map +1 -1
  179. package/lib/esm/ui/DataList.js.map +1 -1
  180. package/lib/esm/ui/NumericInput.js.map +1 -1
  181. package/lib/esm/ui/RadioBox.js.map +1 -1
  182. package/lib/esm/ui/Slider.js.map +1 -1
  183. package/lib/esm/ui/TextBox.js.map +1 -1
  184. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  185. package/lib/esm/widgets/FpsTracker.js.map +1 -1
  186. package/lib/esm/widgets/GpuProfiler.js.map +1 -1
  187. package/lib/esm/widgets/KeyinField.js.map +1 -1
  188. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  189. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  190. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  191. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  192. package/lib/esm/widgets/ToolSettingsTracker.js +1 -2
  193. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  194. package/lib/public/locales/en/FrontendDevTools.json +3 -0
  195. package/package.json +8 -8
package/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # Change Log - @itwin/frontend-devtools
2
2
 
3
- This log was last generated on Wed, 03 Apr 2024 18:28:10 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 16 Apr 2024 14:47:36 GMT and should not be manually modified.
4
+
5
+ ## 4.5.2
6
+ Tue, 16 Apr 2024 14:46:22 GMT
7
+
8
+ _Version update only_
4
9
 
5
10
  ## 4.5.1
6
11
  Wed, 03 Apr 2024 18:26:59 GMT
@@ -14,6 +19,11 @@ Tue, 02 Apr 2024 19:06:00 GMT
14
19
 
15
20
  - enhanced fdt test clip style command
16
21
 
22
+ ## 4.4.9
23
+ Mon, 15 Apr 2024 20:29:22 GMT
24
+
25
+ _Version update only_
26
+
17
27
  ## 4.4.8
18
28
  Mon, 25 Mar 2024 22:22:26 GMT
19
29
 
package/README.md CHANGED
@@ -153,11 +153,12 @@ Several keyins enable attaching map layers of a particular format. Each takes th
153
153
 
154
154
  These keyins take the form `fdt attach <format> maplayer <arguments>` where `format` is one of the following:
155
155
 
156
- * `wms` - a very common OGC standard Web Map Service that produces images on demand.
157
- * `wmts` - a Web Map Tile Service that produces cached tiles.
158
- * `arcgis` - uses the ArcGIS REST API directly. The URL typically ends with "MapServer".
159
- * `arcgisfeature` - obtains vector data from the ArcGIS REST API and converts it to tiles.
160
- * `tileurl` - obtains tailes directly from a file server using a supplied URL template.
156
+ * `WMS` - a very common OGC standard Web Map Service that produces images on demand.
157
+ * `WMTS` - a Web Map Tile Service that produces cached tiles.
158
+ * `ArcGIS` - uses the ArcGIS REST API directly. The URL typically ends with "MapServer".
159
+ * `ArcGISFeature` - obtains vector data from the ArcGIS REST API and converts it to tiles. (Requires `@itwin/map-layers-formats)
160
+ * `TileURL` - obtains tailes directly from a file server using a supplied URL template.
161
+ * `OgcApiFeatures` - obtains vector data from a OGC API - Feature server converts it to tiles (Requires `@itwin/map-layers-formats)
161
162
 
162
163
  ### Reality model key-ins
163
164
 
@@ -1 +1 @@
1
- {"version":3,"file":"FrontEndDevTools.d.ts","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAIA;;GAEG;AAkEH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IAEpC;;;;;;;OAOG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoK/C,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
1
+ {"version":3,"file":"FrontEndDevTools.d.ts","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"AAIA;;GAEG;AAkEH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IAEpC;;;;;;;OAOG;WACiB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqK/C,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB"}
@@ -70,6 +70,7 @@ class FrontendDevTools {
70
70
  MapLayerTool_1.AttachModelMapLayerTool,
71
71
  MapLayerTool_1.AttachArcGISMapLayerByUrlTool,
72
72
  MapLayerTool_1.AttachArcGISFeatureMapLayerByUrlTool,
73
+ MapLayerTool_1.AttachOgcApiFeaturesMapLayerTool,
73
74
  MapLayerTool_1.AttachWmsMapLayerByUrlTool,
74
75
  MapLayerTool_1.AttachWmtsMapLayerByUrlTool,
75
76
  MapLayerTool_1.AttachTileURLMapLayerByUrlTool,
@@ -218,6 +219,6 @@ class FrontendDevTools {
218
219
  this._initialized = false;
219
220
  }
220
221
  }
221
- FrontendDevTools._initialized = false;
222
222
  exports.FrontendDevTools = FrontendDevTools;
223
+ FrontendDevTools._initialized = false;
223
224
  //# sourceMappingURL=FrontEndDevTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FrontEndDevTools.js","sourceRoot":"","sources":["../../src/FrontEndDevTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utilities\r\n */\r\n\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { EdgeDetectionEffect, EmbossEffect, GaussianBlurEffect, SharpenEffect, SharpnessEffect, UnsharpenEffect } from \"./effects/Convolution\";\r\nimport { ClearEffectsTool } from \"./effects/EffectTools\";\r\nimport { ExplosionEffect } from \"./effects/Explosion\";\r\nimport { FlipImageConfig, FlipImageEffect } from \"./effects/FlipImage\";\r\nimport { LensDistortionConfig, LensDistortionEffect } from \"./effects/LensDistortion\";\r\nimport { SaturationConfig, SaturationEffect } from \"./effects/Saturation\";\r\nimport { SnowEffect } from \"./effects/Snow\";\r\nimport { VignetteConfig, VignetteEffect } from \"./effects/Vignette\";\r\nimport {\r\n MaskBackgroundMapByElementTool, MaskBackgroundMapByExcludedElementTool, MaskBackgroundMapByModelTool, MaskBackgroundMapBySubCategoryTool, MaskRealityModelByElementTool, MaskRealityModelByExcludedElementTool,\r\n MaskRealityModelByModelTool, MaskRealityModelBySubCategoryTool, SetHigherPriorityRealityModelMasking, SetMapHigherPriorityMasking, UnmaskMapTool, UnmaskRealityModelTool,\r\n} from \"./tools/PlanarMaskTools\";\r\nimport {\r\n ChangeCameraTool, ChangeEmphasisSettingsTool, ChangeFlashSettingsTool, ChangeHiliteModeTool, ChangeHiliteSettingsTool, DefaultTileSizeModifierTool, FadeOutTool,\r\n FreezeSceneTool, SetAspectRatioSkewTool, ShowTileVolumesTool, Toggle3dManipulationsTool, ToggleDrawingGraphicsTool, ToggleSectionDrawingSpatialViewTool,\r\n ToggleTileTreeReferencesTool, ToggleViewAttachmentBoundariesTool, ToggleViewAttachmentClipShapesTool, ToggleViewAttachmentsTool, ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n} from \"./tools/ViewportTools\";\r\nimport { AnimationIntervalTool } from \"./tools/AnimationIntervalTool\";\r\nimport { ChangeUnitsTool } from \"./tools/ChangeUnitsTool\";\r\nimport { ClipColorTool, ClipIntersectionTool, TestClipStyleTool, ToggleSectionCutTool } from \"./tools/ClipTools\";\r\nimport {\r\n ApplyRenderingStyleTool, ChangeBackgroundColorTool, ChangeViewFlagsTool, OverrideSubCategoryTool, SaveRenderingStyleTool, SkyCubeTool,\r\n SkySphereTool, ToggleSkyboxTool, ToggleWiremeshTool, WoWIgnoreBackgroundTool,\r\n} from \"./tools/DisplayStyleTools\";\r\nimport { QueryScheduleScriptTool, ReverseScheduleScriptTool, SetScheduleScriptTool } from \"./tools/ScheduleScriptTools\";\r\nimport {\r\n ClearEmphasizedElementsTool, ClearIsolatedElementsTool, EmphasizeSelectedElementsTool, EmphasizeVisibleElementsTool, IsolateSelectedElementsTool,\r\n} from \"./tools/EmphasizeElementsTool\";\r\nimport { ToggleFrustumSnapshotTool, ToggleSelectedViewFrustumTool, ToggleShadowFrustumTool } from \"./tools/FrustumDecoration\";\r\nimport { InspectElementTool } from \"./tools/InspectElementTool\";\r\nimport {\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n AttachArcGISMapLayerByUrlTool, AttachMapLayerTool, AttachMapOverlayTool, AttachModelMapLayerTool, AttachTileURLMapLayerByUrlTool, AttachWmsMapLayerByUrlTool,\r\n AttachWmtsMapLayerByUrlTool, DetachMapLayersTool, MapBaseColorTool, MapBaseTransparencyTool, MapBaseVisibilityTool, MapLayerSubLayerVisibilityTool,\r\n MapLayerTransparencyTool, MapLayerVisibilityTool, MapLayerZoomTool, ReorderMapLayers, SetMapBaseTool, ToggleTerrainTool,\r\n} from \"./tools/MapLayerTool\";\r\nimport { MeasureTileLoadTimeTool } from \"./tools/MeasureTileLoadTime\";\r\nimport {\r\n ClearModelAppearanceOverrides, SetModelColorTool, SetModelEmphasizedTool, SetModelIgnoresMaterialsTool, SetModelLineCodeTool,\r\n SetModelLineWeightTool, SetModelLocateTool, SetModelTransparencyTool,\r\n} from \"./tools/ModelAppearanceTools\";\r\nimport { ChangePlanProjectionSettingsTool, DumpPlanProjectionSettingsTool, OverrideSubCategoryPriorityTool } from \"./tools/PlanProjectionTools\";\r\nimport { ToggleProjectExtentsTool } from \"./tools/ProjectExtents\";\r\nimport {\r\n AttachCesiumAssetTool, AttachRealityModelTool, ClearRealityModelAppearanceOverrides, DetachRealityModelTool, SaveRealityModelTool,\r\n SetRealityModelColorTool, SetRealityModelEmphasizedTool, SetRealityModelLocateTool, SetRealityModelTransparencyTool, ToggleOSMBuildingDisplay,\r\n} from \"./tools/RealityModelTools\";\r\nimport { RealityTransitionTool } from \"./tools/RealityTransitionTool\";\r\nimport { CompileShadersTool, LoseWebGLContextTool, ToggleDPIForLODTool } from \"./tools/RenderSystemTools\";\r\nimport {\r\n SetAASamplesTool, ToggleDrapeFrustumTool, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\r\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\r\n} from \"./tools/RenderTargetTools\";\r\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\r\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\r\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\r\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\r\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\r\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\r\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\r\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\r\n\r\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\r\n * @beta\r\n */\r\nexport class FrontendDevTools {\r\n private static _initialized = false;\r\n\r\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await FrontendDevTools.initialize();\r\n * ```\r\n * @beta\r\n */\r\n public static async initialize(): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n this._initialized = true;\r\n\r\n // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\r\n\r\n const namespace = \"FrontendDevTools\";\r\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\r\n const tools = [\r\n AttachMapLayerTool,\r\n AttachMapOverlayTool,\r\n AttachModelMapLayerTool,\r\n AttachArcGISMapLayerByUrlTool,\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n AttachWmsMapLayerByUrlTool,\r\n AttachWmtsMapLayerByUrlTool,\r\n AttachTileURLMapLayerByUrlTool,\r\n AnimationIntervalTool,\r\n ApplyRenderingStyleTool,\r\n ApplyViewByIdTool,\r\n ApplyViewTool,\r\n ChangeBackgroundColorTool,\r\n ChangeCameraTool,\r\n ChangeEmphasisSettingsTool,\r\n ChangeFlashSettingsTool,\r\n ChangeHiliteModeTool,\r\n ChangeHiliteSettingsTool,\r\n ChangePlanProjectionSettingsTool,\r\n ChangeUnitsTool,\r\n ChangeViewFlagsTool,\r\n ClearEffectsTool,\r\n ClearEmphasizedElementsTool,\r\n ClearIsolatedElementsTool,\r\n ClipColorTool,\r\n ClipIntersectionTool,\r\n CompileShadersTool,\r\n DefaultTileSizeModifierTool,\r\n DetachMapLayersTool,\r\n DumpPlanProjectionSettingsTool,\r\n DumpSelectionSetTool,\r\n EdgeDetectionEffect,\r\n EmbossEffect,\r\n ElementIdFromSourceAspectIdTool,\r\n EmphasizeSelectedElementsTool,\r\n EmphasizeVisibleElementsTool,\r\n ExplosionEffect,\r\n FadeOutTool,\r\n FlipImageConfig,\r\n FlipImageEffect,\r\n FreezeSceneTool,\r\n GaussianBlurEffect,\r\n InspectElementTool,\r\n IsolateSelectedElementsTool,\r\n LensDistortionConfig,\r\n LensDistortionEffect,\r\n LoseWebGLContextTool,\r\n MapLayerTransparencyTool,\r\n MapLayerVisibilityTool,\r\n MapLayerSubLayerVisibilityTool,\r\n MapLayerZoomTool,\r\n MapBaseColorTool,\r\n MapBaseTransparencyTool,\r\n MapBaseVisibilityTool,\r\n MeasureTileLoadTimeTool,\r\n OverrideSubCategoryTool,\r\n OverrideSubCategoryPriorityTool,\r\n QueryScheduleScriptTool,\r\n RealityTransitionTool,\r\n ReorderMapLayers,\r\n ReportWebGLCompatibilityTool,\r\n ReverseScheduleScriptTool,\r\n SaturationConfig,\r\n SaturationEffect,\r\n SaveRenderingStyleTool,\r\n SaveViewTool,\r\n SelectElementsByIdTool,\r\n SetAASamplesTool,\r\n SetAspectRatioSkewTool,\r\n SetScheduleScriptTool,\r\n ToggleVolClassIntersect,\r\n SetMapBaseTool,\r\n SharpenEffect,\r\n SharpnessEffect,\r\n ShowTileVolumesTool,\r\n SkyCubeTool,\r\n SkySphereTool,\r\n SnowEffect,\r\n SourceAspectIdFromElementIdTool,\r\n TestClipStyleTool,\r\n Toggle3dManipulationsTool,\r\n ToggleDrawingGraphicsTool,\r\n ToggleDPIForLODTool,\r\n ToggleDrapeFrustumTool,\r\n ToggleFrustumSnapshotTool,\r\n ToggleNormalMaps,\r\n TogglePrimitiveVisibilityTool,\r\n ToggleProjectExtentsTool,\r\n ToggleReadPixelsTool,\r\n ToggleSectionDrawingSpatialViewTool,\r\n ToggleSelectedViewFrustumTool,\r\n ToggleShadowFrustumTool,\r\n ToggleSkyboxTool,\r\n ToggleTileRequestDecorationTool,\r\n ToggleTileTreeBoundsDecorationTool,\r\n ToggleTileTreeReferencesTool,\r\n ToggleToolTipsTool,\r\n ToggleViewAttachmentBoundariesTool,\r\n ToggleViewAttachmentClipShapesTool,\r\n ToggleViewAttachmentsTool,\r\n ToggleWiremeshTool,\r\n ToggleRealityTileBounds,\r\n ToggleRealityTilePreload,\r\n ToggleRealityTileLogging,\r\n ToggleRealityTileFreeze,\r\n ToggleSectionCutTool,\r\n ToggleTerrainTool,\r\n UnsharpenEffect,\r\n ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n VignetteConfig,\r\n VignetteEffect,\r\n AttachRealityModelTool,\r\n DetachRealityModelTool,\r\n SaveRealityModelTool,\r\n SetGpuMemoryLimitTool,\r\n SetRealityModelLocateTool,\r\n SetRealityModelEmphasizedTool,\r\n SetRealityModelTransparencyTool,\r\n SetRealityModelColorTool,\r\n SetModelLocateTool,\r\n SetModelEmphasizedTool,\r\n SetModelTransparencyTool,\r\n SetModelColorTool,\r\n SetModelLineWeightTool,\r\n SetModelLineCodeTool,\r\n SetModelIgnoresMaterialsTool,\r\n ClearRealityModelAppearanceOverrides,\r\n ClearModelAppearanceOverrides,\r\n AttachCesiumAssetTool,\r\n ToggleOSMBuildingDisplay,\r\n SetHigherPriorityRealityModelMasking,\r\n SetMapHigherPriorityMasking,\r\n MaskRealityModelByModelTool,\r\n MaskRealityModelBySubCategoryTool,\r\n MaskRealityModelByElementTool,\r\n MaskRealityModelByExcludedElementTool,\r\n UnmaskRealityModelTool,\r\n MaskBackgroundMapByModelTool,\r\n MaskBackgroundMapBySubCategoryTool,\r\n MaskBackgroundMapByElementTool,\r\n MaskBackgroundMapByExcludedElementTool,\r\n UnmaskMapTool,\r\n WoWIgnoreBackgroundTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(namespace);\r\n\r\n return namespacePromise;\r\n }\r\n\r\n private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
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, ToggleNormalMaps, TogglePrimitiveVisibilityTool, ToggleReadPixelsTool, ToggleRealityTileBounds, ToggleRealityTileFreeze,\r\n ToggleRealityTileLogging, ToggleRealityTilePreload, ToggleVolClassIntersect,\r\n} from \"./tools/RenderTargetTools\";\r\nimport { ReportWebGLCompatibilityTool } from \"./tools/ReportWebGLCompatibilityTool\";\r\nimport { ApplyViewByIdTool, ApplyViewTool, SaveViewTool } from \"./tools/SavedViews\";\r\nimport { DumpSelectionSetTool, SelectElementsByIdTool } from \"./tools/SelectionTools\";\r\nimport { SetGpuMemoryLimitTool } from \"./tools/SetGpuMemoryLimitTool\";\r\nimport { ElementIdFromSourceAspectIdTool, SourceAspectIdFromElementIdTool } from \"./tools/SourceAspectIdTools\";\r\nimport { ToggleTileRequestDecorationTool } from \"./tools/TileRequestDecoration\";\r\nimport { ToggleTileTreeBoundsDecorationTool } from \"./tools/TileTreeBoundsDecoration\";\r\nimport { ToggleToolTipsTool } from \"./tools/ToolTipProvider\";\r\n\r\n/** Entry-point for the package. Before using the package you *must* call [[FrontendDevTools.initialize]].\r\n * @beta\r\n */\r\nexport class FrontendDevTools {\r\n private static _initialized = false;\r\n\r\n /** Call this before using the package (e.g., before instantiating any of its widgets or attempting to use any of its tools.\r\n * To initialize when starting up your app:\r\n * ```ts\r\n * IModelApp.startup();\r\n * await FrontendDevTools.initialize();\r\n * ```\r\n * @beta\r\n */\r\n public static async initialize(): Promise<void> {\r\n if (this._initialized)\r\n return;\r\n\r\n this._initialized = true;\r\n\r\n // clean up if we're being shut down\r\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\r\n\r\n const namespace = \"FrontendDevTools\";\r\n const namespacePromise = IModelApp.localization.registerNamespace(namespace);\r\n const tools = [\r\n AttachMapLayerTool,\r\n AttachMapOverlayTool,\r\n AttachModelMapLayerTool,\r\n AttachArcGISMapLayerByUrlTool,\r\n AttachArcGISFeatureMapLayerByUrlTool,\r\n 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 ToggleNormalMaps,\r\n TogglePrimitiveVisibilityTool,\r\n ToggleProjectExtentsTool,\r\n ToggleReadPixelsTool,\r\n ToggleSectionDrawingSpatialViewTool,\r\n ToggleSelectedViewFrustumTool,\r\n ToggleShadowFrustumTool,\r\n ToggleSkyboxTool,\r\n ToggleTileRequestDecorationTool,\r\n ToggleTileTreeBoundsDecorationTool,\r\n ToggleTileTreeReferencesTool,\r\n ToggleToolTipsTool,\r\n ToggleViewAttachmentBoundariesTool,\r\n ToggleViewAttachmentClipShapesTool,\r\n ToggleViewAttachmentsTool,\r\n ToggleWiremeshTool,\r\n ToggleRealityTileBounds,\r\n ToggleRealityTilePreload,\r\n ToggleRealityTileLogging,\r\n ToggleRealityTileFreeze,\r\n ToggleSectionCutTool,\r\n ToggleTerrainTool,\r\n UnsharpenEffect,\r\n ViewportAddRealityModel,\r\n ViewportTileSizeModifierTool,\r\n VignetteConfig,\r\n VignetteEffect,\r\n AttachRealityModelTool,\r\n DetachRealityModelTool,\r\n SaveRealityModelTool,\r\n SetGpuMemoryLimitTool,\r\n SetRealityModelLocateTool,\r\n SetRealityModelEmphasizedTool,\r\n SetRealityModelTransparencyTool,\r\n SetRealityModelColorTool,\r\n SetModelLocateTool,\r\n SetModelEmphasizedTool,\r\n SetModelTransparencyTool,\r\n SetModelColorTool,\r\n SetModelLineWeightTool,\r\n SetModelLineCodeTool,\r\n SetModelIgnoresMaterialsTool,\r\n ClearRealityModelAppearanceOverrides,\r\n ClearModelAppearanceOverrides,\r\n AttachCesiumAssetTool,\r\n ToggleOSMBuildingDisplay,\r\n SetHigherPriorityRealityModelMasking,\r\n SetMapHigherPriorityMasking,\r\n MaskRealityModelByModelTool,\r\n MaskRealityModelBySubCategoryTool,\r\n MaskRealityModelByElementTool,\r\n MaskRealityModelByExcludedElementTool,\r\n UnmaskRealityModelTool,\r\n MaskBackgroundMapByModelTool,\r\n MaskBackgroundMapBySubCategoryTool,\r\n MaskBackgroundMapByElementTool,\r\n MaskBackgroundMapByExcludedElementTool,\r\n UnmaskMapTool,\r\n WoWIgnoreBackgroundTool,\r\n ];\r\n\r\n for (const tool of tools)\r\n tool.register(namespace);\r\n\r\n return namespacePromise;\r\n }\r\n\r\n private static shutdown() {\r\n this._initialized = false;\r\n }\r\n}\r\n"]}
@@ -86,8 +86,8 @@ class GaussianBlurEffect extends ConvolutionEffect {
86
86
  ];
87
87
  }
88
88
  }
89
- GaussianBlurEffect.toolId = "GaussianBlurEffect";
90
89
  exports.GaussianBlurEffect = GaussianBlurEffect;
90
+ GaussianBlurEffect.toolId = "GaussianBlurEffect";
91
91
  /** Adds a screen-space unsharpen effect to the selected Viewport.
92
92
  * @beta
93
93
  */
@@ -101,8 +101,8 @@ class UnsharpenEffect extends ConvolutionEffect {
101
101
  ];
102
102
  }
103
103
  }
104
- UnsharpenEffect.toolId = "UnsharpenEffect";
105
104
  exports.UnsharpenEffect = UnsharpenEffect;
105
+ UnsharpenEffect.toolId = "UnsharpenEffect";
106
106
  /** Adds a screen-space emboss effect to the selected Viewport.
107
107
  * @beta
108
108
  */
@@ -116,8 +116,8 @@ class EmbossEffect extends ConvolutionEffect {
116
116
  ];
117
117
  }
118
118
  }
119
- EmbossEffect.toolId = "EmbossEffect";
120
119
  exports.EmbossEffect = EmbossEffect;
120
+ EmbossEffect.toolId = "EmbossEffect";
121
121
  /** Adds a screen-space sharpen effect to the selected Viewport.
122
122
  * @beta
123
123
  */
@@ -131,8 +131,8 @@ class SharpenEffect extends ConvolutionEffect {
131
131
  ];
132
132
  }
133
133
  }
134
- SharpenEffect.toolId = "SharpenEffect";
135
134
  exports.SharpenEffect = SharpenEffect;
135
+ SharpenEffect.toolId = "SharpenEffect";
136
136
  /** Adds a screen-space sharpness effect to the selected Viewport.
137
137
  * @beta
138
138
  */
@@ -146,8 +146,8 @@ class SharpnessEffect extends ConvolutionEffect {
146
146
  ];
147
147
  }
148
148
  }
149
- SharpnessEffect.toolId = "SharpnessEffect";
150
149
  exports.SharpnessEffect = SharpnessEffect;
150
+ SharpnessEffect.toolId = "SharpnessEffect";
151
151
  /** Adds a screen-space edge-detection effect to the selected Viewport.
152
152
  * @beta
153
153
  */
@@ -161,6 +161,6 @@ class EdgeDetectionEffect extends ConvolutionEffect {
161
161
  ];
162
162
  }
163
163
  }
164
- EdgeDetectionEffect.toolId = "EdgeDetectionEffect";
165
164
  exports.EdgeDetectionEffect = EdgeDetectionEffect;
165
+ EdgeDetectionEffect.toolId = "EdgeDetectionEffect";
166
166
  //# sourceMappingURL=Convolution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Convolution.js","sourceRoot":"","sources":["../../../src/effects/Convolution.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAA0F;AAC1F,+CAA8C;AAE9C;;;GAGG;AACH,MAAsB,iBAAkB,SAAQ,2BAAa;IACpD,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAIlD,IAAc,wBAAwB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzD,IAAc,MAAM;QAClB,OAAO;YACL,2FAA2F;YAC3F,MAAM,EAAE;;;UAGJ;YACJ,kFAAkF;YAClF,QAAQ,EAAE;;;;;;;;;;;;;;UAcN;SACL,CAAC;IACJ,CAAC;IAES,YAAY,CAAC,OAAiC;QACtD,iDAAiD;QACjD,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,2BAAW,CAAC,IAAI,CAAC,CAAC;QAEnD,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,OAAO,CAAC,UAAU,CAAC;YACjB,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,2BAAW,CAAC,IAAI;YACtB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACnD,CAAC;SACF,CAAC,CAAC;QACH,OAAO,CAAC,eAAe,CAAC;YACtB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,2BAAW,CAAC,KAAK;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;SACjD,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACxD,IAAI,MAAM,IAAI,CAAC;YACb,MAAM,GAAG,CAAC,CAAC;QAEb,OAAO,CAAC,UAAU,CAAC;YACjB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,2BAAW,CAAC,KAAK;YACvB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;CACF;AAjED,8CAiEC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,iBAAiB;IAEvD,IAAc,UAAU,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;IAC7C,IAAc,MAAM;QAClB,OAAO;YACL,KAAK,EAAE,KAAK,EAAE,KAAK;YACnB,KAAK,EAAE,KAAK,EAAE,KAAK;YACnB,KAAK,EAAE,KAAK,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;;AARsB,yBAAM,GAAG,oBAAoB,CAAC;AAD1C,gDAAkB;AAY/B;;GAEG;AACH,MAAa,eAAgB,SAAQ,iBAAiB;IAEpD,IAAc,UAAU,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC;IAClD,IAAc,MAAM;QAClB,OAAO;YACL,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACV,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACT,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,CAAC;IACJ,CAAC;;AARsB,sBAAM,GAAG,iBAAiB,CAAC;AADvC,0CAAe;AAY5B;;GAEG;AACH,MAAa,YAAa,SAAQ,iBAAiB;IAEjD,IAAc,UAAU,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC;IAC/C,IAAc,MAAM;QAClB,OAAO;YACL,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACT,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACR,CAAC,EAAE,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;;AARsB,mBAAM,GAAG,cAAc,CAAC;AADpC,oCAAY;AAYzB;;GAEG;AACH,MAAa,aAAc,SAAQ,iBAAiB;IAElD,IAAc,UAAU,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IAChD,IAAc,MAAM;QAClB,OAAO;YACL,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACR,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACT,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;SACT,CAAC;IACJ,CAAC;;AARsB,oBAAM,GAAG,eAAe,CAAC;AADrC,sCAAa;AAY1B;;GAEG;AACH,MAAa,eAAgB,SAAQ,iBAAiB;IAEpD,IAAc,UAAU,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC;IAClD,IAAc,MAAM;QAClB,OAAO;YACL,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACR,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACT,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;SACT,CAAC;IACJ,CAAC;;AARsB,sBAAM,GAAG,iBAAiB,CAAC;AADvC,0CAAe;AAY5B;;GAEG;AACH,MAAa,mBAAoB,SAAQ,iBAAiB;IAExD,IAAc,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC;IACnD,IAAc,MAAM;QAClB,OAAO;YACL,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACR,CAAC,EAAE,CAAC,EAAE,CAAC;YACP,CAAC,EAAE,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;;AARsB,0BAAM,GAAG,qBAAqB,CAAC;AAD3C,kDAAmB","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"]}
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"]}
@@ -35,8 +35,8 @@ class AddEffectTool extends core_frontend_1.Tool {
35
35
  return true;
36
36
  }
37
37
  }
38
- AddEffectTool._registeredEffects = new Set();
39
38
  exports.AddEffectTool = AddEffectTool;
39
+ AddEffectTool._registeredEffects = new Set();
40
40
  /** Removes all screen-space effects from the selected viewport.
41
41
  * @beta
42
42
  */
@@ -48,8 +48,8 @@ class ClearEffectsTool extends core_frontend_1.Tool {
48
48
  return true;
49
49
  }
50
50
  }
51
- ClearEffectsTool.toolId = "ClearEffects";
52
51
  exports.ClearEffectsTool = ClearEffectsTool;
52
+ ClearEffectsTool.toolId = "ClearEffects";
53
53
  /** Requests that any viewport to which the specified effect has been applied redraw its contents.
54
54
  * Used by tools like [[VignetteConfig]] to update the view after the effect parameters are modified.
55
55
  * @beta
@@ -1 +1 @@
1
- {"version":3,"file":"EffectTools.js","sourceRoot":"","sources":["../../../src/effects/EffectTools.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAC7C,wDAE8B;AAE9B;;GAEG;AACH,MAAsB,aAAc,SAAQ,oBAAI;IAY9B,KAAK,CAAC,GAAG;QACvB,2EAA2E;QAC3E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC/C,uBAAuB;YACvB,MAAM,OAAO,GAAG,yBAAS,CAAC,YAAY,CAAC,8BAA8B,CAAC;gBACpE,IAAI;gBACJ,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;gBACvD,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,IAAA,qBAAM,EAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC5C;QAED,MAAM,EAAE,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,EAAE;YACJ,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;;AAlCuB,gCAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;AAD3C,sCAAa;AAsCnC;;GAEG;AACH,MAAa,gBAAiB,SAAQ,oBAAI;IAEjC,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,GAAG;QACvB,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;;AAPsB,uBAAM,GAAG,cAAc,CAAC;AADpC,4CAAgB;AAW7B;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,UAAkB;IAC1D,KAAK,MAAM,EAAE,IAAI,yBAAS,CAAC,WAAW,EAAE;QACtC,KAAK,MAAM,YAAY,IAAI,EAAE,CAAC,kBAAkB,EAAE;YAChD,IAAI,YAAY,KAAK,UAAU,EAAE;gBAC/B,EAAE,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM;aACP;SACF;KACF;AACH,CAAC;AATD,8DASC","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 { assert } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelApp, ScreenSpaceEffectBuilder, ScreenSpaceEffectSource, Tool,\r\n} from \"@itwin/core-frontend\";\r\n\r\n/** Adds a screen-space effect to the selected viewport.\r\n * @beta\r\n */\r\nexport abstract class AddEffectTool extends Tool {\r\n private static readonly _registeredEffects = new Set<string>();\r\n\r\n /** Name of effect as used in keyins like `fdt effect add`. Ideally one word. */\r\n protected abstract get effectName(): string;\r\n /** vertex, fragment, and optional sampleSourcePixel GLSL snippets. */\r\n protected abstract get source(): ScreenSpaceEffectSource;\r\n /** Whether the fragment shader should include built-in `textureCoordFromPosition` function. */\r\n protected abstract get textureCoordFromPosition(): boolean;\r\n /** Add uniforms, varyings, etc. */\r\n protected abstract defineEffect(builder: ScreenSpaceEffectBuilder): void;\r\n\r\n public override async run(): Promise<boolean> {\r\n // Avoid conflicts with the names of other registered screen-space effects.\r\n const name = `fdt ${this.effectName}`;\r\n if (!AddEffectTool._registeredEffects.has(name)) {\r\n // Register the effect.\r\n const builder = IModelApp.renderSystem.createScreenSpaceEffectBuilder({\r\n name,\r\n textureCoordFromPosition: this.textureCoordFromPosition,\r\n source: this.source,\r\n });\r\n\r\n assert(undefined !== builder);\r\n this.defineEffect(builder);\r\n builder.finish();\r\n\r\n AddEffectTool._registeredEffects.add(name);\r\n }\r\n\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp)\r\n vp.addScreenSpaceEffect(name);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Removes all screen-space effects from the selected viewport.\r\n * @beta\r\n */\r\nexport class ClearEffectsTool extends Tool {\r\n public static override toolId = \"ClearEffects\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 0; }\r\n\r\n public override async run(): Promise<boolean> {\r\n IModelApp.viewManager.selectedView?.removeScreenSpaceEffects();\r\n return true;\r\n }\r\n}\r\n\r\n/** Requests that any viewport to which the specified effect has been applied redraw its contents.\r\n * Used by tools like [[VignetteConfig]] to update the view after the effect parameters are modified.\r\n * @beta\r\n */\r\nexport function refreshViewportsForEffect(effectName: string): void {\r\n for (const vp of IModelApp.viewManager) {\r\n for (const vpEffectName of vp.screenSpaceEffects) {\r\n if (vpEffectName === effectName) {\r\n vp.requestRedraw();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EffectTools.js","sourceRoot":"","sources":["../../../src/effects/EffectTools.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAC7C,wDAE8B;AAE9B;;GAEG;AACH,MAAsB,aAAc,SAAQ,oBAAI;IAY9B,KAAK,CAAC,GAAG;QACvB,2EAA2E;QAC3E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,uBAAuB;YACvB,MAAM,OAAO,GAAG,yBAAS,CAAC,YAAY,CAAC,8BAA8B,CAAC;gBACpE,IAAI;gBACJ,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;gBACvD,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,IAAA,qBAAM,EAAC,SAAS,KAAK,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,EAAE,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,EAAE;YACJ,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;;AAnCH,sCAoCC;AAnCyB,gCAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;AAqCjE;;GAEG;AACH,MAAa,gBAAiB,SAAQ,oBAAI;IAEjC,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,GAAG;QACvB,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;;AARH,4CASC;AARwB,uBAAM,GAAG,cAAc,CAAC;AAUjD;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,UAAkB;IAC1D,KAAK,MAAM,EAAE,IAAI,yBAAS,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,MAAM,YAAY,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;YACjD,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChC,EAAE,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AATD,8DASC","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 { assert } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelApp, ScreenSpaceEffectBuilder, ScreenSpaceEffectSource, Tool,\r\n} from \"@itwin/core-frontend\";\r\n\r\n/** Adds a screen-space effect to the selected viewport.\r\n * @beta\r\n */\r\nexport abstract class AddEffectTool extends Tool {\r\n private static readonly _registeredEffects = new Set<string>();\r\n\r\n /** Name of effect as used in keyins like `fdt effect add`. Ideally one word. */\r\n protected abstract get effectName(): string;\r\n /** vertex, fragment, and optional sampleSourcePixel GLSL snippets. */\r\n protected abstract get source(): ScreenSpaceEffectSource;\r\n /** Whether the fragment shader should include built-in `textureCoordFromPosition` function. */\r\n protected abstract get textureCoordFromPosition(): boolean;\r\n /** Add uniforms, varyings, etc. */\r\n protected abstract defineEffect(builder: ScreenSpaceEffectBuilder): void;\r\n\r\n public override async run(): Promise<boolean> {\r\n // Avoid conflicts with the names of other registered screen-space effects.\r\n const name = `fdt ${this.effectName}`;\r\n if (!AddEffectTool._registeredEffects.has(name)) {\r\n // Register the effect.\r\n const builder = IModelApp.renderSystem.createScreenSpaceEffectBuilder({\r\n name,\r\n textureCoordFromPosition: this.textureCoordFromPosition,\r\n source: this.source,\r\n });\r\n\r\n assert(undefined !== builder);\r\n this.defineEffect(builder);\r\n builder.finish();\r\n\r\n AddEffectTool._registeredEffects.add(name);\r\n }\r\n\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp)\r\n vp.addScreenSpaceEffect(name);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Removes all screen-space effects from the selected viewport.\r\n * @beta\r\n */\r\nexport class ClearEffectsTool extends Tool {\r\n public static override toolId = \"ClearEffects\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 0; }\r\n\r\n public override async run(): Promise<boolean> {\r\n IModelApp.viewManager.selectedView?.removeScreenSpaceEffects();\r\n return true;\r\n }\r\n}\r\n\r\n/** Requests that any viewport to which the specified effect has been applied redraw its contents.\r\n * Used by tools like [[VignetteConfig]] to update the view after the effect parameters are modified.\r\n * @beta\r\n */\r\nexport function refreshViewportsForEffect(effectName: string): void {\r\n for (const vp of IModelApp.viewManager) {\r\n for (const vpEffectName of vp.screenSpaceEffects) {\r\n if (vpEffectName === effectName) {\r\n vp.requestRedraw();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -164,6 +164,6 @@ class ExplosionEffect extends core_frontend_1.Tool {
164
164
  return true;
165
165
  }
166
166
  }
167
- ExplosionEffect.toolId = "ExplosionEffect";
168
167
  exports.ExplosionEffect = ExplosionEffect;
168
+ ExplosionEffect.toolId = "ExplosionEffect";
169
169
  //# sourceMappingURL=Explosion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Explosion.js","sourceRoot":"","sources":["../../../src/effects/Explosion.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,wDAAkE;AAClE,oDAAwE;AACxE,wDAE8B;AAC9B,qCAAwG;AAExG,6CAA6C;AAC7C,MAAM,QAAQ;IAcZ,IAAW,CAAC,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAW,CAAC,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAW,CAAC,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1C,YAAmB,QAAiB,EAAE,QAAkB,EAAE,QAAgB,EAAE,IAAY;QAbxF,sDAAsD;QAC/C,QAAG,GAAG,CAAC,CAAC;QAKf,yCAAyC;QAClC,iBAAY,GAAG,CAAC,CAAC;QAOtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,eAAe;IAArB;QACE,4FAA4F;QAC5E,eAAU,GAAG,uBAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,6EAA6E;QAC7D,kBAAa,GAAG,uBAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,wEAAwE;QACxD,cAAS,GAAG,uBAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvD,yEAAyE;QAClE,sBAAiB,GAAG,uBAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAkB1D,CAAC;IAhBC,oEAAoE;IAC7D,IAAI;QACT,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG,IAAA,6BAAoB,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,wBAAQ,CAAC,IAAA,oBAAW,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAA,oBAAW,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAA,oBAAW,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACtG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC5B,QAAQ,CAAC,YAAY,CAAC,IAAA,2BAAkB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAE3D,MAAM,QAAQ,GAAG,IAAA,2BAAkB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,IAAA,2BAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,uBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;SAC9E;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,MAAM,cAAc;IAelB,YAAmB,OAAsB,EAAE,MAAwB,EAAE,YAAoB;QAZxE,aAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QAI1C,eAAU,GAAe,EAAE,CAAC;QACnB,qBAAgB,GAAG,IAAI,wBAAQ,EAAE,CAAC;QAEnD,4EAA4E;QACrE,YAAO,GAAG,CAAC,CAAC,CAAC;QAKlB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,CAAC,OAAO,GAAG,IAAA,8BAAqB,EAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAEM,OAAO;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;SAC3B;QAED,yBAAS,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAEM,MAAM;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAE3B,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1C,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;gBACxB,IAAI,CAAC,OAAO,EAAE,CAAC;;gBAEf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEzC,OAAO;SACR;QAED,MAAM,cAAc,GAAG,WAAW,GAAG,IAAI,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,SAAS,EAAE;gBACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACvD,EAAE,CAAC,CAAC;gBACJ,EAAE,YAAY,CAAC;aAChB;SACF;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC;IACxC,CAAC;IAEO,cAAc,CAAC,QAAkB,EAAE,cAAsB;QAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChE,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACzC,QAAQ,CAAC,CAAC,IAAI,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5C,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEjE,QAAQ,CAAC,GAAG,IAAI,cAAc,CAAC;IACjC,CAAC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;YACxC,OAAO;QAET,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,MAAM,OAAO,GAAG,yCAAyB,CAAC,MAAM,CAAC;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YACtE,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAC;QAEH,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU;YACpC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,aAAa,CAAC,2BAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC;SACvE;IACH,CAAC;IAEM,iBAAiB,CAAC,EAAc;QACrC,OAAO,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,IAAe;QAC/C,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAwB;QACvD,yGAAyG;QACzG,MAAM,KAAK,GAAG,MAAM,IAAA,mCAAmB,EAAC,GAAG,yBAAS,CAAC,UAAU,gCAAgC,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,yBAAS,CAAC,YAAY,CAAC,aAAa,CAAC;YACnD,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,iCAAmB,CAAC,KAAK,EAAE;SAClE,CAAC,CAAC;QACH,IAAI,OAAO;YACT,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAA,6BAAoB,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC1H,CAAC;;AA1Ga,gCAAiB,GAAG,uBAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,AAAzB,CAA0B;AA6G3D;;GAEG;AACH,MAAa,eAAgB,SAAQ,oBAAI;IAGvC,wEAAwE;IACxD,KAAK,CAAC,GAAG;QACvB,MAAM,EAAE,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,EAAE;YACJ,MAAM,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;;AATsB,sBAAM,GAAG,iBAAiB,CAAC;AADvC,0CAAe","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 { Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { RenderTexture, TextureTransparency } from \"@itwin/core-common\";\r\nimport {\r\n DecorateContext, GraphicType, HitDetail, imageElementFromUrl, IModelApp, IModelConnection, ParticleCollectionBuilder, ParticleProps, Tool,\r\n} from \"@itwin/core-frontend\";\r\nimport { randomFloat, randomFloatInRange, randomIntegerInRange, randomPositionInRange } from \"./Random\";\r\n\r\n/** Represents one particle in the system. */\r\nclass Particle implements ParticleProps {\r\n /** Current position in the particle system's local coordinate space. */\r\n public readonly position: Point3d;\r\n /** Current velocity in meters per second. */\r\n public readonly velocity: Vector3d;\r\n /** Current age in seconds, incremented each frame. */\r\n public age = 0;\r\n /** Maximum age in seconds. When `this.age` exceeds `this.lifetime`, the particle expires. */\r\n public readonly lifetime: number;\r\n /** Particle size in meters. */\r\n public size: number;\r\n /** Particle transparency in [0..255]. */\r\n public transparency = 0;\r\n\r\n public get x() { return this.position.x; }\r\n public get y() { return this.position.y; }\r\n public get z() { return this.position.z; }\r\n\r\n public constructor(position: Point3d, velocity: Vector3d, lifetime: number, size: number) {\r\n this.position = position;\r\n this.velocity = velocity;\r\n this.lifetime = lifetime;\r\n this.size = size;\r\n }\r\n\r\n public get isExpired() { return this.age >= this.lifetime; }\r\n}\r\n\r\n/** Emits particles in a sphere with its center at the origin.\r\n * Each particle is emitted from the center of the sphere with random velocity toward the surface of the sphere.\r\n */\r\nclass ParticleEmitter {\r\n /** Range from which each particle's initial speed in meters per second will be selected. */\r\n public readonly speedRange = Range1d.createXX(1, 2);\r\n /** Range from which each particle's lifetime in seconds will be selected. */\r\n public readonly lifetimeRange = Range1d.createXX(5, 10);\r\n /** Range from which each particle's size in meters will be selected. */\r\n public readonly sizeRange = Range1d.createXX(0.2, 1.0);\r\n /** Range from which the number of particles emitted will be selected. */\r\n public numParticlesRange = Range1d.createXX(1600, 2200);\r\n\r\n /** Emit an explosion of particles from the center of the sphere. */\r\n public emit(): Particle[] {\r\n const particles = [];\r\n const numParticles = randomIntegerInRange(this.numParticlesRange);\r\n for (let i = 0; i < numParticles; i++) {\r\n const velocity = new Vector3d(randomFloat(-1.0, 1.0), randomFloat(-1.0, 1.0), randomFloat(-1.0, 1.0));\r\n velocity.normalizeInPlace();\r\n velocity.scaleInPlace(randomFloatInRange(this.speedRange));\r\n\r\n const lifetime = randomFloatInRange(this.lifetimeRange);\r\n const size = randomFloatInRange(this.sizeRange);\r\n particles.push(new Particle(new Point3d(0, 0, 0), velocity, lifetime, size));\r\n }\r\n\r\n return particles;\r\n }\r\n}\r\n\r\nclass ParticleSystem {\r\n private readonly _origin: Point3d;\r\n private readonly _pickableId: Id64String;\r\n private readonly _emitter = new ParticleEmitter();\r\n private _numEmissions: number;\r\n private readonly _texture: RenderTexture;\r\n private _lastUpdateTime: number;\r\n private _particles: Particle[] = [];\r\n private readonly _scratchVector3d = new Vector3d();\r\n private _dispose?: VoidFunction;\r\n /** Acceleration in Z applied to particles, in meters per second squared. */\r\n public gravity = -3;\r\n\r\n public static numEmissionsRange = Range1d.createXX(1, 5);\r\n\r\n public constructor(texture: RenderTexture, iModel: IModelConnection, numEmissions: number) {\r\n this._texture = texture;\r\n this._pickableId = iModel.transientIds.getNext();\r\n this._numEmissions = numEmissions;\r\n this._lastUpdateTime = Date.now();\r\n\r\n this._origin = randomPositionInRange(iModel.projectExtents);\r\n\r\n this._dispose = iModel.onClose.addListener(() => this.dispose());\r\n }\r\n\r\n public dispose(): void {\r\n if (this._dispose) {\r\n this._dispose();\r\n this._dispose = undefined;\r\n }\r\n\r\n IModelApp.viewManager.dropDecorator(this);\r\n this._texture.dispose();\r\n }\r\n\r\n public update(): void {\r\n const now = Date.now();\r\n let deltaMillis = now - this._lastUpdateTime;\r\n deltaMillis = Math.min(100, deltaMillis);\r\n this._lastUpdateTime = now;\r\n\r\n let numParticles = this._particles.length;\r\n if (numParticles === 0) {\r\n this._numEmissions--;\r\n if (this._numEmissions < 0)\r\n this.dispose();\r\n else\r\n this._particles = this._emitter.emit();\r\n\r\n return;\r\n }\r\n\r\n const elapsedSeconds = deltaMillis / 1000;\r\n for (let i = 0; i < numParticles; i++) {\r\n const particle = this._particles[i];\r\n this.updateParticle(particle, elapsedSeconds);\r\n if (particle.isExpired) {\r\n this._particles[i] = this._particles[numParticles - 1];\r\n --i;\r\n --numParticles;\r\n }\r\n }\r\n\r\n this._particles.length = numParticles;\r\n }\r\n\r\n private updateParticle(particle: Particle, elapsedSeconds: number): void {\r\n const velocity = particle.velocity.clone(this._scratchVector3d);\r\n velocity.scale(elapsedSeconds, velocity);\r\n velocity.z += elapsedSeconds * this.gravity;\r\n particle.position.addInPlace(velocity);\r\n particle.transparency = 255 * (particle.age / particle.lifetime);\r\n\r\n particle.age += elapsedSeconds;\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (!context.viewport.view.isSpatialView())\r\n return;\r\n\r\n this.update();\r\n\r\n const builder = ParticleCollectionBuilder.create({\r\n viewport: context.viewport,\r\n texture: this._texture,\r\n size: (this._emitter.sizeRange.high - this._emitter.sizeRange.low) / 2,\r\n transparency: 0,\r\n origin: this._origin,\r\n pickableId: this._pickableId,\r\n });\r\n\r\n for (const particle of this._particles)\r\n builder.addParticle(particle);\r\n\r\n const graphic = builder.finish();\r\n if (graphic) {\r\n context.addDecoration(GraphicType.WorldDecoration, graphic);\r\n context.viewport.onRender.addOnce((vp) => vp.invalidateDecorations());\r\n }\r\n }\r\n\r\n public testDecorationHit(id: Id64String): boolean {\r\n return id === this._pickableId;\r\n }\r\n\r\n public async getDecorationToolTip(_hit: HitDetail): Promise<HTMLElement | string> {\r\n return \"Explosion effect\";\r\n }\r\n\r\n public static async addDecorator(iModel: IModelConnection): Promise<void> {\r\n // Note: The decorator takes ownership of the texture, and disposes of it when the decorator is disposed.\r\n const image = await imageElementFromUrl(`${IModelApp.publicPath}sprites/particle_explosion.png`);\r\n const texture = IModelApp.renderSystem.createTexture({\r\n ownership: \"external\",\r\n image: { source: image, transparency: TextureTransparency.Mixed },\r\n });\r\n if (texture)\r\n IModelApp.viewManager.addDecorator(new ParticleSystem(texture, iModel, randomIntegerInRange(this.numEmissionsRange)));\r\n }\r\n}\r\n\r\n/** This tool applies an explosion particle effect used for testing [ParticleCollectionBuilder]($frontend).\r\n * @beta\r\n */\r\nexport class ExplosionEffect extends Tool {\r\n public static override toolId = \"ExplosionEffect\";\r\n\r\n /** This method runs the tool, applying an explosion particle effect. */\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp)\r\n await ParticleSystem.addDecorator(vp.iModel);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Explosion.js","sourceRoot":"","sources":["../../../src/effects/Explosion.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 { Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { RenderTexture, TextureTransparency } from \"@itwin/core-common\";\r\nimport {\r\n DecorateContext, GraphicType, HitDetail, imageElementFromUrl, IModelApp, IModelConnection, ParticleCollectionBuilder, ParticleProps, Tool,\r\n} from \"@itwin/core-frontend\";\r\nimport { randomFloat, randomFloatInRange, randomIntegerInRange, randomPositionInRange } from \"./Random\";\r\n\r\n/** Represents one particle in the system. */\r\nclass Particle implements ParticleProps {\r\n /** Current position in the particle system's local coordinate space. */\r\n public readonly position: Point3d;\r\n /** Current velocity in meters per second. */\r\n public readonly velocity: Vector3d;\r\n /** Current age in seconds, incremented each frame. */\r\n public age = 0;\r\n /** Maximum age in seconds. When `this.age` exceeds `this.lifetime`, the particle expires. */\r\n public readonly lifetime: number;\r\n /** Particle size in meters. */\r\n public size: number;\r\n /** Particle transparency in [0..255]. */\r\n public transparency = 0;\r\n\r\n public get x() { return this.position.x; }\r\n public get y() { return this.position.y; }\r\n public get z() { return this.position.z; }\r\n\r\n public constructor(position: Point3d, velocity: Vector3d, lifetime: number, size: number) {\r\n this.position = position;\r\n this.velocity = velocity;\r\n this.lifetime = lifetime;\r\n this.size = size;\r\n }\r\n\r\n public get isExpired() { return this.age >= this.lifetime; }\r\n}\r\n\r\n/** Emits particles in a sphere with its center at the origin.\r\n * Each particle is emitted from the center of the sphere with random velocity toward the surface of the sphere.\r\n */\r\nclass ParticleEmitter {\r\n /** Range from which each particle's initial speed in meters per second will be selected. */\r\n public readonly speedRange = Range1d.createXX(1, 2);\r\n /** Range from which each particle's lifetime in seconds will be selected. */\r\n public readonly lifetimeRange = Range1d.createXX(5, 10);\r\n /** Range from which each particle's size in meters will be selected. */\r\n public readonly sizeRange = Range1d.createXX(0.2, 1.0);\r\n /** Range from which the number of particles emitted will be selected. */\r\n public numParticlesRange = Range1d.createXX(1600, 2200);\r\n\r\n /** Emit an explosion of particles from the center of the sphere. */\r\n public emit(): Particle[] {\r\n const particles = [];\r\n const numParticles = randomIntegerInRange(this.numParticlesRange);\r\n for (let i = 0; i < numParticles; i++) {\r\n const velocity = new Vector3d(randomFloat(-1.0, 1.0), randomFloat(-1.0, 1.0), randomFloat(-1.0, 1.0));\r\n velocity.normalizeInPlace();\r\n velocity.scaleInPlace(randomFloatInRange(this.speedRange));\r\n\r\n const lifetime = randomFloatInRange(this.lifetimeRange);\r\n const size = randomFloatInRange(this.sizeRange);\r\n particles.push(new Particle(new Point3d(0, 0, 0), velocity, lifetime, size));\r\n }\r\n\r\n return particles;\r\n }\r\n}\r\n\r\nclass ParticleSystem {\r\n private readonly _origin: Point3d;\r\n private readonly _pickableId: Id64String;\r\n private readonly _emitter = new ParticleEmitter();\r\n private _numEmissions: number;\r\n private readonly _texture: RenderTexture;\r\n private _lastUpdateTime: number;\r\n private _particles: Particle[] = [];\r\n private readonly _scratchVector3d = new Vector3d();\r\n private _dispose?: VoidFunction;\r\n /** Acceleration in Z applied to particles, in meters per second squared. */\r\n public gravity = -3;\r\n\r\n public static numEmissionsRange = Range1d.createXX(1, 5);\r\n\r\n public constructor(texture: RenderTexture, iModel: IModelConnection, numEmissions: number) {\r\n this._texture = texture;\r\n this._pickableId = iModel.transientIds.getNext();\r\n this._numEmissions = numEmissions;\r\n this._lastUpdateTime = Date.now();\r\n\r\n this._origin = randomPositionInRange(iModel.projectExtents);\r\n\r\n this._dispose = iModel.onClose.addListener(() => this.dispose());\r\n }\r\n\r\n public dispose(): void {\r\n if (this._dispose) {\r\n this._dispose();\r\n this._dispose = undefined;\r\n }\r\n\r\n IModelApp.viewManager.dropDecorator(this);\r\n this._texture.dispose();\r\n }\r\n\r\n public update(): void {\r\n const now = Date.now();\r\n let deltaMillis = now - this._lastUpdateTime;\r\n deltaMillis = Math.min(100, deltaMillis);\r\n this._lastUpdateTime = now;\r\n\r\n let numParticles = this._particles.length;\r\n if (numParticles === 0) {\r\n this._numEmissions--;\r\n if (this._numEmissions < 0)\r\n this.dispose();\r\n else\r\n this._particles = this._emitter.emit();\r\n\r\n return;\r\n }\r\n\r\n const elapsedSeconds = deltaMillis / 1000;\r\n for (let i = 0; i < numParticles; i++) {\r\n const particle = this._particles[i];\r\n this.updateParticle(particle, elapsedSeconds);\r\n if (particle.isExpired) {\r\n this._particles[i] = this._particles[numParticles - 1];\r\n --i;\r\n --numParticles;\r\n }\r\n }\r\n\r\n this._particles.length = numParticles;\r\n }\r\n\r\n private updateParticle(particle: Particle, elapsedSeconds: number): void {\r\n const velocity = particle.velocity.clone(this._scratchVector3d);\r\n velocity.scale(elapsedSeconds, velocity);\r\n velocity.z += elapsedSeconds * this.gravity;\r\n particle.position.addInPlace(velocity);\r\n particle.transparency = 255 * (particle.age / particle.lifetime);\r\n\r\n particle.age += elapsedSeconds;\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (!context.viewport.view.isSpatialView())\r\n return;\r\n\r\n this.update();\r\n\r\n const builder = ParticleCollectionBuilder.create({\r\n viewport: context.viewport,\r\n texture: this._texture,\r\n size: (this._emitter.sizeRange.high - this._emitter.sizeRange.low) / 2,\r\n transparency: 0,\r\n origin: this._origin,\r\n pickableId: this._pickableId,\r\n });\r\n\r\n for (const particle of this._particles)\r\n builder.addParticle(particle);\r\n\r\n const graphic = builder.finish();\r\n if (graphic) {\r\n context.addDecoration(GraphicType.WorldDecoration, graphic);\r\n context.viewport.onRender.addOnce((vp) => vp.invalidateDecorations());\r\n }\r\n }\r\n\r\n public testDecorationHit(id: Id64String): boolean {\r\n return id === this._pickableId;\r\n }\r\n\r\n public async getDecorationToolTip(_hit: HitDetail): Promise<HTMLElement | string> {\r\n return \"Explosion effect\";\r\n }\r\n\r\n public static async addDecorator(iModel: IModelConnection): Promise<void> {\r\n // Note: The decorator takes ownership of the texture, and disposes of it when the decorator is disposed.\r\n const image = await imageElementFromUrl(`${IModelApp.publicPath}sprites/particle_explosion.png`);\r\n const texture = IModelApp.renderSystem.createTexture({\r\n ownership: \"external\",\r\n image: { source: image, transparency: TextureTransparency.Mixed },\r\n });\r\n if (texture)\r\n IModelApp.viewManager.addDecorator(new ParticleSystem(texture, iModel, randomIntegerInRange(this.numEmissionsRange)));\r\n }\r\n}\r\n\r\n/** This tool applies an explosion particle effect used for testing [ParticleCollectionBuilder]($frontend).\r\n * @beta\r\n */\r\nexport class ExplosionEffect extends Tool {\r\n public static override toolId = \"ExplosionEffect\";\r\n\r\n /** This method runs the tool, applying an explosion particle effect. */\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (vp)\r\n await ParticleSystem.addDecorator(vp.iModel);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -75,8 +75,8 @@ class FlipImageEffect extends EffectTools_1.AddEffectTool {
75
75
  });
76
76
  }
77
77
  }
78
- FlipImageEffect.toolId = "FlipImageEffect";
79
78
  exports.FlipImageEffect = FlipImageEffect;
79
+ FlipImageEffect.toolId = "FlipImageEffect";
80
80
  /** Configure the [[FlipImageEffect]].
81
81
  * @beta
82
82
  */
@@ -95,6 +95,6 @@ class FlipImageConfig extends core_frontend_1.Tool {
95
95
  return this.run(args.getBoolean("h"), args.getBoolean("v"), args.getBoolean("c"));
96
96
  }
97
97
  }
98
- FlipImageConfig.toolId = "FlipImageConfig";
99
98
  exports.FlipImageConfig = FlipImageConfig;
99
+ FlipImageConfig.toolId = "FlipImageConfig";
100
100
  //# sourceMappingURL=FlipImage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlipImage.js","sourceRoot":"","sources":["../../../src/effects/FlipImage.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, Tool, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { parseArgs } from \"../tools/parseArgs\";\r\nimport { AddEffectTool, refreshViewportsForEffect } from \"./EffectTools\";\r\n\r\nlet flipHorizontal = false;\r\nlet flipVertical = false;\r\nlet flipColor = false;\r\n\r\n/** An extremely simple and mostly useless effect intended to demonstrate the basics of creating a screen-space effect.\r\n * It flips the Viewport's image on the x and/or y axis, and/or inverts the color of each pixel.\r\n * @beta\r\n */\r\nexport class FlipImageEffect extends AddEffectTool {\r\n public static override toolId = \"FlipImageEffect\";\r\n\r\n protected get effectName() { return \"flip\"; }\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n return {\r\n // Compute texture coordinate for use in fragment shader.\r\n vertex: `\r\n void effectMain(vec4 pos) {\r\n vec2 uv = textureCoordFromPosition(pos);\r\n if (u_flipHorizontal)\r\n uv.x = 1.0 - uv.x;\r\n\r\n if (u_flipVertical)\r\n uv.y = 1.0 - uv.y;\r\n\r\n v_uv = uv;\r\n }`,\r\n // Sample the original image to flip on x and/or y axis, then invert its color.\r\n fragment: `\r\n vec4 effectMain() {\r\n vec4 color = sampleSourcePixel();\r\n if (u_flipColor) {\r\n color.r = 1.0 - color.r;\r\n color.g = 1.0 - color.g;\r\n color.b = 1.0 - color.b;\r\n }\r\n\r\n return color;\r\n }`,\r\n // Because we're moving pixels around, we must tell the render system where the source pixel was originally located - otherwise\r\n // element locate will not work correctly.\r\n sampleSourcePixel: \"return TEXTURE(u_diffuse, v_uv);\",\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n // Don't bother applying the effect if nothing is to be flipped.\r\n builder.shouldApply = (_context) => flipHorizontal || flipVertical || flipColor;\r\n\r\n // Define the varying for the texture coordinate.\r\n builder.addVarying(\"v_uv\", VaryingType.Vec2);\r\n\r\n // Hook up the uniforms.\r\n builder.addUniform({\r\n name: \"u_flipHorizontal\",\r\n type: UniformType.Bool,\r\n bind: (uniform, _context) => uniform.setUniform1i(flipHorizontal ? 1 : 0),\r\n });\r\n builder.addUniform({\r\n name: \"u_flipVertical\",\r\n type: UniformType.Bool,\r\n bind: (uniform, _context) => uniform.setUniform1i(flipVertical ? 1 : 0),\r\n });\r\n builder.addUniform({\r\n name: \"u_flipColor\",\r\n type: UniformType.Bool,\r\n bind: (uniform, _context) => uniform.setUniform1i(flipColor ? 1 : 0),\r\n });\r\n }\r\n}\r\n\r\n/** Configure the [[FlipImageEffect]].\r\n * @beta\r\n */\r\nexport class FlipImageConfig extends Tool {\r\n public static override toolId = \"FlipImageConfig\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n public override async run(horizontal?: boolean, vertical?: boolean, color?: boolean): Promise<boolean> {\r\n flipHorizontal = !!horizontal;\r\n flipVertical = !!vertical;\r\n flipColor = !!color;\r\n\r\n refreshViewportsForEffect(\"fdt flip\");\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n return this.run(args.getBoolean(\"h\"), args.getBoolean(\"v\"), args.getBoolean(\"c\"));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FlipImage.js","sourceRoot":"","sources":["../../../src/effects/FlipImage.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, Tool, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { parseArgs } from \"../tools/parseArgs\";\r\nimport { AddEffectTool, refreshViewportsForEffect } from \"./EffectTools\";\r\n\r\nlet flipHorizontal = false;\r\nlet flipVertical = false;\r\nlet flipColor = false;\r\n\r\n/** An extremely simple and mostly useless effect intended to demonstrate the basics of creating a screen-space effect.\r\n * It flips the Viewport's image on the x and/or y axis, and/or inverts the color of each pixel.\r\n * @beta\r\n */\r\nexport class FlipImageEffect extends AddEffectTool {\r\n public static override toolId = \"FlipImageEffect\";\r\n\r\n protected get effectName() { return \"flip\"; }\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n return {\r\n // Compute texture coordinate for use in fragment shader.\r\n vertex: `\r\n void effectMain(vec4 pos) {\r\n vec2 uv = textureCoordFromPosition(pos);\r\n if (u_flipHorizontal)\r\n uv.x = 1.0 - uv.x;\r\n\r\n if (u_flipVertical)\r\n uv.y = 1.0 - uv.y;\r\n\r\n v_uv = uv;\r\n }`,\r\n // Sample the original image to flip on x and/or y axis, then invert its color.\r\n fragment: `\r\n vec4 effectMain() {\r\n vec4 color = sampleSourcePixel();\r\n if (u_flipColor) {\r\n color.r = 1.0 - color.r;\r\n color.g = 1.0 - color.g;\r\n color.b = 1.0 - color.b;\r\n }\r\n\r\n return color;\r\n }`,\r\n // Because we're moving pixels around, we must tell the render system where the source pixel was originally located - otherwise\r\n // element locate will not work correctly.\r\n sampleSourcePixel: \"return TEXTURE(u_diffuse, v_uv);\",\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n // Don't bother applying the effect if nothing is to be flipped.\r\n builder.shouldApply = (_context) => flipHorizontal || flipVertical || flipColor;\r\n\r\n // Define the varying for the texture coordinate.\r\n builder.addVarying(\"v_uv\", VaryingType.Vec2);\r\n\r\n // Hook up the uniforms.\r\n builder.addUniform({\r\n name: \"u_flipHorizontal\",\r\n type: UniformType.Bool,\r\n bind: (uniform, _context) => uniform.setUniform1i(flipHorizontal ? 1 : 0),\r\n });\r\n builder.addUniform({\r\n name: \"u_flipVertical\",\r\n type: UniformType.Bool,\r\n bind: (uniform, _context) => uniform.setUniform1i(flipVertical ? 1 : 0),\r\n });\r\n builder.addUniform({\r\n name: \"u_flipColor\",\r\n type: UniformType.Bool,\r\n bind: (uniform, _context) => uniform.setUniform1i(flipColor ? 1 : 0),\r\n });\r\n }\r\n}\r\n\r\n/** Configure the [[FlipImageEffect]].\r\n * @beta\r\n */\r\nexport class FlipImageConfig extends Tool {\r\n public static override toolId = \"FlipImageConfig\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 3; }\r\n\r\n public override async run(horizontal?: boolean, vertical?: boolean, color?: boolean): Promise<boolean> {\r\n flipHorizontal = !!horizontal;\r\n flipVertical = !!vertical;\r\n flipColor = !!color;\r\n\r\n refreshViewportsForEffect(\"fdt flip\");\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n return this.run(args.getBoolean(\"h\"), args.getBoolean(\"v\"), args.getBoolean(\"c\"));\r\n }\r\n}\r\n"]}
@@ -84,8 +84,8 @@ class LensDistortionEffect extends EffectTools_1.AddEffectTool {
84
84
  });
85
85
  }
86
86
  }
87
- LensDistortionEffect.toolId = "LensDistortionEffect";
88
87
  exports.LensDistortionEffect = LensDistortionEffect;
88
+ LensDistortionEffect.toolId = "LensDistortionEffect";
89
89
  /** Configures the [[LensDistortionEffect]].
90
90
  * @beta
91
91
  */
@@ -103,8 +103,8 @@ class LensDistortionConfig extends core_frontend_1.Tool {
103
103
  return this.run(args.getFloat("s"), args.getFloat("r"));
104
104
  }
105
105
  }
106
+ exports.LensDistortionConfig = LensDistortionConfig;
106
107
  LensDistortionConfig.toolId = "LensDistortionConfig";
107
108
  LensDistortionConfig.strength = 0.5;
108
109
  LensDistortionConfig.cylindricalRatio = 0.5;
109
- exports.LensDistortionConfig = LensDistortionConfig;
110
110
  //# sourceMappingURL=LensDistortion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LensDistortion.js","sourceRoot":"","sources":["../../../src/effects/LensDistortion.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 { assert } from \"@itwin/core-bentley\";\r\nimport { ScreenSpaceEffectBuilder, Tool, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { AddEffectTool, refreshViewportsForEffect } from \"./EffectTools\";\r\nimport { parseArgs } from \"../tools/parseArgs\";\r\n\r\n/** Adds a screen-space effect to the selected [[Viewport]] to simulate the lens distortion produced by real-world cameras with very wide fields of view.\r\n * Based on https://www.decarpentier.nl/lens-distortion\r\n * The effect is improved considerably by enabling anti-aliasing (e.g., via [RenderSystem.Options.antialiasSamples]($frontend) at startup, or using the `fdt aasamples` key-in`).\r\n * @note Because this effect applies a non-linear transform to each pixel, operations like snapping to geometry will not work properly. Element locate will work however - @see [ScreenSpaceEffectSource.sampleSourcePixel]($frontend).\r\n * @beta\r\n */\r\nexport class LensDistortionEffect extends AddEffectTool {\r\n public static override toolId = \"LensDistortionEffect\";\r\n\r\n protected get effectName() { return \"lensdistortion\"; }\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n return {\r\n vertex: `\r\n void effectMain(vec4 position) {\r\n vec2 uv = textureCoordFromPosition(position);\r\n float scaledHeight = strength * height;\r\n float cylAspectRatio = aspectRatio * cylindricalRatio;\r\n float aspectDiagSq = aspectRatio * aspectRatio + 1.0;\r\n float diagSq = scaledHeight * scaledHeight * aspectDiagSq;\r\n vec2 signedUV = (2.0 * uv + vec2(-1.0, -1.0));\r\n\r\n float z = 0.5 * sqrt(diagSq + 1.0) + 0.5;\r\n float ny = (z - 1.0) / (cylAspectRatio * cylAspectRatio + 1.0);\r\n\r\n vUVDot = sqrt(ny) * vec2(cylAspectRatio, 1.0) * signedUV;\r\n vUV = vec3(0.5, 0.5, 1.0) * z + vec3(-0.5, -0.5, 0.0);\r\n vUV.xy += uv;\r\n }`,\r\n // We simply shift pixels - we don't alter their colors.\r\n fragment: `\r\n vec4 effectMain() {\r\n return sampleSourcePixel();\r\n }`,\r\n // Because we're moving pixels around, we must tell the render system where the source pixel was originally located - otherwise\r\n // element locate will not work correctly.\r\n sampleSourcePixel: `\r\n vec3 uv = dot(vUVDot, vUVDot) * vec3(-0.5, -0.5, -1.0) + vUV;\r\n return TEXTURE_PROJ(u_diffuse, uv);\r\n `,\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n // Lens distortion is only applicable to views with the camera enabled.\r\n builder.shouldApply = (context) => context.viewport.isCameraOn;\r\n\r\n builder.addVarying(\"vUV\", VaryingType.Vec3);\r\n builder.addVarying(\"vUVDot\", VaryingType.Vec2);\r\n\r\n builder.addUniform({\r\n name: \"strength\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(LensDistortionConfig.strength),\r\n });\r\n builder.addUniform({\r\n name: \"cylindricalRatio\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(LensDistortionConfig.cylindricalRatio),\r\n });\r\n builder.addUniform({\r\n name: \"aspectRatio\",\r\n type: UniformType.Float,\r\n bind: (uniform, context) => uniform.setUniform1f(context.viewport.viewRect.aspect),\r\n });\r\n builder.addUniform({\r\n name: \"height\",\r\n type: UniformType.Float,\r\n bind: (uniform, context) => {\r\n assert(context.viewport.view.is3d() && context.viewport.view.isCameraOn);\r\n const fov = context.viewport.view.camera.lens.radians;\r\n const height = Math.tan(fov / 2) / context.viewport.viewRect.aspect;\r\n uniform.setUniform1f(height);\r\n },\r\n });\r\n }\r\n}\r\n\r\n/** Configures the [[LensDistortionEffect]].\r\n * @beta\r\n */\r\nexport class LensDistortionConfig extends Tool {\r\n public static override toolId = \"LensDistortionConfig\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n public static strength = 0.5;\r\n public static cylindricalRatio = 0.5;\r\n\r\n public override async run(strength?: number, ratio?: number): Promise<boolean> {\r\n LensDistortionConfig.strength = strength ?? 0.5;\r\n LensDistortionConfig.cylindricalRatio = ratio ?? 0.5;\r\n refreshViewportsForEffect(\"fdt lensdistortion\");\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n return this.run(args.getFloat(\"s\"), args.getFloat(\"r\"));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LensDistortion.js","sourceRoot":"","sources":["../../../src/effects/LensDistortion.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 { assert } from \"@itwin/core-bentley\";\r\nimport { ScreenSpaceEffectBuilder, Tool, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { AddEffectTool, refreshViewportsForEffect } from \"./EffectTools\";\r\nimport { parseArgs } from \"../tools/parseArgs\";\r\n\r\n/** Adds a screen-space effect to the selected [[Viewport]] to simulate the lens distortion produced by real-world cameras with very wide fields of view.\r\n * Based on https://www.decarpentier.nl/lens-distortion\r\n * The effect is improved considerably by enabling anti-aliasing (e.g., via [RenderSystem.Options.antialiasSamples]($frontend) at startup, or using the `fdt aasamples` key-in`).\r\n * @note Because this effect applies a non-linear transform to each pixel, operations like snapping to geometry will not work properly. Element locate will work however - @see [ScreenSpaceEffectSource.sampleSourcePixel]($frontend).\r\n * @beta\r\n */\r\nexport class LensDistortionEffect extends AddEffectTool {\r\n public static override toolId = \"LensDistortionEffect\";\r\n\r\n protected get effectName() { return \"lensdistortion\"; }\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n return {\r\n vertex: `\r\n void effectMain(vec4 position) {\r\n vec2 uv = textureCoordFromPosition(position);\r\n float scaledHeight = strength * height;\r\n float cylAspectRatio = aspectRatio * cylindricalRatio;\r\n float aspectDiagSq = aspectRatio * aspectRatio + 1.0;\r\n float diagSq = scaledHeight * scaledHeight * aspectDiagSq;\r\n vec2 signedUV = (2.0 * uv + vec2(-1.0, -1.0));\r\n\r\n float z = 0.5 * sqrt(diagSq + 1.0) + 0.5;\r\n float ny = (z - 1.0) / (cylAspectRatio * cylAspectRatio + 1.0);\r\n\r\n vUVDot = sqrt(ny) * vec2(cylAspectRatio, 1.0) * signedUV;\r\n vUV = vec3(0.5, 0.5, 1.0) * z + vec3(-0.5, -0.5, 0.0);\r\n vUV.xy += uv;\r\n }`,\r\n // We simply shift pixels - we don't alter their colors.\r\n fragment: `\r\n vec4 effectMain() {\r\n return sampleSourcePixel();\r\n }`,\r\n // Because we're moving pixels around, we must tell the render system where the source pixel was originally located - otherwise\r\n // element locate will not work correctly.\r\n sampleSourcePixel: `\r\n vec3 uv = dot(vUVDot, vUVDot) * vec3(-0.5, -0.5, -1.0) + vUV;\r\n return TEXTURE_PROJ(u_diffuse, uv);\r\n `,\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n // Lens distortion is only applicable to views with the camera enabled.\r\n builder.shouldApply = (context) => context.viewport.isCameraOn;\r\n\r\n builder.addVarying(\"vUV\", VaryingType.Vec3);\r\n builder.addVarying(\"vUVDot\", VaryingType.Vec2);\r\n\r\n builder.addUniform({\r\n name: \"strength\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(LensDistortionConfig.strength),\r\n });\r\n builder.addUniform({\r\n name: \"cylindricalRatio\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(LensDistortionConfig.cylindricalRatio),\r\n });\r\n builder.addUniform({\r\n name: \"aspectRatio\",\r\n type: UniformType.Float,\r\n bind: (uniform, context) => uniform.setUniform1f(context.viewport.viewRect.aspect),\r\n });\r\n builder.addUniform({\r\n name: \"height\",\r\n type: UniformType.Float,\r\n bind: (uniform, context) => {\r\n assert(context.viewport.view.is3d() && context.viewport.view.isCameraOn);\r\n const fov = context.viewport.view.camera.lens.radians;\r\n const height = Math.tan(fov / 2) / context.viewport.viewRect.aspect;\r\n uniform.setUniform1f(height);\r\n },\r\n });\r\n }\r\n}\r\n\r\n/** Configures the [[LensDistortionEffect]].\r\n * @beta\r\n */\r\nexport class LensDistortionConfig extends Tool {\r\n public static override toolId = \"LensDistortionConfig\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n public static strength = 0.5;\r\n public static cylindricalRatio = 0.5;\r\n\r\n public override async run(strength?: number, ratio?: number): Promise<boolean> {\r\n LensDistortionConfig.strength = strength ?? 0.5;\r\n LensDistortionConfig.cylindricalRatio = ratio ?? 0.5;\r\n refreshViewportsForEffect(\"fdt lensdistortion\");\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n return this.run(args.getFloat(\"s\"), args.getFloat(\"r\"));\r\n }\r\n}\r\n"]}
@@ -61,8 +61,8 @@ class SaturationEffect extends EffectTools_1.AddEffectTool {
61
61
  });
62
62
  }
63
63
  }
64
- SaturationEffect.toolId = "SaturationEffect";
65
64
  exports.SaturationEffect = SaturationEffect;
65
+ SaturationEffect.toolId = "SaturationEffect";
66
66
  /** Configures the [[SaturationEffect]].
67
67
  * @beta
68
68
  */
@@ -79,8 +79,8 @@ class SaturationConfig extends core_frontend_1.Tool {
79
79
  return this.run(args.getFloat("s"));
80
80
  }
81
81
  }
82
+ exports.SaturationConfig = SaturationConfig;
82
83
  SaturationConfig.toolId = "SaturationConfig";
83
84
  /** Multiplier applied to the saturation of each color in the source image. */
84
85
  SaturationConfig.multiplier = 2.0;
85
- exports.SaturationConfig = SaturationConfig;
86
86
  //# sourceMappingURL=Saturation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Saturation.js","sourceRoot":"","sources":["../../../src/effects/Saturation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAgG;AAChG,kDAA+C;AAC/C,+CAAyE;AAEzE;;GAEG;AACH,MAAa,gBAAiB,SAAQ,2BAAa;IAGjD,IAAc,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC;IACnD,IAAc,wBAAwB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzD,IAAc,MAAM;QAClB,sIAAsI;QACtI,OAAO;YACL,qEAAqE;YACrE,MAAM,EAAE;;;UAGJ;YACJ,2FAA2F;YAC3F,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;UAuBN;SACL,CAAC;IACJ,CAAC;IAES,YAAY,CAAC,OAAiC;QACtD,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,2BAAW,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,UAAU,CAAC;YACjB,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,2BAAW,CAAC,KAAK;YACvB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC;SACrE,CAAC,CAAC;IACL,CAAC;;AAhDsB,uBAAM,GAAG,kBAAkB,CAAC;AADxC,4CAAgB;AAoD7B;;GAEG;AACH,MAAa,gBAAiB,SAAQ,oBAAI;IAEjC,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAKlC,KAAK,CAAC,GAAG,CAAC,UAAmB;QAC3C,gBAAgB,CAAC,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC;QAChD,IAAA,uCAAyB,EAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,KAAe;QAClD,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;;AAhBsB,uBAAM,GAAG,kBAAkB,CAAC;AAInD,8EAA8E;AAChE,2BAAU,GAAG,GAAG,CAAC;AANpB,4CAAgB","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, Tool, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { parseArgs } from \"../tools/parseArgs\";\r\nimport { AddEffectTool, refreshViewportsForEffect } from \"./EffectTools\";\r\n\r\n/** Adjusts the saturation of colors in a viewport.\r\n * @beta\r\n */\r\nexport class SaturationEffect extends AddEffectTool {\r\n public static override toolId = \"SaturationEffect\";\r\n\r\n protected get effectName() { return \"Saturation\"; }\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n // rgb <-> hsl conversion routines from https://gamedev.stackexchange.com/questions/59797/glsl-shader-change-hue-saturation-brightness\r\n return {\r\n // Vertex shader simply computes texture coordinate for source pixel.\r\n vertex: `\r\n void effectMain(vec4 pos) {\r\n v_texCoord = textureCoordFromPosition(pos);\r\n }`,\r\n // Fragment shader converts color to HSV, adjusts the saturation, and converts back to RGB.\r\n fragment: `\r\n vec3 rgb2hsv(vec3 c) {\r\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\r\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\r\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\r\n\r\n float d = q.x - min(q.w, q.y);\r\n float e = 1.0e-10;\r\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\r\n }\r\n\r\n vec3 hsv2rgb(vec3 c) {\r\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\r\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\r\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\r\n }\r\n\r\n vec4 effectMain() {\r\n vec4 color = TEXTURE(u_diffuse, v_texCoord);\r\n color.rgb = rgb2hsv(color.rgb);\r\n color.rgb.y = color.rgb.y * u_saturationMult;\r\n color.rgb = hsv2rgb(color.rgb);\r\n return color;\r\n }`,\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n builder.addVarying(\"v_texCoord\", VaryingType.Vec2);\r\n builder.addUniform({\r\n name: \"u_saturationMult\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(SaturationConfig.multiplier),\r\n });\r\n }\r\n}\r\n\r\n/** Configures the [[SaturationEffect]].\r\n * @beta\r\n */\r\nexport class SaturationConfig extends Tool {\r\n public static override toolId = \"SaturationConfig\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** Multiplier applied to the saturation of each color in the source image. */\r\n public static multiplier = 2.0;\r\n\r\n public override async run(multiplier?: number): Promise<boolean> {\r\n SaturationConfig.multiplier = multiplier ?? 2.0;\r\n refreshViewportsForEffect(\"fdt Saturation\");\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n return this.run(args.getFloat(\"s\"));\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"Saturation.js","sourceRoot":"","sources":["../../../src/effects/Saturation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAgG;AAChG,kDAA+C;AAC/C,+CAAyE;AAEzE;;GAEG;AACH,MAAa,gBAAiB,SAAQ,2BAAa;IAGjD,IAAc,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC,CAAC;IACnD,IAAc,wBAAwB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEzD,IAAc,MAAM;QAClB,sIAAsI;QACtI,OAAO;YACL,qEAAqE;YACrE,MAAM,EAAE;;;UAGJ;YACJ,2FAA2F;YAC3F,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;UAuBN;SACL,CAAC;IACJ,CAAC;IAES,YAAY,CAAC,OAAiC;QACtD,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,2BAAW,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,UAAU,CAAC;YACjB,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,2BAAW,CAAC,KAAK;YACvB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC;SACrE,CAAC,CAAC;IACL,CAAC;;AAjDH,4CAkDC;AAjDwB,uBAAM,GAAG,kBAAkB,CAAC;AAmDrD;;GAEG;AACH,MAAa,gBAAiB,SAAQ,oBAAI;IAEjC,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAKlC,KAAK,CAAC,GAAG,CAAC,UAAmB;QAC3C,gBAAgB,CAAC,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC;QAChD,IAAA,uCAAyB,EAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,GAAG,KAAe;QAClD,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;;AAjBH,4CAkBC;AAjBwB,uBAAM,GAAG,kBAAkB,CAAC;AAInD,8EAA8E;AAChE,2BAAU,GAAG,GAAG,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 Effects\r\n */\r\n\r\nimport { ScreenSpaceEffectBuilder, Tool, UniformType, VaryingType } from \"@itwin/core-frontend\";\r\nimport { parseArgs } from \"../tools/parseArgs\";\r\nimport { AddEffectTool, refreshViewportsForEffect } from \"./EffectTools\";\r\n\r\n/** Adjusts the saturation of colors in a viewport.\r\n * @beta\r\n */\r\nexport class SaturationEffect extends AddEffectTool {\r\n public static override toolId = \"SaturationEffect\";\r\n\r\n protected get effectName() { return \"Saturation\"; }\r\n protected get textureCoordFromPosition() { return true; }\r\n\r\n protected get source() {\r\n // rgb <-> hsl conversion routines from https://gamedev.stackexchange.com/questions/59797/glsl-shader-change-hue-saturation-brightness\r\n return {\r\n // Vertex shader simply computes texture coordinate for source pixel.\r\n vertex: `\r\n void effectMain(vec4 pos) {\r\n v_texCoord = textureCoordFromPosition(pos);\r\n }`,\r\n // Fragment shader converts color to HSV, adjusts the saturation, and converts back to RGB.\r\n fragment: `\r\n vec3 rgb2hsv(vec3 c) {\r\n vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\r\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\r\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\r\n\r\n float d = q.x - min(q.w, q.y);\r\n float e = 1.0e-10;\r\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\r\n }\r\n\r\n vec3 hsv2rgb(vec3 c) {\r\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\r\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\r\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\r\n }\r\n\r\n vec4 effectMain() {\r\n vec4 color = TEXTURE(u_diffuse, v_texCoord);\r\n color.rgb = rgb2hsv(color.rgb);\r\n color.rgb.y = color.rgb.y * u_saturationMult;\r\n color.rgb = hsv2rgb(color.rgb);\r\n return color;\r\n }`,\r\n };\r\n }\r\n\r\n protected defineEffect(builder: ScreenSpaceEffectBuilder): void {\r\n builder.addVarying(\"v_texCoord\", VaryingType.Vec2);\r\n builder.addUniform({\r\n name: \"u_saturationMult\",\r\n type: UniformType.Float,\r\n bind: (uniform) => uniform.setUniform1f(SaturationConfig.multiplier),\r\n });\r\n }\r\n}\r\n\r\n/** Configures the [[SaturationEffect]].\r\n * @beta\r\n */\r\nexport class SaturationConfig extends Tool {\r\n public static override toolId = \"SaturationConfig\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n /** Multiplier applied to the saturation of each color in the source image. */\r\n public static multiplier = 2.0;\r\n\r\n public override async run(multiplier?: number): Promise<boolean> {\r\n SaturationConfig.multiplier = multiplier ?? 2.0;\r\n refreshViewportsForEffect(\"fdt Saturation\");\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n return this.run(args.getFloat(\"s\"));\r\n }\r\n}\r\n\r\n"]}
@@ -163,8 +163,8 @@ class SnowDecorator {
163
163
  }
164
164
  }
165
165
  }
166
- SnowDecorator._decorators = new Map();
167
166
  exports.SnowDecorator = SnowDecorator;
167
+ SnowDecorator._decorators = new Map();
168
168
  /** Toggles a decorator that simulates snow using particle effects.
169
169
  * @see [[SnowDecorator]] for the implementation of the decorator.
170
170
  * @beta
@@ -183,6 +183,6 @@ class SnowEffect extends core_frontend_1.Tool {
183
183
  return true;
184
184
  }
185
185
  }
186
- SnowEffect.toolId = "SnowEffect";
187
186
  exports.SnowEffect = SnowEffect;
187
+ SnowEffect.toolId = "SnowEffect";
188
188
  //# sourceMappingURL=Snow.js.map