@itwin/frontend-devtools 5.0.0-dev.9 → 5.0.0-dev.92

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 (264) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/README.md +1 -1
  3. package/lib/cjs/ClipboardUtilities.js.map +1 -1
  4. package/lib/cjs/FrontEndDevTools.js +1 -1
  5. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  6. package/lib/cjs/effects/Convolution.js +23 -23
  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 +37 -25
  11. package/lib/cjs/effects/Explosion.js.map +1 -1
  12. package/lib/cjs/effects/FlipImage.js +22 -22
  13. package/lib/cjs/effects/FlipImage.js.map +1 -1
  14. package/lib/cjs/effects/LensDistortion.js +25 -25
  15. package/lib/cjs/effects/LensDistortion.js.map +1 -1
  16. package/lib/cjs/effects/Random.js.map +1 -1
  17. package/lib/cjs/effects/Saturation.js +30 -30
  18. package/lib/cjs/effects/Saturation.js.map +1 -1
  19. package/lib/cjs/effects/Snow.d.ts +1 -1
  20. package/lib/cjs/effects/Snow.d.ts.map +1 -1
  21. package/lib/cjs/effects/Snow.js +19 -8
  22. package/lib/cjs/effects/Snow.js.map +1 -1
  23. package/lib/cjs/effects/Vignette.js +41 -41
  24. package/lib/cjs/effects/Vignette.js.map +1 -1
  25. package/lib/cjs/frontend-devtools.js.map +1 -1
  26. package/lib/cjs/tools/AnimationIntervalTool.js +1 -1
  27. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  28. package/lib/cjs/tools/ChangeUnitsTool.js +1 -1
  29. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  30. package/lib/cjs/tools/ClipTools.js +6 -8
  31. package/lib/cjs/tools/ClipTools.js.map +1 -1
  32. package/lib/cjs/tools/DisplayStyleTools.js +21 -25
  33. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  34. package/lib/cjs/tools/EmphasizeElementsTool.js +7 -13
  35. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  36. package/lib/cjs/tools/FrustumDecoration.js +28 -9
  37. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  38. package/lib/cjs/tools/InspectElementTool.js +7 -6
  39. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  40. package/lib/cjs/tools/MapLayerTool.d.ts +1 -1
  41. package/lib/cjs/tools/MapLayerTool.d.ts.map +1 -1
  42. package/lib/cjs/tools/MapLayerTool.js +31 -25
  43. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  44. package/lib/cjs/tools/MeasureTileLoadTime.js +4 -1
  45. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  46. package/lib/cjs/tools/ModelAppearanceTools.js +9 -9
  47. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  48. package/lib/cjs/tools/PlanProjectionTools.js +8 -15
  49. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  50. package/lib/cjs/tools/PlanarMaskTools.js +21 -26
  51. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  52. package/lib/cjs/tools/ProjectExtents.js +6 -3
  53. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  54. package/lib/cjs/tools/RealityModelTools.js +10 -10
  55. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  56. package/lib/cjs/tools/RealityTransitionTool.js +1 -1
  57. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  58. package/lib/cjs/tools/RenderSystemTools.js +4 -3
  59. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  60. package/lib/cjs/tools/RenderTargetTools.d.ts +1 -1
  61. package/lib/cjs/tools/RenderTargetTools.d.ts.map +1 -1
  62. package/lib/cjs/tools/RenderTargetTools.js +15 -20
  63. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  64. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +1 -1
  65. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  66. package/lib/cjs/tools/SavedViews.js +4 -7
  67. package/lib/cjs/tools/SavedViews.js.map +1 -1
  68. package/lib/cjs/tools/ScheduleScriptTools.d.ts.map +1 -1
  69. package/lib/cjs/tools/ScheduleScriptTools.js +11 -12
  70. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  71. package/lib/cjs/tools/SelectionTools.js +4 -6
  72. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  73. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +1 -1
  74. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  75. package/lib/cjs/tools/SourceAspectIdTools.js +2 -2
  76. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  77. package/lib/cjs/tools/TileRequestDecoration.js +6 -3
  78. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  79. package/lib/cjs/tools/TileTreeBoundsDecoration.d.ts.map +1 -1
  80. package/lib/cjs/tools/TileTreeBoundsDecoration.js +8 -4
  81. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  82. package/lib/cjs/tools/ToolTipProvider.js +2 -1
  83. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  84. package/lib/cjs/tools/ViewportTools.js +22 -19
  85. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  86. package/lib/cjs/tools/parseArgs.js.map +1 -1
  87. package/lib/cjs/tools/parseBoolean.js.map +1 -1
  88. package/lib/cjs/tools/parseToggle.js.map +1 -1
  89. package/lib/cjs/ui/Button.js.map +1 -1
  90. package/lib/cjs/ui/CheckBox.js.map +1 -1
  91. package/lib/cjs/ui/ColorInput.js.map +1 -1
  92. package/lib/cjs/ui/ComboBox.js.map +1 -1
  93. package/lib/cjs/ui/DataList.js.map +1 -1
  94. package/lib/cjs/ui/NestedMenu.js.map +1 -1
  95. package/lib/cjs/ui/NumericInput.js.map +1 -1
  96. package/lib/cjs/ui/RadioBox.js.map +1 -1
  97. package/lib/cjs/ui/Slider.js.map +1 -1
  98. package/lib/cjs/ui/TextBox.js.map +1 -1
  99. package/lib/cjs/widgets/DiagnosticsPanel.d.ts +1 -1
  100. package/lib/cjs/widgets/DiagnosticsPanel.d.ts.map +1 -1
  101. package/lib/cjs/widgets/DiagnosticsPanel.js +11 -1
  102. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  103. package/lib/cjs/widgets/FpsTracker.d.ts +1 -1
  104. package/lib/cjs/widgets/FpsTracker.d.ts.map +1 -1
  105. package/lib/cjs/widgets/FpsTracker.js +5 -1
  106. package/lib/cjs/widgets/FpsTracker.js.map +1 -1
  107. package/lib/cjs/widgets/GpuProfiler.d.ts +1 -1
  108. package/lib/cjs/widgets/GpuProfiler.d.ts.map +1 -1
  109. package/lib/cjs/widgets/GpuProfiler.js +89 -82
  110. package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
  111. package/lib/cjs/widgets/KeyinField.js +8 -1
  112. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  113. package/lib/cjs/widgets/MemoryTracker.d.ts +1 -1
  114. package/lib/cjs/widgets/MemoryTracker.d.ts.map +1 -1
  115. package/lib/cjs/widgets/MemoryTracker.js +16 -4
  116. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  117. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +1 -1
  118. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts.map +1 -1
  119. package/lib/cjs/widgets/RenderCommandBreakdown.js +6 -2
  120. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  121. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts +1 -1
  122. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts.map +1 -1
  123. package/lib/cjs/widgets/TileMemoryBreakdown.js +10 -8
  124. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  125. package/lib/cjs/widgets/TileStatisticsTracker.d.ts +1 -1
  126. package/lib/cjs/widgets/TileStatisticsTracker.d.ts.map +1 -1
  127. package/lib/cjs/widgets/TileStatisticsTracker.js +5 -2
  128. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  129. package/lib/cjs/widgets/ToolSettingsTracker.d.ts +1 -1
  130. package/lib/cjs/widgets/ToolSettingsTracker.d.ts.map +1 -1
  131. package/lib/cjs/widgets/ToolSettingsTracker.js +2 -2
  132. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  133. package/lib/esm/ClipboardUtilities.js.map +1 -1
  134. package/lib/esm/FrontEndDevTools.js +1 -1
  135. package/lib/esm/FrontEndDevTools.js.map +1 -1
  136. package/lib/esm/effects/Convolution.js +23 -23
  137. package/lib/esm/effects/Convolution.js.map +1 -1
  138. package/lib/esm/effects/EffectTools.js +2 -2
  139. package/lib/esm/effects/EffectTools.js.map +1 -1
  140. package/lib/esm/effects/Explosion.js +37 -25
  141. package/lib/esm/effects/Explosion.js.map +1 -1
  142. package/lib/esm/effects/FlipImage.js +22 -22
  143. package/lib/esm/effects/FlipImage.js.map +1 -1
  144. package/lib/esm/effects/LensDistortion.js +25 -25
  145. package/lib/esm/effects/LensDistortion.js.map +1 -1
  146. package/lib/esm/effects/Random.js.map +1 -1
  147. package/lib/esm/effects/Saturation.js +30 -30
  148. package/lib/esm/effects/Saturation.js.map +1 -1
  149. package/lib/esm/effects/Snow.d.ts +1 -1
  150. package/lib/esm/effects/Snow.d.ts.map +1 -1
  151. package/lib/esm/effects/Snow.js +19 -8
  152. package/lib/esm/effects/Snow.js.map +1 -1
  153. package/lib/esm/effects/Vignette.js +41 -41
  154. package/lib/esm/effects/Vignette.js.map +1 -1
  155. package/lib/esm/frontend-devtools.js.map +1 -1
  156. package/lib/esm/tools/AnimationIntervalTool.js +1 -1
  157. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  158. package/lib/esm/tools/ChangeUnitsTool.js +1 -1
  159. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  160. package/lib/esm/tools/ClipTools.js +6 -8
  161. package/lib/esm/tools/ClipTools.js.map +1 -1
  162. package/lib/esm/tools/DisplayStyleTools.js +21 -25
  163. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  164. package/lib/esm/tools/EmphasizeElementsTool.js +7 -13
  165. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  166. package/lib/esm/tools/FrustumDecoration.js +28 -9
  167. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  168. package/lib/esm/tools/InspectElementTool.js +7 -6
  169. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  170. package/lib/esm/tools/MapLayerTool.d.ts +1 -1
  171. package/lib/esm/tools/MapLayerTool.d.ts.map +1 -1
  172. package/lib/esm/tools/MapLayerTool.js +32 -26
  173. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  174. package/lib/esm/tools/MeasureTileLoadTime.js +4 -1
  175. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  176. package/lib/esm/tools/ModelAppearanceTools.js +9 -9
  177. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  178. package/lib/esm/tools/PlanProjectionTools.js +8 -15
  179. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  180. package/lib/esm/tools/PlanarMaskTools.js +21 -26
  181. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  182. package/lib/esm/tools/ProjectExtents.js +6 -3
  183. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  184. package/lib/esm/tools/RealityModelTools.js +10 -10
  185. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  186. package/lib/esm/tools/RealityTransitionTool.js +1 -1
  187. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  188. package/lib/esm/tools/RenderSystemTools.js +4 -3
  189. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  190. package/lib/esm/tools/RenderTargetTools.d.ts +1 -1
  191. package/lib/esm/tools/RenderTargetTools.d.ts.map +1 -1
  192. package/lib/esm/tools/RenderTargetTools.js +15 -20
  193. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  194. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +1 -1
  195. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  196. package/lib/esm/tools/SavedViews.js +4 -7
  197. package/lib/esm/tools/SavedViews.js.map +1 -1
  198. package/lib/esm/tools/ScheduleScriptTools.d.ts.map +1 -1
  199. package/lib/esm/tools/ScheduleScriptTools.js +11 -12
  200. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  201. package/lib/esm/tools/SelectionTools.js +4 -6
  202. package/lib/esm/tools/SelectionTools.js.map +1 -1
  203. package/lib/esm/tools/SetGpuMemoryLimitTool.js +1 -1
  204. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  205. package/lib/esm/tools/SourceAspectIdTools.js +2 -2
  206. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  207. package/lib/esm/tools/TileRequestDecoration.js +6 -3
  208. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  209. package/lib/esm/tools/TileTreeBoundsDecoration.d.ts.map +1 -1
  210. package/lib/esm/tools/TileTreeBoundsDecoration.js +8 -4
  211. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  212. package/lib/esm/tools/ToolTipProvider.js +2 -1
  213. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  214. package/lib/esm/tools/ViewportTools.js +22 -19
  215. package/lib/esm/tools/ViewportTools.js.map +1 -1
  216. package/lib/esm/tools/parseArgs.js.map +1 -1
  217. package/lib/esm/tools/parseBoolean.js.map +1 -1
  218. package/lib/esm/tools/parseToggle.js.map +1 -1
  219. package/lib/esm/ui/Button.js.map +1 -1
  220. package/lib/esm/ui/CheckBox.js.map +1 -1
  221. package/lib/esm/ui/ColorInput.js.map +1 -1
  222. package/lib/esm/ui/ComboBox.js.map +1 -1
  223. package/lib/esm/ui/DataList.js.map +1 -1
  224. package/lib/esm/ui/NestedMenu.js.map +1 -1
  225. package/lib/esm/ui/NumericInput.js.map +1 -1
  226. package/lib/esm/ui/RadioBox.js.map +1 -1
  227. package/lib/esm/ui/Slider.js.map +1 -1
  228. package/lib/esm/ui/TextBox.js.map +1 -1
  229. package/lib/esm/widgets/DiagnosticsPanel.d.ts +1 -1
  230. package/lib/esm/widgets/DiagnosticsPanel.d.ts.map +1 -1
  231. package/lib/esm/widgets/DiagnosticsPanel.js +11 -1
  232. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  233. package/lib/esm/widgets/FpsTracker.d.ts +1 -1
  234. package/lib/esm/widgets/FpsTracker.d.ts.map +1 -1
  235. package/lib/esm/widgets/FpsTracker.js +5 -1
  236. package/lib/esm/widgets/FpsTracker.js.map +1 -1
  237. package/lib/esm/widgets/GpuProfiler.d.ts +1 -1
  238. package/lib/esm/widgets/GpuProfiler.d.ts.map +1 -1
  239. package/lib/esm/widgets/GpuProfiler.js +89 -82
  240. package/lib/esm/widgets/GpuProfiler.js.map +1 -1
  241. package/lib/esm/widgets/KeyinField.js +8 -1
  242. package/lib/esm/widgets/KeyinField.js.map +1 -1
  243. package/lib/esm/widgets/MemoryTracker.d.ts +1 -1
  244. package/lib/esm/widgets/MemoryTracker.d.ts.map +1 -1
  245. package/lib/esm/widgets/MemoryTracker.js +16 -4
  246. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  247. package/lib/esm/widgets/RenderCommandBreakdown.d.ts +1 -1
  248. package/lib/esm/widgets/RenderCommandBreakdown.d.ts.map +1 -1
  249. package/lib/esm/widgets/RenderCommandBreakdown.js +6 -2
  250. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  251. package/lib/esm/widgets/TileMemoryBreakdown.d.ts +1 -1
  252. package/lib/esm/widgets/TileMemoryBreakdown.d.ts.map +1 -1
  253. package/lib/esm/widgets/TileMemoryBreakdown.js +10 -8
  254. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  255. package/lib/esm/widgets/TileStatisticsTracker.d.ts +1 -1
  256. package/lib/esm/widgets/TileStatisticsTracker.d.ts.map +1 -1
  257. package/lib/esm/widgets/TileStatisticsTracker.js +5 -2
  258. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  259. package/lib/esm/widgets/ToolSettingsTracker.d.ts +1 -1
  260. package/lib/esm/widgets/ToolSettingsTracker.d.ts.map +1 -1
  261. package/lib/esm/widgets/ToolSettingsTracker.js +2 -2
  262. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  263. package/lib/public/locales/en/FrontendDevTools.json +494 -494
  264. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayStyleTools.js","sourceRoot":"","sources":["../../../src/tools/DisplayStyleTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport {\r\n ColorDef, DisplayStyle3dSettingsProps, DisplayStyleOverridesOptions, RenderMode, SkyCube, SkySphere,\r\n SubCategoryAppearance, SubCategoryOverride, ViewFlags, ViewFlagsProperties, WhiteOnWhiteReversalSettings,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n DisplayStyle3dState, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\r\nimport { parseArgs } from \"./parseArgs\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\ntype BooleanFlagName =\r\n \"dimensions\" | \"patterns\" | \"weights\" | \"styles\" | \"transparency\" | \"fill\" | \"textures\" | \"materials\" | \"acsTriad\" | \"grid\" | \"visibleEdges\" |\r\n \"hiddenEdges\" | \"lighting\" | \"shadows\" | \"clipVolume\" | \"constructions\" | \"monochrome\" | \"backgroundMap\" | \"ambientOcclusion\" | \"forceSurfaceDiscard\"\r\n | \"wiremesh\";\r\n\r\n// Compiler has the info to construct this array for us, but we have no access to it...\r\nconst booleanFlagNames: BooleanFlagName[] = [\r\n \"dimensions\", \"patterns\", \"weights\", \"styles\", \"transparency\", \"fill\", \"textures\", \"materials\", \"acsTriad\", \"grid\", \"visibleEdges\",\r\n \"hiddenEdges\", \"lighting\", \"shadows\", \"clipVolume\", \"constructions\", \"monochrome\", \"backgroundMap\", \"ambientOcclusion\", \"forceSurfaceDiscard\",\r\n \"wiremesh\",\r\n];\r\n\r\nconst lowercaseBooleanFlagNames = booleanFlagNames.map((name) => name.toLowerCase());\r\n\r\n/** Modifies the selected viewport's DisplayStyleState.\r\n * @beta\r\n */\r\nexport abstract class DisplayStyleTool extends Tool {\r\n protected get require3d() { return false; }\r\n // Return true if the display style was modified - we will invalidate the viewport's render plan.\r\n protected abstract execute(vp: Viewport): Promise<boolean>;\r\n // Return false if failed to parse.\r\n protected abstract parse(args: string[], vp: Viewport): Promise<boolean>;\r\n\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.execute(vp))\r\n vp.displayStyle = vp.view.displayStyle;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.parse(args, vp))\r\n return this.run();\r\n else\r\n return false;\r\n }\r\n}\r\n\r\n/** Modifies the selected viewport's ViewFlags.\r\n * The keyin syntax is as follows:\r\n * fdt change viewflags flag=value\r\n * Where 'flag' is one of the BooleanFlagName values, or \"renderMode\"; and value is an integer.\r\n * For boolean flags, value is 0 for false or 1 for true. For renderMode, value is one of the RenderMode enum values.\r\n * Flag names are case-insensitive.\r\n * @beta\r\n */\r\nexport class ChangeViewFlagsTool extends Tool {\r\n public static override toolId = \"ChangeViewFlags\";\r\n public static override get maxArgs() { return undefined; }\r\n public static override get minArgs() { return 1; }\r\n\r\n public override async run(vf: ViewFlags, vp?: Viewport): Promise<boolean> {\r\n if (undefined !== vf && undefined !== vp)\r\n vp.viewFlags = vf;\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp || 0 === args.length)\r\n return true;\r\n\r\n const vf: Partial<ViewFlagsProperties> = { ...vp.viewFlags };\r\n for (const arg of args) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n const value = parseInt(parts[1], 10);\r\n if (Number.isNaN(value))\r\n continue;\r\n\r\n const name = parts[0].toLowerCase();\r\n if (name === \"rendermode\") {\r\n switch (value) {\r\n case RenderMode.SmoothShade:\r\n case RenderMode.Wireframe:\r\n case RenderMode.HiddenLine:\r\n case RenderMode.SolidFill:\r\n vf.renderMode = value;\r\n vp.invalidateRenderPlan();\r\n break;\r\n }\r\n\r\n continue;\r\n }\r\n\r\n if (0 !== value && 1 !== value)\r\n continue;\r\n\r\n const index = lowercaseBooleanFlagNames.indexOf(name);\r\n if (-1 !== index) {\r\n const propName = booleanFlagNames[index];\r\n vf[propName] = 0 !== value;\r\n vp.invalidateRenderPlan();\r\n }\r\n }\r\n\r\n return this.run(new ViewFlags(vf), vp);\r\n }\r\n}\r\n\r\n/** Toggles the skybox.\r\n * @beta\r\n */\r\nexport class ToggleSkyboxTool extends DisplayStyleTool {\r\n public static override toolId = \"ToggleSkybox\";\r\n\r\n public override get require3d() { return true; }\r\n\r\n public async parse(_args: string[]): Promise<boolean> { return true; } // no arguments\r\n\r\n public async execute(vp: Viewport) {\r\n const style = vp.view.displayStyle as DisplayStyle3dState;\r\n style.environment = style.environment.withDisplay({ sky: !style.environment.displaySky });\r\n return true;\r\n }\r\n}\r\n\r\n/** Defines a [SkySphere]($common) to apply to the current view.\r\n * @beta\r\n */\r\nexport class SkySphereTool extends DisplayStyleTool {\r\n private _image?: string;\r\n\r\n public static override toolId = \"SetSkySphere\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override get require3d() { return true; }\r\n\r\n public async parse(args: string[]) {\r\n this._image = args[0];\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (this._image && vp.view.is3d()) {\r\n vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({\r\n displaySky: true,\r\n sky: new SkySphere(this._image),\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Defines a [SkyCube]($common) to apply to the current view.\r\n * @beta\r\n */\r\nexport class SkyCubeTool extends DisplayStyleTool {\r\n private _images: string[] = [];\r\n\r\n public static override toolId = \"SetSkyCube\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 6; }\r\n\r\n public override get require3d() { return true; }\r\n\r\n public async parse(args: string[]) {\r\n this._images = [...args];\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n const imgs = this._images;\r\n if (imgs.length === 0 || !vp.view.is3d())\r\n return true;\r\n\r\n let top, bottom, left, right, front, back;\r\n switch (imgs.length) {\r\n case 1:\r\n top = bottom = left = right = front = back = imgs[0];\r\n break;\r\n case 2:\r\n top = bottom = imgs[0];\r\n left = right = front = back = imgs[1];\r\n break;\r\n case 3:\r\n top = bottom = imgs[0];\r\n left = right = imgs[1];\r\n front = back = imgs[2];\r\n break;\r\n case 4:\r\n top = imgs[0];\r\n bottom = imgs[1];\r\n left = right = imgs[2];\r\n front = back = imgs[3];\r\n break;\r\n case 5:\r\n top = bottom = imgs[0];\r\n left = imgs[1];\r\n right = imgs[2];\r\n front = imgs[3];\r\n back = imgs[4];\r\n break;\r\n default:\r\n top = imgs[0];\r\n bottom = imgs[1];\r\n left = imgs[2];\r\n right = imgs[3];\r\n front = imgs[4];\r\n back = imgs[5];\r\n break;\r\n }\r\n\r\n vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({\r\n displaySky: true,\r\n sky: new SkyCube({ top, bottom, left, right, front, back }),\r\n });\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Outputs (and optionally copies to the clipboard) a \"rendering style\" as a partial DisplayStyle3dSettingsProps JSON object based\r\n * on the current view's display style settings.\r\n * All arguments are optional, of the form \"name=value\" where `value` is 0 for false or 1 for true. All arguments default to `false` if omitted.\r\n * @see [DisplayStyleSettings.toOverrides]($common) for details.\r\n * Arguments:\r\n * * `all`: include all settings.\r\n * * `imodel`: include iModel-specific settings.\r\n * * `project`: include iTwin-specific (formerly known as project) settings.\r\n * * `map`: include background map settings.\r\n * * `drawingaids`: include drawing aid decoration settings.\r\n * * `copy`: copy result to system clipboard.\r\n * * `quote`: format the JSON so it can be parsed directly by [ApplyRenderingStyleTool].\r\n * @beta\r\n */\r\nexport class SaveRenderingStyleTool extends DisplayStyleTool {\r\n private _options: DisplayStyleOverridesOptions = {};\r\n private _copyToClipboard = false;\r\n private _quote = false;\r\n\r\n public static override toolId = \"SaveRenderingStyle\";\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 7; }\r\n\r\n public async parse(inputArgs: string[]) {\r\n const args = parseArgs(inputArgs);\r\n function getArg(name: string): true | undefined {\r\n return args.getBoolean(name) ? true : undefined;\r\n }\r\n\r\n this._options.includeAll = getArg(\"a\");\r\n this._options.includeIModelSpecific = getArg(\"i\");\r\n this._options.includeITwinSpecific = getArg(\"p\"); // \"p\" for backwards compatibility with old \"project\" terminology\r\n this._options.includeBackgroundMap = getArg(\"m\");\r\n this._options.includeDrawingAids = getArg(\"d\");\r\n this._copyToClipboard = true === getArg(\"c\");\r\n this._quote = true === getArg(\"q\");\r\n\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n let json = JSON.stringify(vp.displayStyle.settings.toOverrides(this._options));\r\n if (this._quote)\r\n json = `\"${json.replace(/\"/g, '\"\"')}\"`;\r\n\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"Rendering style saved\", json));\r\n if (this._copyToClipboard)\r\n copyStringToClipboard(json);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Given a \"rendering style\" as a partial DisplayStyle3dSettingsProperties JSON string, apply it to the selected viewport's display style.\r\n * @see [DisplayStyleSettings.applyOverrides]($common) for details.\r\n * @beta\r\n */\r\nexport class ApplyRenderingStyleTool extends DisplayStyleTool {\r\n private _overrides?: DisplayStyle3dSettingsProps;\r\n\r\n public static override toolId = \"ApplyRenderingStyle\";\r\n\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n try {\r\n this._overrides = JSON.parse(args[0]);\r\n return true;\r\n } catch {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, \"Invalid JSON\"));\r\n return false;\r\n }\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (this._overrides)\r\n vp.overrideDisplayStyle(this._overrides);\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** Apply appearance overrides to one or more subcategories in the active viewport.\r\n * @beta\r\n */\r\nexport class OverrideSubCategoryTool extends DisplayStyleTool {\r\n private _overrideProps: SubCategoryAppearance.Props = {};\r\n private _subcategoryIds: string[] = [];\r\n\r\n public static override toolId = \"OverrideSubCategory\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 7; }\r\n\r\n public async parse(inArgs: string[]) {\r\n const args = parseArgs(inArgs);\r\n const ids = args.get(\"i\");\r\n if (ids)\r\n this._subcategoryIds = ids.split(\",\");\r\n\r\n const props = this._overrideProps;\r\n props.color = args.getInteger(\"c\");\r\n props.weight = args.getInteger(\"w\");\r\n props.priority = args.getInteger(\"p\");\r\n props.transp = args.getFloat(\"t\");\r\n props.material = args.get(\"m\");\r\n\r\n const visible = args.getBoolean(\"v\");\r\n props.invisible = typeof visible === \"boolean\" ? !visible : undefined;\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n const ovr = SubCategoryOverride.fromJSON(this._overrideProps);\r\n for (const id of this._subcategoryIds)\r\n vp.displayStyle.overrideSubCategory(id, ovr);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Set whether background color is ignored when applying white-on-white reversal.\r\n * @beta\r\n */\r\nexport class WoWIgnoreBackgroundTool extends DisplayStyleTool {\r\n private _ignore?: boolean;\r\n\r\n public static override toolId = \"WoWIgnoreBackground\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n const ignore = parseToggle(args[0]);\r\n if (typeof ignore === \"string\")\r\n return false;\r\n\r\n this._ignore = ignore;\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n const ignoreBackgroundColor = this._ignore ?? !vp.displayStyle.settings.whiteOnWhiteReversal.ignoreBackgroundColor;\r\n vp.displayStyle.settings.whiteOnWhiteReversal = WhiteOnWhiteReversalSettings.fromJSON({ ignoreBackgroundColor });\r\n return true;\r\n }\r\n}\r\n\r\n/** Toggle whether surfaces display with overlaid wiremesh in the active viewport.\r\n * @see [ViewFlags.wiremesh]($common).\r\n * @beta\r\n */\r\nexport class ToggleWiremeshTool extends DisplayStyleTool {\r\n private _enable?: boolean;\r\n\r\n public static override toolId = \"ToggleWiremesh\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable === \"string\")\r\n return false;\r\n\r\n this._enable = enable;\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n vp.viewFlags = vp.viewFlags.with(\"wiremesh\", this._enable ?? !vp.viewFlags.wiremesh);\r\n return true;\r\n }\r\n}\r\n\r\n/** Change the background color of the active viewport and optionally its transparency.\r\n * @beta\r\n */\r\nexport class ChangeBackgroundColorTool extends DisplayStyleTool {\r\n private _color?: ColorDef;\r\n\r\n public static override toolId = \"ChangeBackgroundColor\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public async parse(args: string[]) {\r\n this._color = ColorDef.fromString(args[0]);\r\n return true;\r\n }\r\n\r\n public async execute(vp: Viewport) {\r\n if (!this._color)\r\n return false;\r\n\r\n vp.displayStyle.backgroundColor = this._color;\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DisplayStyleTools.js","sourceRoot":"","sources":["../../../src/tools/DisplayStyleTools.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport {\n ColorDef, DisplayStyle3dSettingsProps, DisplayStyleOverridesOptions, RenderMode, SkyCube, SkySphere,\n SubCategoryAppearance, SubCategoryOverride, ViewFlags, ViewFlagsProperties, WhiteOnWhiteReversalSettings,\n} from \"@itwin/core-common\";\nimport {\n DisplayStyle3dState, IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport,\n} from \"@itwin/core-frontend\";\nimport { copyStringToClipboard } from \"../ClipboardUtilities\";\nimport { parseArgs } from \"./parseArgs\";\nimport { parseToggle } from \"./parseToggle\";\n\ntype BooleanFlagName =\n \"dimensions\" | \"patterns\" | \"weights\" | \"styles\" | \"transparency\" | \"fill\" | \"textures\" | \"materials\" | \"acsTriad\" | \"grid\" | \"visibleEdges\" |\n \"hiddenEdges\" | \"lighting\" | \"shadows\" | \"clipVolume\" | \"constructions\" | \"monochrome\" | \"backgroundMap\" | \"ambientOcclusion\" | \"forceSurfaceDiscard\"\n | \"wiremesh\";\n\n// Compiler has the info to construct this array for us, but we have no access to it...\nconst booleanFlagNames: BooleanFlagName[] = [\n \"dimensions\", \"patterns\", \"weights\", \"styles\", \"transparency\", \"fill\", \"textures\", \"materials\", \"acsTriad\", \"grid\", \"visibleEdges\",\n \"hiddenEdges\", \"lighting\", \"shadows\", \"clipVolume\", \"constructions\", \"monochrome\", \"backgroundMap\", \"ambientOcclusion\", \"forceSurfaceDiscard\",\n \"wiremesh\",\n];\n\nconst lowercaseBooleanFlagNames = booleanFlagNames.map((name) => name.toLowerCase());\n\n/** Modifies the selected viewport's DisplayStyleState.\n * @beta\n */\nexport abstract class DisplayStyleTool extends Tool {\n protected get require3d() { return false; }\n // Return true if the display style was modified - we will invalidate the viewport's render plan.\n protected abstract execute(vp: Viewport): Promise<boolean>;\n // Return false if failed to parse.\n protected abstract parse(args: string[], vp: Viewport): Promise<boolean>;\n\n public override async run(): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.execute(vp))\n vp.displayStyle = vp.view.displayStyle;\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp && (!this.require3d || vp.view.is3d()) && await this.parse(args, vp))\n return this.run();\n else\n return false;\n }\n}\n\n/** Modifies the selected viewport's ViewFlags.\n * The keyin syntax is as follows:\n * fdt change viewflags flag=value\n * Where 'flag' is one of the BooleanFlagName values, or \"renderMode\"; and value is an integer.\n * For boolean flags, value is 0 for false or 1 for true. For renderMode, value is one of the RenderMode enum values.\n * Flag names are case-insensitive.\n * @beta\n */\nexport class ChangeViewFlagsTool extends Tool {\n public static override toolId = \"ChangeViewFlags\";\n public static override get maxArgs() { return undefined; }\n public static override get minArgs() { return 1; }\n\n public override async run(vf: ViewFlags, vp?: Viewport): Promise<boolean> {\n if (undefined !== vf && undefined !== vp)\n vp.viewFlags = vf;\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp || 0 === args.length)\n return true;\n\n const vf: Partial<ViewFlagsProperties> = { ...vp.viewFlags };\n for (const arg of args) {\n const parts = arg.split(\"=\");\n if (2 !== parts.length)\n continue;\n\n const value = parseInt(parts[1], 10);\n if (Number.isNaN(value))\n continue;\n\n const name = parts[0].toLowerCase();\n if (name === \"rendermode\") {\n switch (value) {\n case RenderMode.SmoothShade:\n case RenderMode.Wireframe:\n case RenderMode.HiddenLine:\n case RenderMode.SolidFill:\n vf.renderMode = value;\n vp.invalidateRenderPlan();\n break;\n }\n\n continue;\n }\n\n if (0 !== value && 1 !== value)\n continue;\n\n const index = lowercaseBooleanFlagNames.indexOf(name);\n if (-1 !== index) {\n const propName = booleanFlagNames[index];\n vf[propName] = 0 !== value;\n vp.invalidateRenderPlan();\n }\n }\n\n return this.run(new ViewFlags(vf), vp);\n }\n}\n\n/** Toggles the skybox.\n * @beta\n */\nexport class ToggleSkyboxTool extends DisplayStyleTool {\n public static override toolId = \"ToggleSkybox\";\n\n public override get require3d() { return true; }\n\n public async parse(_args: string[]): Promise<boolean> { return true; } // no arguments\n\n public async execute(vp: Viewport) {\n const style = vp.view.displayStyle as DisplayStyle3dState;\n style.environment = style.environment.withDisplay({ sky: !style.environment.displaySky });\n return true;\n }\n}\n\n/** Defines a [SkySphere]($common) to apply to the current view.\n * @beta\n */\nexport class SkySphereTool extends DisplayStyleTool {\n private _image?: string;\n\n public static override toolId = \"SetSkySphere\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n public override get require3d() { return true; }\n\n public async parse(args: string[]) {\n this._image = args[0];\n return true;\n }\n\n public async execute(vp: Viewport) {\n if (this._image && vp.view.is3d()) {\n vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({\n displaySky: true,\n sky: new SkySphere(this._image),\n });\n }\n\n return true;\n }\n}\n\n/** Defines a [SkyCube]($common) to apply to the current view.\n * @beta\n */\nexport class SkyCubeTool extends DisplayStyleTool {\n private _images: string[] = [];\n\n public static override toolId = \"SetSkyCube\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 6; }\n\n public override get require3d() { return true; }\n\n public async parse(args: string[]) {\n this._images = [...args];\n return true;\n }\n\n public async execute(vp: Viewport) {\n const imgs = this._images;\n if (imgs.length === 0 || !vp.view.is3d())\n return true;\n\n let top, bottom, left, right, front, back;\n switch (imgs.length) {\n case 1:\n top = bottom = left = right = front = back = imgs[0];\n break;\n case 2:\n top = bottom = imgs[0];\n left = right = front = back = imgs[1];\n break;\n case 3:\n top = bottom = imgs[0];\n left = right = imgs[1];\n front = back = imgs[2];\n break;\n case 4:\n top = imgs[0];\n bottom = imgs[1];\n left = right = imgs[2];\n front = back = imgs[3];\n break;\n case 5:\n top = bottom = imgs[0];\n left = imgs[1];\n right = imgs[2];\n front = imgs[3];\n back = imgs[4];\n break;\n default:\n top = imgs[0];\n bottom = imgs[1];\n left = imgs[2];\n right = imgs[3];\n front = imgs[4];\n back = imgs[5];\n break;\n }\n\n vp.view.displayStyle.environment = vp.view.displayStyle.environment.clone({\n displaySky: true,\n sky: new SkyCube({ top, bottom, left, right, front, back }),\n });\n\n return true;\n }\n}\n\n/** Outputs (and optionally copies to the clipboard) a \"rendering style\" as a partial DisplayStyle3dSettingsProps JSON object based\n * on the current view's display style settings.\n * All arguments are optional, of the form \"name=value\" where `value` is 0 for false or 1 for true. All arguments default to `false` if omitted.\n * @see [DisplayStyleSettings.toOverrides]($common) for details.\n * Arguments:\n * * `all`: include all settings.\n * * `imodel`: include iModel-specific settings.\n * * `project`: include iTwin-specific (formerly known as project) settings.\n * * `map`: include background map settings.\n * * `drawingaids`: include drawing aid decoration settings.\n * * `copy`: copy result to system clipboard.\n * * `quote`: format the JSON so it can be parsed directly by [ApplyRenderingStyleTool].\n * @beta\n */\nexport class SaveRenderingStyleTool extends DisplayStyleTool {\n private _options: DisplayStyleOverridesOptions = {};\n private _copyToClipboard = false;\n private _quote = false;\n\n public static override toolId = \"SaveRenderingStyle\";\n\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 7; }\n\n public async parse(inputArgs: string[]) {\n const args = parseArgs(inputArgs);\n function getArg(name: string): true | undefined {\n return args.getBoolean(name) ? true : undefined;\n }\n\n this._options.includeAll = getArg(\"a\");\n this._options.includeIModelSpecific = getArg(\"i\");\n this._options.includeITwinSpecific = getArg(\"p\"); // \"p\" for backwards compatibility with old \"project\" terminology\n this._options.includeBackgroundMap = getArg(\"m\");\n this._options.includeDrawingAids = getArg(\"d\");\n this._copyToClipboard = true === getArg(\"c\");\n this._quote = true === getArg(\"q\");\n\n return true;\n }\n\n public async execute(vp: Viewport) {\n let json = JSON.stringify(vp.displayStyle.settings.toOverrides(this._options));\n if (this._quote)\n json = `\"${json.replace(/\"/g, '\"\"')}\"`;\n\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"Rendering style saved\", json));\n if (this._copyToClipboard)\n copyStringToClipboard(json);\n\n return false;\n }\n}\n\n/** Given a \"rendering style\" as a partial DisplayStyle3dSettingsProperties JSON string, apply it to the selected viewport's display style.\n * @see [DisplayStyleSettings.applyOverrides]($common) for details.\n * @beta\n */\nexport class ApplyRenderingStyleTool extends DisplayStyleTool {\n private _overrides?: DisplayStyle3dSettingsProps;\n\n public static override toolId = \"ApplyRenderingStyle\";\n\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n public async parse(args: string[]) {\n try {\n this._overrides = JSON.parse(args[0]);\n return true;\n } catch {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, \"Invalid JSON\"));\n return false;\n }\n }\n\n public async execute(vp: Viewport) {\n if (this._overrides)\n vp.overrideDisplayStyle(this._overrides);\n\n return false;\n }\n}\n\n/** Apply appearance overrides to one or more subcategories in the active viewport.\n * @beta\n */\nexport class OverrideSubCategoryTool extends DisplayStyleTool {\n private _overrideProps: SubCategoryAppearance.Props = {};\n private _subcategoryIds: string[] = [];\n\n public static override toolId = \"OverrideSubCategory\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 7; }\n\n public async parse(inArgs: string[]) {\n const args = parseArgs(inArgs);\n const ids = args.get(\"i\");\n if (ids)\n this._subcategoryIds = ids.split(\",\");\n\n const props = this._overrideProps;\n props.color = args.getInteger(\"c\");\n props.weight = args.getInteger(\"w\");\n props.priority = args.getInteger(\"p\");\n props.transp = args.getFloat(\"t\");\n props.material = args.get(\"m\");\n\n const visible = args.getBoolean(\"v\");\n props.invisible = typeof visible === \"boolean\" ? !visible : undefined;\n return true;\n }\n\n public async execute(vp: Viewport) {\n const ovr = SubCategoryOverride.fromJSON(this._overrideProps);\n for (const id of this._subcategoryIds)\n vp.displayStyle.overrideSubCategory(id, ovr);\n\n return true;\n }\n}\n\n/** Set whether background color is ignored when applying white-on-white reversal.\n * @beta\n */\nexport class WoWIgnoreBackgroundTool extends DisplayStyleTool {\n private _ignore?: boolean;\n\n public static override toolId = \"WoWIgnoreBackground\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public async parse(args: string[]) {\n const ignore = parseToggle(args[0]);\n if (typeof ignore === \"string\")\n return false;\n\n this._ignore = ignore;\n return true;\n }\n\n public async execute(vp: Viewport) {\n const ignoreBackgroundColor = this._ignore ?? !vp.displayStyle.settings.whiteOnWhiteReversal.ignoreBackgroundColor;\n vp.displayStyle.settings.whiteOnWhiteReversal = WhiteOnWhiteReversalSettings.fromJSON({ ignoreBackgroundColor });\n return true;\n }\n}\n\n/** Toggle whether surfaces display with overlaid wiremesh in the active viewport.\n * @see [ViewFlags.wiremesh]($common).\n * @beta\n */\nexport class ToggleWiremeshTool extends DisplayStyleTool {\n private _enable?: boolean;\n\n public static override toolId = \"ToggleWiremesh\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public async parse(args: string[]) {\n const enable = parseToggle(args[0]);\n if (typeof enable === \"string\")\n return false;\n\n this._enable = enable;\n return true;\n }\n\n public async execute(vp: Viewport) {\n vp.viewFlags = vp.viewFlags.with(\"wiremesh\", this._enable ?? !vp.viewFlags.wiremesh);\n return true;\n }\n}\n\n/** Change the background color of the active viewport and optionally its transparency.\n * @beta\n */\nexport class ChangeBackgroundColorTool extends DisplayStyleTool {\n private _color?: ColorDef;\n\n public static override toolId = \"ChangeBackgroundColor\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 1; }\n\n public async parse(args: string[]) {\n this._color = ColorDef.fromString(args[0]);\n return true;\n }\n\n public async execute(vp: Viewport) {\n if (!this._color)\n return false;\n\n vp.displayStyle.backgroundColor = this._color;\n return true;\n }\n}\n"]}
@@ -35,12 +35,10 @@ exports.EmphasizeElementsTool = EmphasizeElementsTool;
35
35
  * @beta
36
36
  */
37
37
  class EmphasizeSelectedElementsTool extends EmphasizeElementsTool {
38
- constructor() {
39
- super(...arguments);
40
- this._type = 0 /* OverrideType.None */;
41
- }
38
+ static toolId = "EmphasizeSelectedElements";
42
39
  static get minArgs() { return 0; }
43
40
  static get maxArgs() { return 1; }
41
+ _type = 0 /* OverrideType.None */;
44
42
  execute(emph, vp) {
45
43
  if (0 /* OverrideType.None */ === (this._type & 1 /* OverrideType.Color */) || emph.overrideSelectedElements(vp, core_common_1.ColorDef.white, undefined, true, false)) {
46
44
  emph.wantEmphasis = 0 /* OverrideType.None */ !== (this._type & 2 /* OverrideType.Emphasis */);
@@ -74,32 +72,32 @@ class EmphasizeSelectedElementsTool extends EmphasizeElementsTool {
74
72
  }
75
73
  }
76
74
  exports.EmphasizeSelectedElementsTool = EmphasizeSelectedElementsTool;
77
- EmphasizeSelectedElementsTool.toolId = "EmphasizeSelectedElements";
78
75
  /** Isolate all selected elements so that *only* those elements will be drawn.
79
76
  * @beta
80
77
  */
81
78
  class IsolateSelectedElementsTool extends EmphasizeElementsTool {
79
+ static toolId = "IsolateSelectedElements";
82
80
  execute(emph, vp) {
83
81
  emph.isolateSelectedElements(vp, true, true);
84
82
  }
85
83
  }
86
84
  exports.IsolateSelectedElementsTool = IsolateSelectedElementsTool;
87
- IsolateSelectedElementsTool.toolId = "IsolateSelectedElements";
88
85
  /** Clear the set of isolated elements.
89
86
  * @beta
90
87
  */
91
88
  class ClearIsolatedElementsTool extends EmphasizeElementsTool {
89
+ static toolId = "ClearIsolatedElements";
92
90
  get _wantCreate() { return false; }
93
91
  execute(emph, vp) {
94
92
  emph.clearIsolatedElements(vp);
95
93
  }
96
94
  }
97
95
  exports.ClearIsolatedElementsTool = ClearIsolatedElementsTool;
98
- ClearIsolatedElementsTool.toolId = "ClearIsolatedElements";
99
96
  /** Reset [EmphasizeElements]($frontend) for the active [Viewport]($frontend).
100
97
  * @beta
101
98
  */
102
99
  class ClearEmphasizedElementsTool extends EmphasizeElementsTool {
100
+ static toolId = "ClearEmphasizedElements";
103
101
  get _wantCreate() { return false; }
104
102
  get _wantClear() { return true; }
105
103
  execute(emph, vp) {
@@ -108,17 +106,14 @@ class ClearEmphasizedElementsTool extends EmphasizeElementsTool {
108
106
  }
109
107
  }
110
108
  exports.ClearEmphasizedElementsTool = ClearEmphasizedElementsTool;
111
- ClearEmphasizedElementsTool.toolId = "ClearEmphasizedElements";
112
109
  /** Emphasize the set of elements currently visible in the view based on [Viewport.queryVisibleFeatures]($frontend).
113
110
  * @beta
114
111
  */
115
112
  class EmphasizeVisibleElementsTool extends EmphasizeElementsTool {
116
- constructor() {
117
- super(...arguments);
118
- this._options = { source: "screen" };
119
- }
113
+ static toolId = "EmphasizeVisibleElements";
120
114
  static get minArgs() { return 1; }
121
115
  static get maxArgs() { return 2; }
116
+ _options = { source: "screen" };
122
117
  get _wantClear() { return true; }
123
118
  async parseAndRun(...input) {
124
119
  const args = (0, parseArgs_1.parseArgs)(input);
@@ -151,5 +146,4 @@ class EmphasizeVisibleElementsTool extends EmphasizeElementsTool {
151
146
  }
152
147
  }
153
148
  exports.EmphasizeVisibleElementsTool = EmphasizeVisibleElementsTool;
154
- EmphasizeVisibleElementsTool.toolId = "EmphasizeVisibleElements";
155
149
  //# sourceMappingURL=EmphasizeElementsTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmphasizeElementsTool.js","sourceRoot":"","sources":["../../../src/tools/EmphasizeElementsTool.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 Tools\r\n */\r\n\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { EmphasizeElements, IModelApp, QueryVisibleFeaturesOptions, ScreenViewport, Tool } from \"@itwin/core-frontend\";\r\nimport { parseArgs } from \"./parseArgs\";\r\n\r\n/** Applies the `EmphasizeElements` API in some way to the selected Viewport.\r\n * @beta\r\n */\r\nexport abstract class EmphasizeElementsTool extends Tool {\r\n protected get _wantCreate(): boolean { return true; }\r\n protected get _wantClear(): boolean { return false; }\r\n protected abstract execute(emph: EmphasizeElements, vp: ScreenViewport): void;\r\n\r\n public override async run(_args: any[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return true;\r\n\r\n if (this._wantClear)\r\n EmphasizeElements.clear(vp);\r\n\r\n const emph = this._wantCreate ? EmphasizeElements.getOrCreate(vp) : EmphasizeElements.get(vp);\r\n if (undefined !== emph)\r\n this.execute(emph, vp);\r\n\r\n return true;\r\n }\r\n}\r\n\r\nconst enum OverrideType { // eslint-disable-line no-restricted-syntax\r\n None = 0,\r\n Color = 1 << 0,\r\n Emphasis = 1 << 1,\r\n Both = Color | Emphasis,\r\n}\r\n\r\n/** If any elements are selected, emphasize them all by overriding their color to be orange; and de-emphasize all other elements by drawing them transparent grey.\r\n * @beta\r\n */\r\nexport class EmphasizeSelectedElementsTool extends EmphasizeElementsTool {\r\n public static override toolId = \"EmphasizeSelectedElements\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n private _type = OverrideType.None;\r\n\r\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\r\n if (OverrideType.None === (this._type & OverrideType.Color) || emph.overrideSelectedElements(vp, ColorDef.white, undefined, true, false)) {\r\n emph.wantEmphasis = OverrideType.None !== (this._type & OverrideType.Emphasis);\r\n if (emph.emphasizeSelectedElements(vp, undefined, true)) {\r\n vp.isFadeOutActive = true;\r\n return;\r\n }\r\n }\r\n\r\n // Empty selection set - clear any previous overrides.\r\n EmphasizeElements.clear(vp);\r\n emph.wantEmphasis = false;\r\n vp.isFadeOutActive = false;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n if (1 === args.length) {\r\n switch (args[0].toLowerCase()[0]) {\r\n case \"n\":\r\n break;\r\n case \"c\":\r\n this._type = OverrideType.Color;\r\n break;\r\n case \"e\":\r\n this._type = OverrideType.Emphasis;\r\n break;\r\n case \"b\":\r\n this._type = OverrideType.Both;\r\n break;\r\n }\r\n }\r\n\r\n return this.run(args);\r\n }\r\n}\r\n\r\n/** Isolate all selected elements so that *only* those elements will be drawn.\r\n * @beta\r\n */\r\nexport class IsolateSelectedElementsTool extends EmphasizeElementsTool {\r\n public static override toolId = \"IsolateSelectedElements\";\r\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\r\n emph.isolateSelectedElements(vp, true, true);\r\n }\r\n}\r\n\r\n/** Clear the set of isolated elements.\r\n * @beta\r\n */\r\nexport class ClearIsolatedElementsTool extends EmphasizeElementsTool {\r\n public static override toolId = \"ClearIsolatedElements\";\r\n protected override get _wantCreate() { return false; }\r\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\r\n emph.clearIsolatedElements(vp);\r\n }\r\n}\r\n\r\n/** Reset [EmphasizeElements]($frontend) for the active [Viewport]($frontend).\r\n * @beta\r\n */\r\nexport class ClearEmphasizedElementsTool extends EmphasizeElementsTool {\r\n public static override toolId = \"ClearEmphasizedElements\";\r\n protected override get _wantCreate() { return false; }\r\n protected override get _wantClear() { return true; }\r\n\r\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\r\n emph.clearEmphasizedElements(vp);\r\n vp.isFadeOutActive = false;\r\n }\r\n}\r\n\r\n/** Emphasize the set of elements currently visible in the view based on [Viewport.queryVisibleFeatures]($frontend).\r\n * @beta\r\n */\r\nexport class EmphasizeVisibleElementsTool extends EmphasizeElementsTool {\r\n public static override toolId = \"EmphasizeVisibleElements\";\r\n public static override get minArgs() { return 1; }\r\n public static override get maxArgs() { return 2; }\r\n private _options: QueryVisibleFeaturesOptions = { source: \"screen\" };\r\n protected override get _wantClear() { return true; }\r\n\r\n public override async parseAndRun(...input: string[]): Promise<boolean> {\r\n const args = parseArgs(input);\r\n const includeNonLocatable = args.getBoolean(\"n\");\r\n let source: \"screen\" | \"tiles\";\r\n switch (input[0].toLowerCase()) {\r\n case \"screen\":\r\n source = \"screen\";\r\n break;\r\n case \"tiles\":\r\n source = \"tiles\";\r\n break;\r\n default:\r\n return false;\r\n }\r\n\r\n this._options = { source, includeNonLocatable };\r\n return this.run(input);\r\n }\r\n\r\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\r\n const elementIds = new Set<string>();\r\n vp.queryVisibleFeatures(this._options, (features) => {\r\n for (const feature of features) {\r\n if (feature.iModel === vp.iModel && Id64.isValid(feature.elementId))\r\n elementIds.add(feature.elementId);\r\n }\r\n });\r\n\r\n emph.wantEmphasis = true;\r\n if (emph.emphasizeElements(elementIds, vp))\r\n vp.isFadeOutActive = true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EmphasizeElementsTool.js","sourceRoot":"","sources":["../../../src/tools/EmphasizeElementsTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { ColorDef } from \"@itwin/core-common\";\nimport { EmphasizeElements, IModelApp, QueryVisibleFeaturesOptions, ScreenViewport, Tool } from \"@itwin/core-frontend\";\nimport { parseArgs } from \"./parseArgs\";\n\n/** Applies the `EmphasizeElements` API in some way to the selected Viewport.\n * @beta\n */\nexport abstract class EmphasizeElementsTool extends Tool {\n protected get _wantCreate(): boolean { return true; }\n protected get _wantClear(): boolean { return false; }\n protected abstract execute(emph: EmphasizeElements, vp: ScreenViewport): void;\n\n public override async run(_args: any[]): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return true;\n\n if (this._wantClear)\n EmphasizeElements.clear(vp);\n\n const emph = this._wantCreate ? EmphasizeElements.getOrCreate(vp) : EmphasizeElements.get(vp);\n if (undefined !== emph)\n this.execute(emph, vp);\n\n return true;\n }\n}\n\nconst enum OverrideType { // eslint-disable-line no-restricted-syntax\n None = 0,\n Color = 1 << 0,\n Emphasis = 1 << 1,\n Both = Color | Emphasis,\n}\n\n/** If any elements are selected, emphasize them all by overriding their color to be orange; and de-emphasize all other elements by drawing them transparent grey.\n * @beta\n */\nexport class EmphasizeSelectedElementsTool extends EmphasizeElementsTool {\n public static override toolId = \"EmphasizeSelectedElements\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n private _type = OverrideType.None;\n\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\n if (OverrideType.None === (this._type & OverrideType.Color) || emph.overrideSelectedElements(vp, ColorDef.white, undefined, true, false)) {\n emph.wantEmphasis = OverrideType.None !== (this._type & OverrideType.Emphasis);\n if (emph.emphasizeSelectedElements(vp, undefined, true)) {\n vp.isFadeOutActive = true;\n return;\n }\n }\n\n // Empty selection set - clear any previous overrides.\n EmphasizeElements.clear(vp);\n emph.wantEmphasis = false;\n vp.isFadeOutActive = false;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n if (1 === args.length) {\n switch (args[0].toLowerCase()[0]) {\n case \"n\":\n break;\n case \"c\":\n this._type = OverrideType.Color;\n break;\n case \"e\":\n this._type = OverrideType.Emphasis;\n break;\n case \"b\":\n this._type = OverrideType.Both;\n break;\n }\n }\n\n return this.run(args);\n }\n}\n\n/** Isolate all selected elements so that *only* those elements will be drawn.\n * @beta\n */\nexport class IsolateSelectedElementsTool extends EmphasizeElementsTool {\n public static override toolId = \"IsolateSelectedElements\";\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\n emph.isolateSelectedElements(vp, true, true);\n }\n}\n\n/** Clear the set of isolated elements.\n * @beta\n */\nexport class ClearIsolatedElementsTool extends EmphasizeElementsTool {\n public static override toolId = \"ClearIsolatedElements\";\n protected override get _wantCreate() { return false; }\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\n emph.clearIsolatedElements(vp);\n }\n}\n\n/** Reset [EmphasizeElements]($frontend) for the active [Viewport]($frontend).\n * @beta\n */\nexport class ClearEmphasizedElementsTool extends EmphasizeElementsTool {\n public static override toolId = \"ClearEmphasizedElements\";\n protected override get _wantCreate() { return false; }\n protected override get _wantClear() { return true; }\n\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\n emph.clearEmphasizedElements(vp);\n vp.isFadeOutActive = false;\n }\n}\n\n/** Emphasize the set of elements currently visible in the view based on [Viewport.queryVisibleFeatures]($frontend).\n * @beta\n */\nexport class EmphasizeVisibleElementsTool extends EmphasizeElementsTool {\n public static override toolId = \"EmphasizeVisibleElements\";\n public static override get minArgs() { return 1; }\n public static override get maxArgs() { return 2; }\n private _options: QueryVisibleFeaturesOptions = { source: \"screen\" };\n protected override get _wantClear() { return true; }\n\n public override async parseAndRun(...input: string[]): Promise<boolean> {\n const args = parseArgs(input);\n const includeNonLocatable = args.getBoolean(\"n\");\n let source: \"screen\" | \"tiles\";\n switch (input[0].toLowerCase()) {\n case \"screen\":\n source = \"screen\";\n break;\n case \"tiles\":\n source = \"tiles\";\n break;\n default:\n return false;\n }\n\n this._options = { source, includeNonLocatable };\n return this.run(input);\n }\n\n public execute(emph: EmphasizeElements, vp: ScreenViewport): void {\n const elementIds = new Set<string>();\n vp.queryVisibleFeatures(this._options, (features) => {\n for (const feature of features) {\n if (feature.iModel === vp.iModel && Id64.isValid(feature.elementId))\n elementIds.add(feature.elementId);\n }\n });\n\n emph.wantEmphasis = true;\n if (emph.emphasizeElements(elementIds, vp))\n vp.isFadeOutActive = true;\n }\n}\n"]}
@@ -20,6 +20,15 @@ const parseToggle_1 = require("./parseToggle");
20
20
  * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.
21
21
  */
22
22
  class FrustumDecoration {
23
+ _options;
24
+ _worldFrustum;
25
+ _adjustedWorldFrustum;
26
+ _preloadFrustum;
27
+ _npcFrustum;
28
+ _worldToNpcMap;
29
+ _eyePoint;
30
+ _focalPlane;
31
+ _isCameraOn;
23
32
  constructor(vp, view, _options) {
24
33
  this._options = _options;
25
34
  this._worldFrustum = vp.getFrustum(core_frontend_1.CoordSystem.World, false);
@@ -128,15 +137,17 @@ class FrustumDecoration {
128
137
  * @beta
129
138
  */
130
139
  class FrustumDecorator {
140
+ _decoration;
131
141
  constructor(vp, options) {
132
- /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
133
- this.useCachedDecorations = true;
134
142
  this._decoration = FrustumDecoration.create(vp, options);
135
143
  }
144
+ /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
145
+ useCachedDecorations = true;
136
146
  decorate(context) {
137
147
  if (undefined !== this._decoration)
138
148
  this._decoration.decorate(context);
139
149
  }
150
+ static _instance;
140
151
  /** Add the decoration to the specified viewport. */
141
152
  static enable(vp, options) {
142
153
  FrustumDecorator.disable();
@@ -158,6 +169,7 @@ exports.FrustumDecorator = FrustumDecorator;
158
169
  * @beta
159
170
  */
160
171
  class ToggleFrustumSnapshotTool extends core_frontend_1.Tool {
172
+ static toolId = "ToggleFrustumSnapshot";
161
173
  static get minArgs() { return 0; }
162
174
  static get maxArgs() { return 2; }
163
175
  async run(enable, showPreloadFrustum, showBackgroundIntersections) {
@@ -193,16 +205,20 @@ class ToggleFrustumSnapshotTool extends core_frontend_1.Tool {
193
205
  }
194
206
  }
195
207
  exports.ToggleFrustumSnapshotTool = ToggleFrustumSnapshotTool;
196
- ToggleFrustumSnapshotTool.toolId = "ToggleFrustumSnapshot";
197
208
  /**
198
209
  * Decorates the viewport with a graphical depiction of a Frustum from the currently selected viewport.
199
210
  * Only useful when more than one spatial viewport is open.
200
211
  */
201
212
  class SelectedViewFrustumDecoration {
213
+ _options;
214
+ static _decorator;
215
+ _targetVp;
216
+ _removeDecorationListener;
217
+ _removeViewChangedListener;
218
+ /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
219
+ useCachedDecorations = true;
202
220
  constructor(vp, _options) {
203
221
  this._options = _options;
204
- /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
205
- this.useCachedDecorations = true;
206
222
  this._targetVp = vp;
207
223
  this._removeDecorationListener = core_frontend_1.IModelApp.viewManager.addDecorator(this);
208
224
  this._removeViewChangedListener = vp.onViewChanged.addListener(this.onViewChanged, this); // eslint-disable-line @typescript-eslint/unbound-method
@@ -270,6 +286,7 @@ class SelectedViewFrustumDecoration {
270
286
  * @beta
271
287
  */
272
288
  class ToggleSelectedViewFrustumTool extends core_frontend_1.Tool {
289
+ static toolId = "ToggleSelectedViewFrustum";
273
290
  static get minArgs() { return 0; }
274
291
  static get maxArgs() { return 1; }
275
292
  async run(enable) {
@@ -294,11 +311,13 @@ class ToggleSelectedViewFrustumTool extends core_frontend_1.Tool {
294
311
  }
295
312
  }
296
313
  exports.ToggleSelectedViewFrustumTool = ToggleSelectedViewFrustumTool;
297
- ToggleSelectedViewFrustumTool.toolId = "ToggleSelectedViewFrustum";
298
314
  class ShadowFrustumDecoration {
315
+ static _instance;
316
+ _targetVp;
317
+ _cleanup;
318
+ /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
319
+ useCachedDecorations = true;
299
320
  constructor(vp) {
300
- /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */
301
- this.useCachedDecorations = true;
302
321
  this._targetVp = vp;
303
322
  const removeDecorator = core_frontend_1.IModelApp.viewManager.addDecorator(this);
304
323
  const removeOnRender = vp.onRender.addListener((_) => this.onRender());
@@ -355,6 +374,7 @@ class ShadowFrustumDecoration {
355
374
  * @beta
356
375
  */
357
376
  class ToggleShadowFrustumTool extends core_frontend_1.Tool {
377
+ static toolId = "ToggleShadowFrustum";
358
378
  static get minArgs() { return 0; }
359
379
  static get maxArgs() { return 1; }
360
380
  async run(enable) {
@@ -371,5 +391,4 @@ class ToggleShadowFrustumTool extends core_frontend_1.Tool {
371
391
  }
372
392
  }
373
393
  exports.ToggleShadowFrustumTool = ToggleShadowFrustumTool;
374
- ToggleShadowFrustumTool.toolId = "ToggleShadowFrustum";
375
394
  //# sourceMappingURL=FrustumDecoration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FrustumDecoration.js","sourceRoot":"","sources":["../../../src/tools/FrustumDecoration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { Map4d, Point3d } from \"@itwin/core-geometry\";\r\nimport { ColorByName, ColorDef, Frustum, LinePixels, Npc } from \"@itwin/core-common\";\r\nimport {\r\n CoordSystem, DecorateContext, Decorator, GraphicBuilder, GraphicType, IModelApp, Tool, Viewport, ViewState, ViewState3d,\r\n} from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\ninterface FrustumDecorationOptions {\r\n showPreloadFrustum?: boolean;\r\n showBackgroundIntersections?: boolean;\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum.\r\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\r\n * Options for doing so include:\r\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\r\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\r\n */\r\nclass FrustumDecoration {\r\n private readonly _worldFrustum: Frustum;\r\n private readonly _adjustedWorldFrustum: Frustum;\r\n private readonly _preloadFrustum: Frustum;\r\n private readonly _npcFrustum: Frustum;\r\n private readonly _worldToNpcMap: Map4d;\r\n private readonly _eyePoint: Point3d;\r\n private readonly _focalPlane: number;\r\n private readonly _isCameraOn: boolean;\r\n\r\n private constructor(vp: Viewport, view: ViewState3d, private readonly _options?: FrustumDecorationOptions) {\r\n this._worldFrustum = vp.getFrustum(CoordSystem.World, false);\r\n this._adjustedWorldFrustum = vp.getFrustum(CoordSystem.World, true);\r\n this._preloadFrustum = vp.viewingSpace.getPreloadFrustum();\r\n this._npcFrustum = vp.getFrustum(CoordSystem.Npc, true);\r\n this._worldToNpcMap = vp.viewingSpace.worldToNpcMap.clone();\r\n this._eyePoint = view.camera.getEyePoint().clone();\r\n this._focalPlane = vp.worldToNpc(view.getTargetPoint()).z;\r\n this._isCameraOn = vp.isCameraOn;\r\n }\r\n\r\n public static create(vp: Viewport, options?: FrustumDecorationOptions): FrustumDecoration | undefined {\r\n const view = vp.view.isSpatialView() ? vp.view : undefined;\r\n return undefined !== view ? new FrustumDecoration(vp, view, options) : undefined;\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n\r\n if (this._isCameraOn)\r\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, this._npcFrustum, this._worldToNpcMap, this._eyePoint, this._focalPlane, context.viewport);\r\n\r\n FrustumDecoration.drawFrustumBox(builder, this._worldFrustum, false, context.viewport); // show original frustum...\r\n FrustumDecoration.drawFrustumBox(builder, this._adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\r\n const options = this._options;\r\n if (options !== undefined) {\r\n if (options.showPreloadFrustum)\r\n FrustumDecoration.drawPreloadFrustum(builder, this._preloadFrustum);\r\n\r\n if (options?.showBackgroundIntersections) {\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (backgroundMapGeometry)\r\n backgroundMapGeometry.addFrustumDecorations(builder, this._adjustedWorldFrustum);\r\n }\r\n }\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static drawPreloadFrustum(builder: GraphicBuilder, frustum: Frustum) {\r\n const preloadColor = ColorDef.create(ColorByName.coral);\r\n builder.setSymbology(preloadColor, preloadColor, 1, LinePixels.Code2);\r\n builder.addFrustum(frustum);\r\n }\r\n\r\n public static drawFrustumBox(builder: GraphicBuilder, frustum: Frustum, adjustedBox: boolean, vp: Viewport): void {\r\n const backPts = this.getPlanePts(frustum.points, false); // back plane\r\n const frontPts = this.getPlanePts(frustum.points, true); // front plane\r\n\r\n const bgColor = vp.view.backgroundColor;\r\n const backAndBottomColor = ColorDef.red.adjustedForContrast(bgColor);\r\n const frontAndTopLeftColor = ColorDef.blue.adjustedForContrast(bgColor);\r\n const frontAndTopRightColor = ColorDef.green.adjustedForContrast(bgColor);\r\n const edgeWeight = adjustedBox ? 2 : 1;\r\n const edgeStyle = adjustedBox ? LinePixels.Solid : LinePixels.Code2;\r\n\r\n // Back plane\r\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(backPts);\r\n\r\n // Front plane\r\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(frontPts);\r\n\r\n // Bottom edge\r\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 0));\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 1));\r\n\r\n // Top edge\r\n builder.setSymbology(frontAndTopRightColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 2));\r\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 3));\r\n }\r\n\r\n private static getEdgePts(startPts: Point3d[], endPts: Point3d[], index: number): Point3d[] {\r\n return [\r\n startPts[index],\r\n endPts[index],\r\n ];\r\n }\r\n\r\n private static getPlanePts(frustPts: Point3d[], front: boolean): Point3d[] {\r\n const baseIndex = front ? Npc._001 : Npc._000;\r\n const planePts = [\r\n frustPts[baseIndex + Npc._000],\r\n frustPts[baseIndex + Npc._100],\r\n frustPts[baseIndex + Npc._110],\r\n frustPts[baseIndex + Npc._010],\r\n ];\r\n\r\n planePts.push(planePts[0]);\r\n return planePts;\r\n }\r\n\r\n public static drawEyePositionAndFocalPlane(builder: GraphicBuilder, npcFrustum: Frustum, worldToNpcMap: Map4d, eyePoint: Point3d, focusPlaneNpc: number, vp: Viewport): void {\r\n // Eye position...\r\n const contrastColor = vp.getContrastToBackgroundColor();\r\n builder.setSymbology(contrastColor, ColorDef.black, 8);\r\n builder.addPointString([eyePoint]);\r\n\r\n // Focal plane...\r\n const focalPtsNpc = FrustumDecoration.getPlanePts(npcFrustum.points, false);\r\n const focalPtsWorld: Point3d[] = [];\r\n for (const npcPt of focalPtsNpc)\r\n focalPtsWorld.push(Point3d.create(npcPt.x, npcPt.y, focusPlaneNpc));\r\n worldToNpcMap.transform1.multiplyPoint3dArrayQuietNormalize(focalPtsWorld);\r\n\r\n const bgColor = vp.view.backgroundColor;\r\n const focalPlaneColor = ColorDef.green.adjustedForContrast(bgColor);\r\n const focalTransColor = focalPlaneColor.withTransparency(100);\r\n builder.setSymbology(focalPlaneColor, focalTransColor, 2);\r\n builder.addLineString(focalPtsWorld);\r\n builder.addShape(focalPtsWorld);\r\n }\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum.\r\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\r\n * Options for doing so include:\r\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\r\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\r\n * @beta\r\n */\r\nexport class FrustumDecorator implements Decorator {\r\n private readonly _decoration?: FrustumDecoration;\r\n\r\n private constructor(vp: Viewport, options?: FrustumDecorationOptions) {\r\n this._decoration = FrustumDecoration.create(vp, options);\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (undefined !== this._decoration)\r\n this._decoration.decorate(context);\r\n }\r\n\r\n private static _instance?: FrustumDecorator;\r\n\r\n /** Add the decoration to the specified viewport. */\r\n public static enable(vp: Viewport, options?: FrustumDecorationOptions): void {\r\n FrustumDecorator.disable();\r\n FrustumDecorator._instance = new FrustumDecorator(vp, options);\r\n IModelApp.viewManager.addDecorator(FrustumDecorator._instance);\r\n }\r\n\r\n /** Remove the decoration from the specified viewport. */\r\n public static disable(): void {\r\n const instance = FrustumDecorator._instance;\r\n if (undefined !== instance) {\r\n IModelApp.viewManager.dropDecorator(instance);\r\n FrustumDecorator._instance = undefined;\r\n }\r\n }\r\n\r\n public static get isEnabled() { return undefined !== FrustumDecorator._instance; }\r\n}\r\n\r\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the [[FrustumDecorator]].\r\n * @beta\r\n */\r\nexport class ToggleFrustumSnapshotTool extends Tool {\r\n public static override toolId = \"ToggleFrustumSnapshot\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n public override async run(enable?: boolean, showPreloadFrustum?: boolean, showBackgroundIntersections?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return true;\r\n\r\n if (undefined === enable)\r\n enable = !FrustumDecorator.isEnabled;\r\n\r\n if (enable !== FrustumDecorator.isEnabled) {\r\n if (enable) {\r\n FrustumDecorator.enable(vp, { showPreloadFrustum, showBackgroundIntersections });\r\n vp.onChangeView.addOnce(() => FrustumDecorator.disable());\r\n } else {\r\n FrustumDecorator.disable();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n let showPreload, showBackgroundIntersections, enable;\r\n for (const arg of args) {\r\n if (arg === \"preload\")\r\n showPreload = true;\r\n else if (arg === \"background\")\r\n showBackgroundIntersections = true;\r\n else\r\n enable = parseToggle(arg);\r\n }\r\n\r\n if (typeof enable !== \"string\")\r\n await this.run(enable, showPreload, showBackgroundIntersections);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum from the currently selected viewport.\r\n * Only useful when more than one spatial viewport is open.\r\n */\r\nclass SelectedViewFrustumDecoration {\r\n private static _decorator?: SelectedViewFrustumDecoration;\r\n protected _targetVp: Viewport;\r\n protected _removeDecorationListener?: () => void;\r\n protected _removeViewChangedListener?: () => void;\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public constructor(vp: Viewport, private _options?: FrustumDecorationOptions) {\r\n this._targetVp = vp;\r\n this._removeDecorationListener = IModelApp.viewManager.addDecorator(this);\r\n this._removeViewChangedListener = vp.onViewChanged.addListener(this.onViewChanged, this); // eslint-disable-line @typescript-eslint/unbound-method\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n protected stop(): void {\r\n if (this._removeDecorationListener) {\r\n this._removeDecorationListener();\r\n this._removeDecorationListener = undefined;\r\n }\r\n if (this._removeViewChangedListener) {\r\n this._removeViewChangedListener();\r\n this._removeViewChangedListener = undefined;\r\n }\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n public onViewChanged(targetVp: Viewport): void {\r\n if (targetVp !== this._targetVp)\r\n return;\r\n const decorator = SelectedViewFrustumDecoration._decorator;\r\n if (undefined !== decorator) {\r\n for (const vp of IModelApp.viewManager) {\r\n if (vp !== this._targetVp)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n }\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const vp = context.viewport;\r\n if (!this._targetVp.view.isSpatialView() || vp === this._targetVp || !vp.view.isSpatialView())\r\n return;\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n\r\n if (this._targetVp.isCameraOn) {\r\n const npcFrustum = this._targetVp.getFrustum(CoordSystem.Npc, true);\r\n const focalPlane = this._targetVp.worldToNpc(this._targetVp.view.getTargetPoint()).z;\r\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, npcFrustum, this._targetVp.viewingSpace.worldToNpcMap, this._targetVp.view.camera.getEyePoint(), focalPlane, context.viewport);\r\n }\r\n\r\n const worldFrustum = this._targetVp.getFrustum(CoordSystem.World, false);\r\n const adjustedWorldFrustum = this._targetVp.getFrustum(CoordSystem.World, true);\r\n\r\n FrustumDecoration.drawFrustumBox(builder, worldFrustum, false, context.viewport); // show original frustum...\r\n FrustumDecoration.drawFrustumBox(builder, adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\r\n if (this._options && this._options.showPreloadFrustum)\r\n FrustumDecoration.drawPreloadFrustum(builder, context.viewport.viewingSpace.getPreloadFrustum());\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n // Returns true if decoration becomes enabled.\r\n public static toggle(vp: Viewport, enabled?: boolean): boolean {\r\n if (undefined !== enabled) {\r\n const alreadyEnabled = undefined !== SelectedViewFrustumDecoration._decorator;\r\n if (enabled === alreadyEnabled)\r\n return alreadyEnabled;\r\n }\r\n\r\n if (undefined === SelectedViewFrustumDecoration._decorator) {\r\n SelectedViewFrustumDecoration._decorator = new SelectedViewFrustumDecoration(vp);\r\n return true;\r\n } else {\r\n SelectedViewFrustumDecoration._decorator.stop();\r\n SelectedViewFrustumDecoration._decorator = undefined;\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the selected view frustum decoration.\r\n * @beta\r\n */\r\nexport class ToggleSelectedViewFrustumTool extends Tool {\r\n public static override toolId = \"ToggleSelectedViewFrustum\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp || !vp.view.isSpatialView())\r\n return false;\r\n if (SelectedViewFrustumDecoration.toggle(vp, enable)) {\r\n const remove = vp.onChangeView.addListener((_vp: Viewport, prev: ViewState) => {\r\n if (!prev.hasSameCoordinates(vp.view)) {\r\n SelectedViewFrustumDecoration.toggle(vp, false);\r\n remove();\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n\r\nclass ShadowFrustumDecoration {\r\n private static _instance?: ShadowFrustumDecoration;\r\n private _targetVp: Viewport;\r\n private _cleanup?: () => void;\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public constructor(vp: Viewport) {\r\n this._targetVp = vp;\r\n const removeDecorator = IModelApp.viewManager.addDecorator(this);\r\n const removeOnRender = vp.onRender.addListener((_) => this.onRender());\r\n this._cleanup = () => {\r\n removeDecorator();\r\n removeOnRender();\r\n };\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n private stop(): void {\r\n if (undefined !== this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n public onRender(): void {\r\n const decorator = ShadowFrustumDecoration._instance;\r\n if (undefined !== decorator) {\r\n for (const vp of IModelApp.viewManager) {\r\n if (vp !== this._targetVp)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n }\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const frustum = this._targetVp.target.debugControl!.shadowFrustum;\r\n if (undefined === frustum)\r\n return;\r\n\r\n const thisVp = context.viewport;\r\n if (thisVp === this._targetVp || !thisVp.view.isSpatialView())\r\n return;\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n FrustumDecoration.drawFrustumBox(builder, frustum, false, thisVp);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(vp: Viewport, enabled?: boolean): void {\r\n const instance = ShadowFrustumDecoration._instance;\r\n if (undefined !== enabled) {\r\n const alreadyEnabled = undefined !== instance;\r\n if (enabled === alreadyEnabled)\r\n return;\r\n }\r\n\r\n if (undefined === instance) {\r\n ShadowFrustumDecoration._instance = new ShadowFrustumDecoration(vp);\r\n } else {\r\n instance.stop();\r\n ShadowFrustumDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Toggle visualization of the selected viewport's shadow frustum in all other viewports.\r\n * @beta\r\n */\r\nexport class ToggleShadowFrustumTool extends Tool {\r\n public static override toolId = \"ToggleShadowFrustum\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && vp.view.isSpatialView())\r\n ShadowFrustumDecoration.toggle(vp, enable);\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FrustumDecoration.js","sourceRoot":"","sources":["../../../src/tools/FrustumDecoration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { Map4d, Point3d } from \"@itwin/core-geometry\";\nimport { ColorByName, ColorDef, Frustum, LinePixels, Npc } from \"@itwin/core-common\";\nimport {\n CoordSystem, DecorateContext, Decorator, GraphicBuilder, GraphicType, IModelApp, Tool, Viewport, ViewState, ViewState3d,\n} from \"@itwin/core-frontend\";\nimport { parseToggle } from \"./parseToggle\";\n\ninterface FrustumDecorationOptions {\n showPreloadFrustum?: boolean;\n showBackgroundIntersections?: boolean;\n}\n\n/**\n * Decorates the viewport with a graphical depiction of a Frustum.\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\n * Options for doing so include:\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\n */\nclass FrustumDecoration {\n private readonly _worldFrustum: Frustum;\n private readonly _adjustedWorldFrustum: Frustum;\n private readonly _preloadFrustum: Frustum;\n private readonly _npcFrustum: Frustum;\n private readonly _worldToNpcMap: Map4d;\n private readonly _eyePoint: Point3d;\n private readonly _focalPlane: number;\n private readonly _isCameraOn: boolean;\n\n private constructor(vp: Viewport, view: ViewState3d, private readonly _options?: FrustumDecorationOptions) {\n this._worldFrustum = vp.getFrustum(CoordSystem.World, false);\n this._adjustedWorldFrustum = vp.getFrustum(CoordSystem.World, true);\n this._preloadFrustum = vp.viewingSpace.getPreloadFrustum();\n this._npcFrustum = vp.getFrustum(CoordSystem.Npc, true);\n this._worldToNpcMap = vp.viewingSpace.worldToNpcMap.clone();\n this._eyePoint = view.camera.getEyePoint().clone();\n this._focalPlane = vp.worldToNpc(view.getTargetPoint()).z;\n this._isCameraOn = vp.isCameraOn;\n }\n\n public static create(vp: Viewport, options?: FrustumDecorationOptions): FrustumDecoration | undefined {\n const view = vp.view.isSpatialView() ? vp.view : undefined;\n return undefined !== view ? new FrustumDecoration(vp, view, options) : undefined;\n }\n\n public decorate(context: DecorateContext): void {\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\n\n if (this._isCameraOn)\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, this._npcFrustum, this._worldToNpcMap, this._eyePoint, this._focalPlane, context.viewport);\n\n FrustumDecoration.drawFrustumBox(builder, this._worldFrustum, false, context.viewport); // show original frustum...\n FrustumDecoration.drawFrustumBox(builder, this._adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\n const options = this._options;\n if (options !== undefined) {\n if (options.showPreloadFrustum)\n FrustumDecoration.drawPreloadFrustum(builder, this._preloadFrustum);\n\n if (options?.showBackgroundIntersections) {\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\n if (backgroundMapGeometry)\n backgroundMapGeometry.addFrustumDecorations(builder, this._adjustedWorldFrustum);\n }\n }\n context.addDecorationFromBuilder(builder);\n }\n\n public static drawPreloadFrustum(builder: GraphicBuilder, frustum: Frustum) {\n const preloadColor = ColorDef.create(ColorByName.coral);\n builder.setSymbology(preloadColor, preloadColor, 1, LinePixels.Code2);\n builder.addFrustum(frustum);\n }\n\n public static drawFrustumBox(builder: GraphicBuilder, frustum: Frustum, adjustedBox: boolean, vp: Viewport): void {\n const backPts = this.getPlanePts(frustum.points, false); // back plane\n const frontPts = this.getPlanePts(frustum.points, true); // front plane\n\n const bgColor = vp.view.backgroundColor;\n const backAndBottomColor = ColorDef.red.adjustedForContrast(bgColor);\n const frontAndTopLeftColor = ColorDef.blue.adjustedForContrast(bgColor);\n const frontAndTopRightColor = ColorDef.green.adjustedForContrast(bgColor);\n const edgeWeight = adjustedBox ? 2 : 1;\n const edgeStyle = adjustedBox ? LinePixels.Solid : LinePixels.Code2;\n\n // Back plane\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\n builder.addLineString(backPts);\n\n // Front plane\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\n builder.addLineString(frontPts);\n\n // Bottom edge\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\n builder.addLineString(this.getEdgePts(backPts, frontPts, 0));\n builder.addLineString(this.getEdgePts(backPts, frontPts, 1));\n\n // Top edge\n builder.setSymbology(frontAndTopRightColor, ColorDef.black, edgeWeight, edgeStyle);\n builder.addLineString(this.getEdgePts(backPts, frontPts, 2));\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\n builder.addLineString(this.getEdgePts(backPts, frontPts, 3));\n }\n\n private static getEdgePts(startPts: Point3d[], endPts: Point3d[], index: number): Point3d[] {\n return [\n startPts[index],\n endPts[index],\n ];\n }\n\n private static getPlanePts(frustPts: Point3d[], front: boolean): Point3d[] {\n const baseIndex = front ? Npc._001 : Npc._000;\n const planePts = [\n frustPts[baseIndex + Npc._000],\n frustPts[baseIndex + Npc._100],\n frustPts[baseIndex + Npc._110],\n frustPts[baseIndex + Npc._010],\n ];\n\n planePts.push(planePts[0]);\n return planePts;\n }\n\n public static drawEyePositionAndFocalPlane(builder: GraphicBuilder, npcFrustum: Frustum, worldToNpcMap: Map4d, eyePoint: Point3d, focusPlaneNpc: number, vp: Viewport): void {\n // Eye position...\n const contrastColor = vp.getContrastToBackgroundColor();\n builder.setSymbology(contrastColor, ColorDef.black, 8);\n builder.addPointString([eyePoint]);\n\n // Focal plane...\n const focalPtsNpc = FrustumDecoration.getPlanePts(npcFrustum.points, false);\n const focalPtsWorld: Point3d[] = [];\n for (const npcPt of focalPtsNpc)\n focalPtsWorld.push(Point3d.create(npcPt.x, npcPt.y, focusPlaneNpc));\n worldToNpcMap.transform1.multiplyPoint3dArrayQuietNormalize(focalPtsWorld);\n\n const bgColor = vp.view.backgroundColor;\n const focalPlaneColor = ColorDef.green.adjustedForContrast(bgColor);\n const focalTransColor = focalPlaneColor.withTransparency(100);\n builder.setSymbology(focalPlaneColor, focalTransColor, 2);\n builder.addLineString(focalPtsWorld);\n builder.addShape(focalPtsWorld);\n }\n}\n\n/**\n * Decorates the viewport with a graphical depiction of a Frustum.\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\n * Options for doing so include:\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\n * @beta\n */\nexport class FrustumDecorator implements Decorator {\n private readonly _decoration?: FrustumDecoration;\n\n private constructor(vp: Viewport, options?: FrustumDecorationOptions) {\n this._decoration = FrustumDecoration.create(vp, options);\n }\n\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\n public readonly useCachedDecorations = true;\n\n public decorate(context: DecorateContext): void {\n if (undefined !== this._decoration)\n this._decoration.decorate(context);\n }\n\n private static _instance?: FrustumDecorator;\n\n /** Add the decoration to the specified viewport. */\n public static enable(vp: Viewport, options?: FrustumDecorationOptions): void {\n FrustumDecorator.disable();\n FrustumDecorator._instance = new FrustumDecorator(vp, options);\n IModelApp.viewManager.addDecorator(FrustumDecorator._instance);\n }\n\n /** Remove the decoration from the specified viewport. */\n public static disable(): void {\n const instance = FrustumDecorator._instance;\n if (undefined !== instance) {\n IModelApp.viewManager.dropDecorator(instance);\n FrustumDecorator._instance = undefined;\n }\n }\n\n public static get isEnabled() { return undefined !== FrustumDecorator._instance; }\n}\n\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the [[FrustumDecorator]].\n * @beta\n */\nexport class ToggleFrustumSnapshotTool extends Tool {\n public static override toolId = \"ToggleFrustumSnapshot\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 2; }\n\n public override async run(enable?: boolean, showPreloadFrustum?: boolean, showBackgroundIntersections?: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp)\n return true;\n\n if (undefined === enable)\n enable = !FrustumDecorator.isEnabled;\n\n if (enable !== FrustumDecorator.isEnabled) {\n if (enable) {\n FrustumDecorator.enable(vp, { showPreloadFrustum, showBackgroundIntersections });\n vp.onChangeView.addOnce(() => FrustumDecorator.disable());\n } else {\n FrustumDecorator.disable();\n }\n }\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n let showPreload, showBackgroundIntersections, enable;\n for (const arg of args) {\n if (arg === \"preload\")\n showPreload = true;\n else if (arg === \"background\")\n showBackgroundIntersections = true;\n else\n enable = parseToggle(arg);\n }\n\n if (typeof enable !== \"string\")\n await this.run(enable, showPreload, showBackgroundIntersections);\n\n return true;\n }\n}\n\n/**\n * Decorates the viewport with a graphical depiction of a Frustum from the currently selected viewport.\n * Only useful when more than one spatial viewport is open.\n */\nclass SelectedViewFrustumDecoration {\n private static _decorator?: SelectedViewFrustumDecoration;\n protected _targetVp: Viewport;\n protected _removeDecorationListener?: () => void;\n protected _removeViewChangedListener?: () => void;\n\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\n public readonly useCachedDecorations = true;\n\n public constructor(vp: Viewport, private _options?: FrustumDecorationOptions) {\n this._targetVp = vp;\n this._removeDecorationListener = IModelApp.viewManager.addDecorator(this);\n this._removeViewChangedListener = vp.onViewChanged.addListener(this.onViewChanged, this); // eslint-disable-line @typescript-eslint/unbound-method\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\n }\n\n protected stop(): void {\n if (this._removeDecorationListener) {\n this._removeDecorationListener();\n this._removeDecorationListener = undefined;\n }\n if (this._removeViewChangedListener) {\n this._removeViewChangedListener();\n this._removeViewChangedListener = undefined;\n }\n\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\n }\n\n public onViewChanged(targetVp: Viewport): void {\n if (targetVp !== this._targetVp)\n return;\n const decorator = SelectedViewFrustumDecoration._decorator;\n if (undefined !== decorator) {\n for (const vp of IModelApp.viewManager) {\n if (vp !== this._targetVp)\n vp.invalidateCachedDecorations(decorator);\n }\n }\n }\n\n public decorate(context: DecorateContext): void {\n const vp = context.viewport;\n if (!this._targetVp.view.isSpatialView() || vp === this._targetVp || !vp.view.isSpatialView())\n return;\n\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\n\n if (this._targetVp.isCameraOn) {\n const npcFrustum = this._targetVp.getFrustum(CoordSystem.Npc, true);\n const focalPlane = this._targetVp.worldToNpc(this._targetVp.view.getTargetPoint()).z;\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, npcFrustum, this._targetVp.viewingSpace.worldToNpcMap, this._targetVp.view.camera.getEyePoint(), focalPlane, context.viewport);\n }\n\n const worldFrustum = this._targetVp.getFrustum(CoordSystem.World, false);\n const adjustedWorldFrustum = this._targetVp.getFrustum(CoordSystem.World, true);\n\n FrustumDecoration.drawFrustumBox(builder, worldFrustum, false, context.viewport); // show original frustum...\n FrustumDecoration.drawFrustumBox(builder, adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\n if (this._options && this._options.showPreloadFrustum)\n FrustumDecoration.drawPreloadFrustum(builder, context.viewport.viewingSpace.getPreloadFrustum());\n\n context.addDecorationFromBuilder(builder);\n }\n\n // Returns true if decoration becomes enabled.\n public static toggle(vp: Viewport, enabled?: boolean): boolean {\n if (undefined !== enabled) {\n const alreadyEnabled = undefined !== SelectedViewFrustumDecoration._decorator;\n if (enabled === alreadyEnabled)\n return alreadyEnabled;\n }\n\n if (undefined === SelectedViewFrustumDecoration._decorator) {\n SelectedViewFrustumDecoration._decorator = new SelectedViewFrustumDecoration(vp);\n return true;\n } else {\n SelectedViewFrustumDecoration._decorator.stop();\n SelectedViewFrustumDecoration._decorator = undefined;\n return false;\n }\n }\n}\n\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the selected view frustum decoration.\n * @beta\n */\nexport class ToggleSelectedViewFrustumTool extends Tool {\n public static override toolId = \"ToggleSelectedViewFrustum\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(enable?: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined === vp || !vp.view.isSpatialView())\n return false;\n if (SelectedViewFrustumDecoration.toggle(vp, enable)) {\n const remove = vp.onChangeView.addListener((_vp: Viewport, prev: ViewState) => {\n if (!prev.hasSameCoordinates(vp.view)) {\n SelectedViewFrustumDecoration.toggle(vp, false);\n remove();\n }\n });\n }\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const enable = parseToggle(args[0]);\n if (typeof enable !== \"string\")\n await this.run(enable);\n\n return true;\n }\n}\n\nclass ShadowFrustumDecoration {\n private static _instance?: ShadowFrustumDecoration;\n private _targetVp: Viewport;\n private _cleanup?: () => void;\n\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\n public readonly useCachedDecorations = true;\n\n public constructor(vp: Viewport) {\n this._targetVp = vp;\n const removeDecorator = IModelApp.viewManager.addDecorator(this);\n const removeOnRender = vp.onRender.addListener((_) => this.onRender());\n this._cleanup = () => {\n removeDecorator();\n removeOnRender();\n };\n\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\n }\n\n private stop(): void {\n if (undefined !== this._cleanup) {\n this._cleanup();\n this._cleanup = undefined;\n }\n\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\n }\n\n public onRender(): void {\n const decorator = ShadowFrustumDecoration._instance;\n if (undefined !== decorator) {\n for (const vp of IModelApp.viewManager) {\n if (vp !== this._targetVp)\n vp.invalidateCachedDecorations(decorator);\n }\n }\n }\n\n public decorate(context: DecorateContext): void {\n const frustum = this._targetVp.target.debugControl!.shadowFrustum;\n if (undefined === frustum)\n return;\n\n const thisVp = context.viewport;\n if (thisVp === this._targetVp || !thisVp.view.isSpatialView())\n return;\n\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\n FrustumDecoration.drawFrustumBox(builder, frustum, false, thisVp);\n context.addDecorationFromBuilder(builder);\n }\n\n public static toggle(vp: Viewport, enabled?: boolean): void {\n const instance = ShadowFrustumDecoration._instance;\n if (undefined !== enabled) {\n const alreadyEnabled = undefined !== instance;\n if (enabled === alreadyEnabled)\n return;\n }\n\n if (undefined === instance) {\n ShadowFrustumDecoration._instance = new ShadowFrustumDecoration(vp);\n } else {\n instance.stop();\n ShadowFrustumDecoration._instance = undefined;\n }\n }\n}\n\n/** Toggle visualization of the selected viewport's shadow frustum in all other viewports.\n * @beta\n */\nexport class ToggleShadowFrustumTool extends Tool {\n public static override toolId = \"ToggleShadowFrustum\";\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 1; }\n\n public override async run(enable?: boolean): Promise<boolean> {\n const vp = IModelApp.viewManager.selectedView;\n if (undefined !== vp && vp.view.isSpatialView())\n ShadowFrustumDecoration.toggle(vp, enable);\n\n return true;\n }\n\n public override async parseAndRun(...args: string[]): Promise<boolean> {\n const enable = parseToggle(args[0]);\n if (typeof enable !== \"string\")\n await this.run(enable);\n\n return true;\n }\n}\n"]}
@@ -25,15 +25,17 @@ const parseArgs_1 = require("./parseArgs");
25
25
  * @beta
26
26
  */
27
27
  class InspectElementTool extends core_frontend_1.PrimitiveTool {
28
+ static toolId = "InspectElement";
28
29
  static get minArgs() { return 0; }
29
30
  static get maxArgs() { return 6; }
31
+ _options = {};
32
+ _elementIds;
33
+ _modal = false;
34
+ _useSelection = false;
35
+ _doCopy = false;
36
+ _explodeParts = false;
30
37
  constructor(options, elementIds) {
31
38
  super();
32
- this._options = {};
33
- this._modal = false;
34
- this._useSelection = false;
35
- this._doCopy = false;
36
- this._explodeParts = false;
37
39
  if (undefined !== options)
38
40
  this._options = { ...options };
39
41
  this._elementIds = elementIds;
@@ -195,5 +197,4 @@ class InspectElementTool extends core_frontend_1.PrimitiveTool {
195
197
  }
196
198
  }
197
199
  exports.InspectElementTool = InspectElementTool;
198
- InspectElementTool.toolId = "InspectElement";
199
200
  //# sourceMappingURL=InspectElementTool.js.map