@itwin/frontend-devtools 3.0.0-dev.72

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 (244) hide show
  1. package/CHANGELOG.md +723 -0
  2. package/LICENSE.md +9 -0
  3. package/README.md +321 -0
  4. package/lib/ClipboardUtilities.d.ts +9 -0
  5. package/lib/ClipboardUtilities.d.ts.map +1 -0
  6. package/lib/ClipboardUtilities.js +27 -0
  7. package/lib/ClipboardUtilities.js.map +1 -0
  8. package/lib/FrontEndDevTools.d.ts +19 -0
  9. package/lib/FrontEndDevTools.d.ts.map +1 -0
  10. package/lib/FrontEndDevTools.js +203 -0
  11. package/lib/FrontEndDevTools.js.map +1 -0
  12. package/lib/effects/Convolution.d.ts +69 -0
  13. package/lib/effects/Convolution.d.ts.map +1 -0
  14. package/lib/effects/Convolution.js +166 -0
  15. package/lib/effects/Convolution.js.map +1 -0
  16. package/lib/effects/EffectTools.d.ts +34 -0
  17. package/lib/effects/EffectTools.d.ts.map +1 -0
  18. package/lib/effects/EffectTools.js +69 -0
  19. package/lib/effects/EffectTools.js.map +1 -0
  20. package/lib/effects/Explosion.d.ts +13 -0
  21. package/lib/effects/Explosion.d.ts.map +1 -0
  22. package/lib/effects/Explosion.js +168 -0
  23. package/lib/effects/Explosion.js.map +1 -0
  24. package/lib/effects/FlipImage.d.ts +31 -0
  25. package/lib/effects/FlipImage.d.ts.map +1 -0
  26. package/lib/effects/FlipImage.js +100 -0
  27. package/lib/effects/FlipImage.js.map +1 -0
  28. package/lib/effects/LensDistortion.d.ts +35 -0
  29. package/lib/effects/LensDistortion.d.ts.map +1 -0
  30. package/lib/effects/LensDistortion.js +110 -0
  31. package/lib/effects/LensDistortion.js.map +1 -0
  32. package/lib/effects/Random.d.ts +25 -0
  33. package/lib/effects/Random.d.ts.map +1 -0
  34. package/lib/effects/Random.js +50 -0
  35. package/lib/effects/Random.js.map +1 -0
  36. package/lib/effects/Saturation.d.ts +31 -0
  37. package/lib/effects/Saturation.d.ts.map +1 -0
  38. package/lib/effects/Saturation.js +86 -0
  39. package/lib/effects/Saturation.js.map +1 -0
  40. package/lib/effects/Snow.d.ts +77 -0
  41. package/lib/effects/Snow.d.ts.map +1 -0
  42. package/lib/effects/Snow.js +187 -0
  43. package/lib/effects/Snow.js.map +1 -0
  44. package/lib/effects/Vignette.d.ts +40 -0
  45. package/lib/effects/Vignette.d.ts.map +1 -0
  46. package/lib/effects/Vignette.js +109 -0
  47. package/lib/effects/Vignette.js.map +1 -0
  48. package/lib/frontend-devtools.d.ts +82 -0
  49. package/lib/frontend-devtools.d.ts.map +1 -0
  50. package/lib/frontend-devtools.js +98 -0
  51. package/lib/frontend-devtools.js.map +1 -0
  52. package/lib/public/locales/en/FrontendDevTools.json +449 -0
  53. package/lib/public/sprites/particle_explosion.png +0 -0
  54. package/lib/public/sprites/particle_flame.png +0 -0
  55. package/lib/public/sprites/particle_snow.png +0 -0
  56. package/lib/tools/AnimationIntervalTool.d.ts +16 -0
  57. package/lib/tools/AnimationIntervalTool.d.ts.map +1 -0
  58. package/lib/tools/AnimationIntervalTool.js +31 -0
  59. package/lib/tools/AnimationIntervalTool.js.map +1 -0
  60. package/lib/tools/ChangeUnitsTool.d.ts +16 -0
  61. package/lib/tools/ChangeUnitsTool.d.ts.map +1 -0
  62. package/lib/tools/ChangeUnitsTool.js +42 -0
  63. package/lib/tools/ChangeUnitsTool.js.map +1 -0
  64. package/lib/tools/ClipTools.d.ts +68 -0
  65. package/lib/tools/ClipTools.d.ts.map +1 -0
  66. package/lib/tools/ClipTools.js +162 -0
  67. package/lib/tools/ClipTools.js.map +1 -0
  68. package/lib/tools/DisplayStyleTools.d.ts +99 -0
  69. package/lib/tools/DisplayStyleTools.d.ts.map +1 -0
  70. package/lib/tools/DisplayStyleTools.js +242 -0
  71. package/lib/tools/DisplayStyleTools.js.map +1 -0
  72. package/lib/tools/EmphasizeElementsTool.d.ts +61 -0
  73. package/lib/tools/EmphasizeElementsTool.d.ts.map +1 -0
  74. package/lib/tools/EmphasizeElementsTool.js +155 -0
  75. package/lib/tools/EmphasizeElementsTool.js.map +1 -0
  76. package/lib/tools/FrustumDecoration.d.ts +58 -0
  77. package/lib/tools/FrustumDecoration.d.ts.map +1 -0
  78. package/lib/tools/FrustumDecoration.js +372 -0
  79. package/lib/tools/FrustumDecoration.js.map +1 -0
  80. package/lib/tools/InspectElementTool.d.ts +42 -0
  81. package/lib/tools/InspectElementTool.d.ts.map +1 -0
  82. package/lib/tools/InspectElementTool.js +185 -0
  83. package/lib/tools/InspectElementTool.js.map +1 -0
  84. package/lib/tools/MapLayerTool.d.ts +248 -0
  85. package/lib/tools/MapLayerTool.d.ts.map +1 -0
  86. package/lib/tools/MapLayerTool.js +462 -0
  87. package/lib/tools/MapLayerTool.js.map +1 -0
  88. package/lib/tools/MeasureTileLoadTime.d.ts +13 -0
  89. package/lib/tools/MeasureTileLoadTime.d.ts.map +1 -0
  90. package/lib/tools/MeasureTileLoadTime.js +61 -0
  91. package/lib/tools/MeasureTileLoadTime.js.map +1 -0
  92. package/lib/tools/ModelAppearanceTools.d.ts +87 -0
  93. package/lib/tools/ModelAppearanceTools.d.ts.map +1 -0
  94. package/lib/tools/ModelAppearanceTools.js +184 -0
  95. package/lib/tools/ModelAppearanceTools.js.map +1 -0
  96. package/lib/tools/PlanProjectionTools.d.ts +41 -0
  97. package/lib/tools/PlanProjectionTools.d.ts.map +1 -0
  98. package/lib/tools/PlanProjectionTools.js +150 -0
  99. package/lib/tools/PlanProjectionTools.js.map +1 -0
  100. package/lib/tools/PlanarMaskTools.d.ts +182 -0
  101. package/lib/tools/PlanarMaskTools.d.ts.map +1 -0
  102. package/lib/tools/PlanarMaskTools.js +366 -0
  103. package/lib/tools/PlanarMaskTools.js.map +1 -0
  104. package/lib/tools/ProjectExtents.d.ts +41 -0
  105. package/lib/tools/ProjectExtents.d.ts.map +1 -0
  106. package/lib/tools/ProjectExtents.js +108 -0
  107. package/lib/tools/ProjectExtents.js.map +1 -0
  108. package/lib/tools/RealityModelTools.d.ts +117 -0
  109. package/lib/tools/RealityModelTools.d.ts.map +1 -0
  110. package/lib/tools/RealityModelTools.js +269 -0
  111. package/lib/tools/RealityModelTools.js.map +1 -0
  112. package/lib/tools/RealityTransitionTool.d.ts +26 -0
  113. package/lib/tools/RealityTransitionTool.d.ts.map +1 -0
  114. package/lib/tools/RealityTransitionTool.js +110 -0
  115. package/lib/tools/RealityTransitionTool.js.map +1 -0
  116. package/lib/tools/RenderSystemTools.d.ts +46 -0
  117. package/lib/tools/RenderSystemTools.d.ts.map +1 -0
  118. package/lib/tools/RenderSystemTools.js +81 -0
  119. package/lib/tools/RenderSystemTools.js.map +1 -0
  120. package/lib/tools/RenderTargetTools.d.ts +101 -0
  121. package/lib/tools/RenderTargetTools.d.ts.map +1 -0
  122. package/lib/tools/RenderTargetTools.js +167 -0
  123. package/lib/tools/RenderTargetTools.js.map +1 -0
  124. package/lib/tools/ReportWebGLCompatibilityTool.d.ts +12 -0
  125. package/lib/tools/ReportWebGLCompatibilityTool.d.ts.map +1 -0
  126. package/lib/tools/ReportWebGLCompatibilityTool.js +31 -0
  127. package/lib/tools/ReportWebGLCompatibilityTool.js.map +1 -0
  128. package/lib/tools/SavedViews.d.ts +47 -0
  129. package/lib/tools/SavedViews.d.ts.map +1 -0
  130. package/lib/tools/SavedViews.js +137 -0
  131. package/lib/tools/SavedViews.js.map +1 -0
  132. package/lib/tools/SelectionTools.d.ts +17 -0
  133. package/lib/tools/SelectionTools.d.ts.map +1 -0
  134. package/lib/tools/SelectionTools.js +28 -0
  135. package/lib/tools/SelectionTools.js.map +1 -0
  136. package/lib/tools/SetGpuMemoryLimitTool.d.ts +16 -0
  137. package/lib/tools/SetGpuMemoryLimitTool.d.ts.map +1 -0
  138. package/lib/tools/SetGpuMemoryLimitTool.js +34 -0
  139. package/lib/tools/SetGpuMemoryLimitTool.js.map +1 -0
  140. package/lib/tools/SourceAspectIdTools.d.ts +41 -0
  141. package/lib/tools/SourceAspectIdTools.d.ts.map +1 -0
  142. package/lib/tools/SourceAspectIdTools.js +105 -0
  143. package/lib/tools/SourceAspectIdTools.js.map +1 -0
  144. package/lib/tools/TileRequestDecoration.d.ts +13 -0
  145. package/lib/tools/TileRequestDecoration.d.ts.map +1 -0
  146. package/lib/tools/TileRequestDecoration.js +84 -0
  147. package/lib/tools/TileRequestDecoration.js.map +1 -0
  148. package/lib/tools/TileTreeBoundsDecoration.d.ts +12 -0
  149. package/lib/tools/TileTreeBoundsDecoration.d.ts.map +1 -0
  150. package/lib/tools/TileTreeBoundsDecoration.js +75 -0
  151. package/lib/tools/TileTreeBoundsDecoration.js.map +1 -0
  152. package/lib/tools/ToolTipProvider.d.ts +16 -0
  153. package/lib/tools/ToolTipProvider.d.ts.map +1 -0
  154. package/lib/tools/ToolTipProvider.js +67 -0
  155. package/lib/tools/ToolTipProvider.js.map +1 -0
  156. package/lib/tools/ViewportTools.d.ts +194 -0
  157. package/lib/tools/ViewportTools.d.ts.map +1 -0
  158. package/lib/tools/ViewportTools.js +451 -0
  159. package/lib/tools/ViewportTools.js.map +1 -0
  160. package/lib/tools/parseArgs.d.ts +24 -0
  161. package/lib/tools/parseArgs.d.ts.map +1 -0
  162. package/lib/tools/parseArgs.js +52 -0
  163. package/lib/tools/parseArgs.js.map +1 -0
  164. package/lib/tools/parseBoolean.d.ts +9 -0
  165. package/lib/tools/parseBoolean.d.ts.map +1 -0
  166. package/lib/tools/parseBoolean.js +27 -0
  167. package/lib/tools/parseBoolean.js.map +1 -0
  168. package/lib/tools/parseToggle.d.ts +9 -0
  169. package/lib/tools/parseToggle.d.ts.map +1 -0
  170. package/lib/tools/parseToggle.js +26 -0
  171. package/lib/tools/parseToggle.js.map +1 -0
  172. package/lib/ui/Button.d.ts +30 -0
  173. package/lib/ui/Button.d.ts.map +1 -0
  174. package/lib/ui/Button.js +27 -0
  175. package/lib/ui/Button.js.map +1 -0
  176. package/lib/ui/CheckBox.d.ts +24 -0
  177. package/lib/ui/CheckBox.d.ts.map +1 -0
  178. package/lib/ui/CheckBox.js +28 -0
  179. package/lib/ui/CheckBox.js.map +1 -0
  180. package/lib/ui/ColorInput.d.ts +28 -0
  181. package/lib/ui/ColorInput.d.ts.map +1 -0
  182. package/lib/ui/ColorInput.js +54 -0
  183. package/lib/ui/ColorInput.js.map +1 -0
  184. package/lib/ui/ComboBox.d.ts +29 -0
  185. package/lib/ui/ComboBox.d.ts.map +1 -0
  186. package/lib/ui/ComboBox.js +43 -0
  187. package/lib/ui/ComboBox.js.map +1 -0
  188. package/lib/ui/DataList.d.ts +28 -0
  189. package/lib/ui/DataList.d.ts.map +1 -0
  190. package/lib/ui/DataList.js +40 -0
  191. package/lib/ui/DataList.js.map +1 -0
  192. package/lib/ui/NestedMenu.d.ts +20 -0
  193. package/lib/ui/NestedMenu.d.ts.map +1 -0
  194. package/lib/ui/NestedMenu.js +47 -0
  195. package/lib/ui/NestedMenu.js.map +1 -0
  196. package/lib/ui/NumericInput.d.ts +35 -0
  197. package/lib/ui/NumericInput.d.ts.map +1 -0
  198. package/lib/ui/NumericInput.js +60 -0
  199. package/lib/ui/NumericInput.js.map +1 -0
  200. package/lib/ui/RadioBox.d.ts +29 -0
  201. package/lib/ui/RadioBox.d.ts.map +1 -0
  202. package/lib/ui/RadioBox.js +77 -0
  203. package/lib/ui/RadioBox.js.map +1 -0
  204. package/lib/ui/Slider.d.ts +25 -0
  205. package/lib/ui/Slider.d.ts.map +1 -0
  206. package/lib/ui/Slider.js +33 -0
  207. package/lib/ui/Slider.js.map +1 -0
  208. package/lib/ui/TextBox.d.ts +33 -0
  209. package/lib/ui/TextBox.d.ts.map +1 -0
  210. package/lib/ui/TextBox.js +57 -0
  211. package/lib/ui/TextBox.js.map +1 -0
  212. package/lib/widgets/DiagnosticsPanel.d.ts +36 -0
  213. package/lib/widgets/DiagnosticsPanel.d.ts.map +1 -0
  214. package/lib/widgets/DiagnosticsPanel.js +76 -0
  215. package/lib/widgets/DiagnosticsPanel.js.map +1 -0
  216. package/lib/widgets/FpsTracker.d.ts +20 -0
  217. package/lib/widgets/FpsTracker.d.ts.map +1 -0
  218. package/lib/widgets/FpsTracker.js +57 -0
  219. package/lib/widgets/FpsTracker.js.map +1 -0
  220. package/lib/widgets/GpuProfiler.d.ts +17 -0
  221. package/lib/widgets/GpuProfiler.d.ts.map +1 -0
  222. package/lib/widgets/GpuProfiler.js +193 -0
  223. package/lib/widgets/GpuProfiler.js.map +1 -0
  224. package/lib/widgets/KeyinField.d.ts +62 -0
  225. package/lib/widgets/KeyinField.d.ts.map +1 -0
  226. package/lib/widgets/KeyinField.js +188 -0
  227. package/lib/widgets/KeyinField.js.map +1 -0
  228. package/lib/widgets/MemoryTracker.d.ts +28 -0
  229. package/lib/widgets/MemoryTracker.d.ts.map +1 -0
  230. package/lib/widgets/MemoryTracker.js +244 -0
  231. package/lib/widgets/MemoryTracker.js.map +1 -0
  232. package/lib/widgets/TileMemoryBreakdown.d.ts +31 -0
  233. package/lib/widgets/TileMemoryBreakdown.d.ts.map +1 -0
  234. package/lib/widgets/TileMemoryBreakdown.js +205 -0
  235. package/lib/widgets/TileMemoryBreakdown.js.map +1 -0
  236. package/lib/widgets/TileStatisticsTracker.d.ts +22 -0
  237. package/lib/widgets/TileStatisticsTracker.d.ts.map +1 -0
  238. package/lib/widgets/TileStatisticsTracker.js +143 -0
  239. package/lib/widgets/TileStatisticsTracker.js.map +1 -0
  240. package/lib/widgets/ToolSettingsTracker.d.ts +10 -0
  241. package/lib/widgets/ToolSettingsTracker.d.ts.map +1 -0
  242. package/lib/widgets/ToolSettingsTracker.js +182 -0
  243. package/lib/widgets/ToolSettingsTracker.js.map +1 -0
  244. package/package.json +59 -0
@@ -0,0 +1,182 @@
1
+ /** @packageDocumentation
2
+ * @module Tools
3
+ */
4
+ import { Id64String } from "@itwin/core-bentley";
5
+ import { PlanarClipMaskSettings } from "@itwin/core-common";
6
+ import { BeButtonEvent, ContextRealityModelState, EventHandled, HitDetail, LocateFilterStatus, LocateResponse, PrimitiveTool, ScreenViewport, Tool } from "@itwin/core-frontend";
7
+ /** Set Map Masking by selected models.
8
+ * @beta
9
+ */
10
+ export declare class SetMapHigherPriorityMasking extends Tool {
11
+ static toolId: string;
12
+ static get minArgs(): number;
13
+ static get maxArgs(): number;
14
+ run(transparency?: number): Promise<boolean>;
15
+ parseAndRun(...args: string[]): Promise<boolean>;
16
+ }
17
+ /** Unmask Mask.
18
+ * @beta
19
+ */
20
+ export declare class UnmaskMapTool extends Tool {
21
+ static toolId: string;
22
+ static get minArgs(): number;
23
+ static get maxArgs(): number;
24
+ run(): Promise<boolean>;
25
+ }
26
+ /** Base class for the reality model planar masking tools.
27
+ * @beta
28
+ */
29
+ export declare abstract class PlanarMaskBaseTool extends PrimitiveTool {
30
+ protected readonly _acceptedModelIds: Set<string>;
31
+ protected readonly _acceptedSubCategoryIds: Set<string>;
32
+ protected readonly _acceptedElementIds: Set<string>;
33
+ protected _transparency?: number;
34
+ protected _useSelection: boolean;
35
+ protected _targetMaskModel?: Id64String | ContextRealityModelState;
36
+ requireWriteableTarget(): boolean;
37
+ onPostInstall(): Promise<void>;
38
+ onUnsuspend(): Promise<void>;
39
+ private setupAndPromptForNextAction;
40
+ protected targetModelRequired(): boolean;
41
+ protected elementRequired(): boolean;
42
+ protected allowSelection(): boolean;
43
+ protected abstract showPrompt(): void;
44
+ protected abstract createToolInstance(): PlanarMaskBaseTool;
45
+ protected abstract applyMask(vp: ScreenViewport): void;
46
+ private clearIds;
47
+ exitTool(): Promise<void>;
48
+ onRestartTool(): Promise<void>;
49
+ parseAndRun(...args: string[]): Promise<boolean>;
50
+ onCleanup(): Promise<void>;
51
+ filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus>;
52
+ onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
53
+ protected createSubCategoryMask(): PlanarClipMaskSettings;
54
+ protected createElementMask(option: "include" | "exclude"): PlanarClipMaskSettings;
55
+ protected createModelMask(): PlanarClipMaskSettings;
56
+ protected setRealityModelMask(vp: ScreenViewport, mask: PlanarClipMaskSettings): void;
57
+ }
58
+ /** Tool to mask background map by elements
59
+ * @beta
60
+ */
61
+ export declare class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {
62
+ static toolId: string;
63
+ static get minArgs(): number;
64
+ static get maxArgs(): number;
65
+ protected targetModelRequired(): boolean;
66
+ protected showPrompt(): void;
67
+ protected createToolInstance(): PlanarMaskBaseTool;
68
+ protected applyMask(vp: ScreenViewport): void;
69
+ }
70
+ /** Tool to mask background map by excluded elements
71
+ * @beta
72
+ */
73
+ export declare class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {
74
+ static toolId: string;
75
+ static get minArgs(): number;
76
+ static get maxArgs(): number;
77
+ protected targetModelRequired(): boolean;
78
+ protected showPrompt(): void;
79
+ protected createToolInstance(): PlanarMaskBaseTool;
80
+ protected applyMask(vp: ScreenViewport): void;
81
+ }
82
+ /** Tool to mask background map by SubCategories
83
+ * @beta
84
+ */
85
+ export declare class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {
86
+ static toolId: string;
87
+ static get minArgs(): number;
88
+ static get maxArgs(): number;
89
+ protected targetModelRequired(): boolean;
90
+ protected allowSelection(): boolean;
91
+ protected showPrompt(): void;
92
+ protected createToolInstance(): PlanarMaskBaseTool;
93
+ protected applyMask(vp: ScreenViewport): void;
94
+ }
95
+ /** Tool to mask background map by geometric models
96
+ * @beta
97
+ */
98
+ export declare class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {
99
+ static toolId: string;
100
+ static get minArgs(): number;
101
+ static get maxArgs(): number;
102
+ protected targetModelRequired(): boolean;
103
+ protected showPrompt(): void;
104
+ protected createToolInstance(): PlanarMaskBaseTool;
105
+ protected applyMask(vp: ScreenViewport): void;
106
+ }
107
+ /** Tool to mask reality model by elements
108
+ * @beta
109
+ */
110
+ export declare class MaskRealityModelByElementTool extends PlanarMaskBaseTool {
111
+ static toolId: string;
112
+ static get minArgs(): number;
113
+ static get maxArgs(): number;
114
+ protected targetModelRequired(): boolean;
115
+ protected showPrompt(): void;
116
+ protected createToolInstance(): PlanarMaskBaseTool;
117
+ protected applyMask(vp: ScreenViewport): void;
118
+ }
119
+ /** Tool to mask reality model by excluded elements
120
+ * @beta
121
+ */
122
+ export declare class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {
123
+ static toolId: string;
124
+ static get minArgs(): number;
125
+ static get maxArgs(): number;
126
+ protected targetModelRequired(): boolean;
127
+ protected showPrompt(): void;
128
+ protected createToolInstance(): PlanarMaskBaseTool;
129
+ protected applyMask(vp: ScreenViewport): void;
130
+ }
131
+ /** Tool to mask reality model by geometric models
132
+ * @beta
133
+ */
134
+ export declare class MaskRealityModelByModelTool extends PlanarMaskBaseTool {
135
+ static toolId: string;
136
+ static get minArgs(): number;
137
+ static get maxArgs(): number;
138
+ protected targetModelRequired(): boolean;
139
+ protected showPrompt(): void;
140
+ protected createToolInstance(): PlanarMaskBaseTool;
141
+ protected applyMask(vp: ScreenViewport): void;
142
+ }
143
+ /** Tool to mask reality model by SubCategories
144
+ * @beta
145
+ */
146
+ export declare class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {
147
+ static toolId: string;
148
+ static get minArgs(): number;
149
+ static get maxArgs(): number;
150
+ protected targetModelRequired(): boolean;
151
+ protected allowSelection(): boolean;
152
+ protected showPrompt(): void;
153
+ protected createToolInstance(): PlanarMaskBaseTool;
154
+ protected applyMask(vp: ScreenViewport): void;
155
+ }
156
+ /** Tool to mask reality model by higher priority models.
157
+ * @beta
158
+ */
159
+ export declare class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {
160
+ static toolId: string;
161
+ static get minArgs(): number;
162
+ static get maxArgs(): number;
163
+ protected targetModelRequired(): boolean;
164
+ protected elementRequired(): boolean;
165
+ private _priority;
166
+ protected showPrompt(): void;
167
+ protected createToolInstance(): PlanarMaskBaseTool;
168
+ protected applyMask(vp: ScreenViewport): void;
169
+ parseAndRun(...args: string[]): Promise<boolean>;
170
+ }
171
+ /** Remove masks from reality model.
172
+ * @beta
173
+ */
174
+ export declare class UnmaskRealityModelTool extends PlanarMaskBaseTool {
175
+ static toolId: string;
176
+ protected targetModelRequired(): boolean;
177
+ protected showPrompt(): void;
178
+ protected createToolInstance(): PlanarMaskBaseTool;
179
+ protected applyMask(vp: ScreenViewport): void;
180
+ onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
181
+ }
182
+ //# sourceMappingURL=PlanarMaskTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanarMaskTools.d.ts","sourceRoot":"","sources":["../../src/tools/PlanarMaskTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.UnmaskRealityModelTool = exports.SetHigherPriorityRealityModelMasking = exports.MaskRealityModelBySubCategoryTool = exports.MaskRealityModelByModelTool = exports.MaskRealityModelByExcludedElementTool = exports.MaskRealityModelByElementTool = exports.MaskBackgroundMapByModelTool = exports.MaskBackgroundMapBySubCategoryTool = exports.MaskBackgroundMapByExcludedElementTool = exports.MaskBackgroundMapByElementTool = exports.PlanarMaskBaseTool = exports.UnmaskMapTool = exports.SetMapHigherPriorityMasking = void 0;
8
+ const core_common_1 = require("@itwin/core-common");
9
+ const core_frontend_1 = require("@itwin/core-frontend");
10
+ /** Set Map Masking by selected models.
11
+ * @beta
12
+ */
13
+ class SetMapHigherPriorityMasking extends core_frontend_1.Tool {
14
+ static get minArgs() { return 0; }
15
+ static get maxArgs() { return 1; }
16
+ async run(transparency) {
17
+ const vp = core_frontend_1.IModelApp.viewManager.selectedView;
18
+ if (undefined === vp)
19
+ return false;
20
+ vp.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency } });
21
+ vp.invalidateRenderPlan();
22
+ return true;
23
+ }
24
+ async parseAndRun(...args) {
25
+ const transparency = parseFloat(args[0]);
26
+ return this.run((transparency !== undefined && transparency < 1.0) ? transparency : undefined);
27
+ }
28
+ }
29
+ exports.SetMapHigherPriorityMasking = SetMapHigherPriorityMasking;
30
+ SetMapHigherPriorityMasking.toolId = "SetMapHigherPriorityMask";
31
+ /** Unmask Mask.
32
+ * @beta
33
+ */
34
+ class UnmaskMapTool extends core_frontend_1.Tool {
35
+ static get minArgs() { return 0; }
36
+ static get maxArgs() { return 0; }
37
+ async run() {
38
+ const vp = core_frontend_1.IModelApp.viewManager.selectedView;
39
+ if (undefined === vp)
40
+ return false;
41
+ vp.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.None } });
42
+ vp.invalidateRenderPlan();
43
+ return true;
44
+ }
45
+ }
46
+ exports.UnmaskMapTool = UnmaskMapTool;
47
+ UnmaskMapTool.toolId = "UnmaskMap";
48
+ /** Base class for the reality model planar masking tools.
49
+ * @beta
50
+ */
51
+ class PlanarMaskBaseTool extends core_frontend_1.PrimitiveTool {
52
+ constructor() {
53
+ super(...arguments);
54
+ this._acceptedModelIds = new Set();
55
+ this._acceptedSubCategoryIds = new Set();
56
+ this._acceptedElementIds = new Set();
57
+ this._useSelection = false;
58
+ }
59
+ requireWriteableTarget() { return false; }
60
+ async onPostInstall() { await super.onPostInstall(); this.setupAndPromptForNextAction(); }
61
+ async onUnsuspend() { this.showPrompt(); }
62
+ setupAndPromptForNextAction() {
63
+ this._useSelection = (undefined !== this.targetView && this.iModel.selectionSet.isActive);
64
+ this.initLocateElements(!this._useSelection || (this.targetModelRequired() && !this._targetMaskModel));
65
+ core_frontend_1.IModelApp.locateManager.options.allowDecorations = true; // So we can select "contextual" reality models.
66
+ this.showPrompt();
67
+ }
68
+ targetModelRequired() { return true; }
69
+ elementRequired() { return true; }
70
+ allowSelection() { return true; }
71
+ clearIds() {
72
+ this._acceptedElementIds.clear();
73
+ this._acceptedModelIds.clear();
74
+ }
75
+ async exitTool() {
76
+ await super.exitTool();
77
+ this._transparency = undefined;
78
+ }
79
+ async onRestartTool() {
80
+ this.clearIds();
81
+ this._acceptedSubCategoryIds.clear();
82
+ const tool = this.createToolInstance();
83
+ if (!await tool.run())
84
+ await this.exitTool();
85
+ }
86
+ async parseAndRun(...args) {
87
+ const transparency = parseFloat(args[0]);
88
+ this._transparency = (transparency !== undefined && transparency < 1.0) ? transparency : undefined;
89
+ return this.run();
90
+ }
91
+ async onCleanup() {
92
+ if (0 !== this._acceptedElementIds.size)
93
+ this.iModel.hilited.setHilite(this._acceptedElementIds, false);
94
+ this.clearIds();
95
+ }
96
+ async filterHit(hit, _out) {
97
+ var _a;
98
+ if (!hit.modelId)
99
+ return core_frontend_1.LocateFilterStatus.Reject;
100
+ if (undefined === this._targetMaskModel && this.targetModelRequired()) {
101
+ if (undefined !== hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId))
102
+ return core_frontend_1.LocateFilterStatus.Accept;
103
+ const model = (_a = this.iModel.models.getLoaded(hit.modelId)) === null || _a === void 0 ? void 0 : _a.asSpatialModel;
104
+ return (model === null || model === void 0 ? void 0 : model.isRealityModel) ? core_frontend_1.LocateFilterStatus.Accept : core_frontend_1.LocateFilterStatus.Reject;
105
+ }
106
+ else
107
+ return (hit.isElementHit && !hit.isModelHit && !this._acceptedElementIds.has(hit.sourceId)) ? core_frontend_1.LocateFilterStatus.Accept : core_frontend_1.LocateFilterStatus.Reject;
108
+ }
109
+ async onDataButtonDown(ev) {
110
+ var _a;
111
+ const hit = await core_frontend_1.IModelApp.locateManager.doLocate(new core_frontend_1.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
112
+ const vp = core_frontend_1.IModelApp.viewManager.selectedView;
113
+ if (undefined === vp)
114
+ return core_frontend_1.EventHandled.No;
115
+ if (undefined !== hit && undefined === this._targetMaskModel && this.targetModelRequired()) {
116
+ if (hit.modelId) {
117
+ this._targetMaskModel = (_a = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId)) !== null && _a !== void 0 ? _a : hit.modelId;
118
+ if (!this.elementRequired()) {
119
+ this.applyMask(vp);
120
+ await this.onRestartTool();
121
+ }
122
+ }
123
+ }
124
+ else if (this._useSelection && this.iModel.selectionSet.isActive) {
125
+ const elements = await this.iModel.elements.getProps(this.iModel.selectionSet.elements);
126
+ for (const element of elements) {
127
+ if (element.id && element.model) {
128
+ this._acceptedElementIds.add(element.id);
129
+ this._acceptedModelIds.add(element.model);
130
+ }
131
+ }
132
+ this.applyMask(vp);
133
+ await this.exitTool();
134
+ return core_frontend_1.EventHandled.No;
135
+ }
136
+ else if (undefined !== hit && hit.isElementHit) {
137
+ const sourceId = hit.sourceId;
138
+ if (!this._acceptedElementIds.has(sourceId)) {
139
+ this._acceptedElementIds.add(sourceId);
140
+ this._acceptedModelIds.add(hit.modelId);
141
+ if (hit.subCategoryId)
142
+ this._acceptedSubCategoryIds.add(hit.subCategoryId);
143
+ this.applyMask(vp);
144
+ }
145
+ }
146
+ this.setupAndPromptForNextAction();
147
+ return core_frontend_1.EventHandled.No;
148
+ }
149
+ createSubCategoryMask() {
150
+ return core_common_1.PlanarClipMaskSettings.createForElementsOrSubCategories(core_common_1.PlanarClipMaskMode.IncludeSubCategories, this._acceptedSubCategoryIds, this._acceptedModelIds, this._transparency);
151
+ }
152
+ createElementMask(option) {
153
+ const mode = "include" === option ? core_common_1.PlanarClipMaskMode.IncludeElements : core_common_1.PlanarClipMaskMode.ExcludeElements;
154
+ return core_common_1.PlanarClipMaskSettings.createForElementsOrSubCategories(mode, this._acceptedElementIds, this._acceptedModelIds, this._transparency);
155
+ }
156
+ createModelMask() {
157
+ return core_common_1.PlanarClipMaskSettings.createForModels(this._acceptedModelIds, this._transparency);
158
+ }
159
+ setRealityModelMask(vp, mask) {
160
+ if (typeof this._targetMaskModel === "string")
161
+ vp.displayStyle.settings.planarClipMasks.set(this._targetMaskModel, mask);
162
+ else if (undefined !== this._targetMaskModel)
163
+ this._targetMaskModel.planarClipMaskSettings = mask;
164
+ }
165
+ }
166
+ exports.PlanarMaskBaseTool = PlanarMaskBaseTool;
167
+ /** Tool to mask background map by elements
168
+ * @beta
169
+ */
170
+ class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {
171
+ static get minArgs() { return 0; }
172
+ static get maxArgs() { return 1; }
173
+ targetModelRequired() { return false; }
174
+ showPrompt() {
175
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByElement.Prompts.${this._useSelection ? "AcceptSelection" : "IdentifyMaskElement"}`);
176
+ }
177
+ createToolInstance() { return new MaskBackgroundMapByElementTool(); }
178
+ applyMask(vp) {
179
+ vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask("include").toJSON() });
180
+ }
181
+ }
182
+ exports.MaskBackgroundMapByElementTool = MaskBackgroundMapByElementTool;
183
+ MaskBackgroundMapByElementTool.toolId = "MaskBackgroundMapByElement";
184
+ /** Tool to mask background map by excluded elements
185
+ * @beta
186
+ */
187
+ class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {
188
+ static get minArgs() { return 0; }
189
+ static get maxArgs() { return 1; }
190
+ targetModelRequired() { return false; }
191
+ showPrompt() {
192
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByExcludedElement.Prompts.${this._useSelection ? "AcceptSelection" : "IdentifyMaskElement"}`);
193
+ }
194
+ createToolInstance() { return new MaskBackgroundMapByExcludedElementTool(); }
195
+ applyMask(vp) {
196
+ vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask("exclude").toJSON() });
197
+ }
198
+ }
199
+ exports.MaskBackgroundMapByExcludedElementTool = MaskBackgroundMapByExcludedElementTool;
200
+ MaskBackgroundMapByExcludedElementTool.toolId = "MaskBackgroundMapByExcludedElement";
201
+ /** Tool to mask background map by SubCategories
202
+ * @beta
203
+ */
204
+ class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {
205
+ static get minArgs() { return 0; }
206
+ static get maxArgs() { return 1; }
207
+ targetModelRequired() { return false; }
208
+ allowSelection() { return false; } // Need picking to get subcategory.
209
+ showPrompt() {
210
+ core_frontend_1.IModelApp.notifications.outputPromptByKey("FrontendDevTools:tools.MaskBackgroundMapBySubCategory.Prompts.IdentifyMaskSubCategory");
211
+ }
212
+ createToolInstance() { return new MaskBackgroundMapBySubCategoryTool(); }
213
+ applyMask(vp) {
214
+ vp.changeBackgroundMapProps({ planarClipMask: this.createSubCategoryMask().toJSON() });
215
+ }
216
+ }
217
+ exports.MaskBackgroundMapBySubCategoryTool = MaskBackgroundMapBySubCategoryTool;
218
+ MaskBackgroundMapBySubCategoryTool.toolId = "MaskBackgroundMapBySubCategory";
219
+ /** Tool to mask background map by geometric models
220
+ * @beta
221
+ */
222
+ class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {
223
+ static get minArgs() { return 0; }
224
+ static get maxArgs() { return 1; }
225
+ targetModelRequired() { return false; }
226
+ showPrompt() {
227
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByModel.Prompts.${this._useSelection ? "AcceptSelection" : "IdentifyMaskModel"}`);
228
+ }
229
+ createToolInstance() { return new MaskBackgroundMapByModelTool(); }
230
+ applyMask(vp) {
231
+ vp.changeBackgroundMapProps({ planarClipMask: this.createModelMask().toJSON() });
232
+ }
233
+ }
234
+ exports.MaskBackgroundMapByModelTool = MaskBackgroundMapByModelTool;
235
+ MaskBackgroundMapByModelTool.toolId = "MaskBackgroundMapByModel";
236
+ /** Tool to mask reality model by elements
237
+ * @beta
238
+ */
239
+ class MaskRealityModelByElementTool extends PlanarMaskBaseTool {
240
+ static get minArgs() { return 0; }
241
+ static get maxArgs() { return 1; }
242
+ targetModelRequired() { return true; }
243
+ showPrompt() {
244
+ const key = `FrontendDevTools:tools.MaskRealityModelByElement.Prompts.${this._targetMaskModel === undefined ? "IdentifyRealityModel" : (this._useSelection ? "AcceptSelection" : "IdentifyMaskElement")}`;
245
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(key);
246
+ }
247
+ createToolInstance() { return new MaskRealityModelByElementTool(); }
248
+ applyMask(vp) {
249
+ this.setRealityModelMask(vp, this.createElementMask("include"));
250
+ }
251
+ }
252
+ exports.MaskRealityModelByElementTool = MaskRealityModelByElementTool;
253
+ MaskRealityModelByElementTool.toolId = "MaskRealityModelByElement";
254
+ /** Tool to mask reality model by excluded elements
255
+ * @beta
256
+ */
257
+ class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {
258
+ static get minArgs() { return 0; }
259
+ static get maxArgs() { return 1; }
260
+ targetModelRequired() { return true; }
261
+ showPrompt() {
262
+ const key = `FrontendDevTools:tools.MaskRealityModelByExcludedElement.Prompts.${this._targetMaskModel === undefined ? "IdentifyRealityModel" : (this._useSelection ? "AcceptSelection" : "IdentifyMaskElement")}`;
263
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(key);
264
+ }
265
+ createToolInstance() { return new MaskRealityModelByExcludedElementTool(); }
266
+ applyMask(vp) {
267
+ this.setRealityModelMask(vp, this.createElementMask("exclude"));
268
+ }
269
+ }
270
+ exports.MaskRealityModelByExcludedElementTool = MaskRealityModelByExcludedElementTool;
271
+ MaskRealityModelByExcludedElementTool.toolId = "MaskRealityModelByExcludedElement";
272
+ /** Tool to mask reality model by geometric models
273
+ * @beta
274
+ */
275
+ class MaskRealityModelByModelTool extends PlanarMaskBaseTool {
276
+ static get minArgs() { return 0; }
277
+ static get maxArgs() { return 1; }
278
+ targetModelRequired() { return true; }
279
+ showPrompt() {
280
+ const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? "IdentifyRealityModel" : (this._useSelection ? "AcceptSelection" : "IdentifyMaskModel")}`;
281
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(key);
282
+ }
283
+ createToolInstance() { return new MaskRealityModelByModelTool(); }
284
+ applyMask(vp) {
285
+ this.setRealityModelMask(vp, this.createModelMask());
286
+ }
287
+ }
288
+ exports.MaskRealityModelByModelTool = MaskRealityModelByModelTool;
289
+ MaskRealityModelByModelTool.toolId = "MaskRealityModelByModel";
290
+ /** Tool to mask reality model by SubCategories
291
+ * @beta
292
+ */
293
+ class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {
294
+ static get minArgs() { return 0; }
295
+ static get maxArgs() { return 1; }
296
+ targetModelRequired() { return true; }
297
+ allowSelection() { return false; } // Need picking to get subcategory.
298
+ showPrompt() {
299
+ const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? "IdentifyRealityModel" : "IdentifyMaskSubCategory"}`;
300
+ core_frontend_1.IModelApp.notifications.outputPromptByKey(key);
301
+ }
302
+ createToolInstance() { return new MaskRealityModelBySubCategoryTool(); }
303
+ applyMask(vp) {
304
+ this.setRealityModelMask(vp, this.createSubCategoryMask());
305
+ }
306
+ }
307
+ exports.MaskRealityModelBySubCategoryTool = MaskRealityModelBySubCategoryTool;
308
+ MaskRealityModelBySubCategoryTool.toolId = "MaskRealityModelBySubCategory";
309
+ /** Tool to mask reality model by higher priority models.
310
+ * @beta
311
+ */
312
+ class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {
313
+ constructor() {
314
+ super(...arguments);
315
+ this._priority = 0;
316
+ }
317
+ static get minArgs() { return 0; }
318
+ static get maxArgs() { return 2; }
319
+ targetModelRequired() { return true; }
320
+ elementRequired() { return false; }
321
+ showPrompt() {
322
+ core_frontend_1.IModelApp.notifications.outputPromptByKey("FrontendDevTools:tools.SetHigherPriorityRealityModelMasking.Prompts.IdentifyRealityModel");
323
+ }
324
+ createToolInstance() { return new SetHigherPriorityRealityModelMasking(); }
325
+ applyMask(vp) {
326
+ const basePriority = this._targetMaskModel === vp.displayStyle.getOSMBuildingRealityModel() ? core_common_1.PlanarClipMaskPriority.GlobalRealityModel : core_common_1.PlanarClipMaskPriority.RealityModel;
327
+ this.setRealityModelMask(vp, core_common_1.PlanarClipMaskSettings.createByPriority(basePriority + this._priority, this._transparency));
328
+ }
329
+ async parseAndRun(...args) {
330
+ await super.parseAndRun(...args);
331
+ const priority = parseInt(args[0], 10);
332
+ this._priority = (priority === undefined || isNaN(priority)) ? 0 : priority;
333
+ return this.run();
334
+ }
335
+ }
336
+ exports.SetHigherPriorityRealityModelMasking = SetHigherPriorityRealityModelMasking;
337
+ SetHigherPriorityRealityModelMasking.toolId = "SetHigherPriorityRealityModelMasking";
338
+ /** Remove masks from reality model.
339
+ * @beta
340
+ */
341
+ class UnmaskRealityModelTool extends PlanarMaskBaseTool {
342
+ targetModelRequired() { return true; }
343
+ showPrompt() {
344
+ core_frontend_1.IModelApp.notifications.outputPromptByKey("FrontendDevTools:tools.UnmaskRealityModel.Prompts.IdentifyRealityModel");
345
+ }
346
+ createToolInstance() { return new UnmaskRealityModelTool(); }
347
+ applyMask(vp) {
348
+ const settings = core_common_1.PlanarClipMaskSettings.createForElementsOrSubCategories(core_common_1.PlanarClipMaskMode.IncludeSubCategories, this._acceptedSubCategoryIds, this._acceptedModelIds);
349
+ this.setRealityModelMask(vp, settings);
350
+ }
351
+ async onDataButtonDown(ev) {
352
+ const hit = await core_frontend_1.IModelApp.locateManager.doLocate(new core_frontend_1.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
353
+ if (hit === null || hit === void 0 ? void 0 : hit.modelId) {
354
+ const model = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId);
355
+ if (model)
356
+ model.planarClipMaskSettings = undefined;
357
+ else
358
+ hit.viewport.displayStyle.settings.planarClipMasks.delete(hit.modelId);
359
+ await this.onRestartTool();
360
+ }
361
+ return core_frontend_1.EventHandled.No;
362
+ }
363
+ }
364
+ exports.UnmaskRealityModelTool = UnmaskRealityModelTool;
365
+ UnmaskRealityModelTool.toolId = "UnmaskRealityModel";
366
+ //# sourceMappingURL=PlanarMaskTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanarMaskTools.js","sourceRoot":"","sources":["../../src/tools/PlanarMaskTools.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 { Id64String } from \"@itwin/core-bentley\";\r\nimport { PlanarClipMaskMode, PlanarClipMaskPriority, PlanarClipMaskSettings } from \"@itwin/core-common\";\r\nimport {\r\n BeButtonEvent, ContextRealityModelState, EventHandled, HitDetail, IModelApp, LocateFilterStatus, LocateResponse, PrimitiveTool, ScreenViewport, Tool,\r\n} from \"@itwin/core-frontend\";\r\n\r\n/** Set Map Masking by selected models.\r\n * @beta\r\n */\r\nexport class SetMapHigherPriorityMasking extends Tool {\r\n public static override toolId = \"SetMapHigherPriorityMask\";\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(transparency?: number): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return false;\r\n\r\n vp.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency } });\r\n vp.invalidateRenderPlan();\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const transparency = parseFloat(args[0]);\r\n return this.run((transparency !== undefined && transparency < 1.0) ? transparency : undefined);\r\n }\r\n}\r\n\r\n/** Unmask Mask.\r\n * @beta\r\n */\r\nexport class UnmaskMapTool extends Tool {\r\n public static override toolId = \"UnmaskMap\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 0; }\r\n\r\n public override async run(): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return false;\r\n\r\n vp.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None } });\r\n vp.invalidateRenderPlan();\r\n return true;\r\n }\r\n}\r\n\r\n/** Base class for the reality model planar masking tools.\r\n * @beta\r\n */\r\nexport abstract class PlanarMaskBaseTool extends PrimitiveTool {\r\n protected readonly _acceptedModelIds = new Set<Id64String>();\r\n protected readonly _acceptedSubCategoryIds = new Set<Id64String>();\r\n protected readonly _acceptedElementIds = new Set<Id64String>();\r\n protected _transparency?: number;\r\n protected _useSelection: boolean = false;\r\n protected _targetMaskModel?: Id64String | ContextRealityModelState;\r\n\r\n public override requireWriteableTarget(): boolean { return false; }\r\n public override async onPostInstall() { await super.onPostInstall(); this.setupAndPromptForNextAction(); }\r\n\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n private setupAndPromptForNextAction(): void {\r\n this._useSelection = (undefined !== this.targetView && this.iModel.selectionSet.isActive);\r\n this.initLocateElements(!this._useSelection || (this.targetModelRequired() && !this._targetMaskModel));\r\n IModelApp.locateManager.options.allowDecorations = true; // So we can select \"contextual\" reality models.\r\n this.showPrompt();\r\n }\r\n protected targetModelRequired(): boolean { return true; }\r\n protected elementRequired(): boolean { return true; }\r\n protected allowSelection(): boolean { return true; }\r\n protected abstract showPrompt(): void;\r\n protected abstract createToolInstance(): PlanarMaskBaseTool;\r\n protected abstract applyMask(vp: ScreenViewport): void;\r\n private clearIds() {\r\n this._acceptedElementIds.clear();\r\n this._acceptedModelIds.clear();\r\n }\r\n public override async exitTool() {\r\n await super.exitTool();\r\n this._transparency = undefined;\r\n }\r\n\r\n public async onRestartTool() {\r\n this.clearIds();\r\n this._acceptedSubCategoryIds.clear();\r\n const tool = this.createToolInstance();\r\n if (!await tool.run())\r\n await this.exitTool();\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const transparency = parseFloat(args[0]);\r\n this._transparency = (transparency !== undefined && transparency < 1.0) ? transparency : undefined;\r\n return this.run();\r\n }\r\n\r\n public override async onCleanup() {\r\n if (0 !== this._acceptedElementIds.size)\r\n this.iModel.hilited.setHilite(this._acceptedElementIds, false);\r\n this.clearIds();\r\n }\r\n\r\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\r\n if (!hit.modelId)\r\n return LocateFilterStatus.Reject;\r\n\r\n if (undefined === this._targetMaskModel && this.targetModelRequired()) {\r\n if (undefined !== hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId))\r\n return LocateFilterStatus.Accept;\r\n\r\n const model = this.iModel.models.getLoaded(hit.modelId)?.asSpatialModel;\r\n return model?.isRealityModel ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\r\n } else\r\n return (hit.isElementHit && !hit.isModelHit && !this._acceptedElementIds.has(hit.sourceId)) ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return EventHandled.No;\r\n\r\n if (undefined !== hit && undefined === this._targetMaskModel && this.targetModelRequired()) {\r\n if (hit.modelId) {\r\n this._targetMaskModel = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId) ?? hit.modelId;\r\n if (!this.elementRequired()) {\r\n this.applyMask(vp);\r\n await this.onRestartTool();\r\n }\r\n }\r\n } else if (this._useSelection && this.iModel.selectionSet.isActive) {\r\n const elements = await this.iModel.elements.getProps(this.iModel.selectionSet.elements);\r\n for (const element of elements) {\r\n if (element.id && element.model) {\r\n this._acceptedElementIds.add(element.id);\r\n this._acceptedModelIds.add(element.model);\r\n }\r\n }\r\n this.applyMask(vp);\r\n await this.exitTool();\r\n return EventHandled.No;\r\n } else if (undefined !== hit && hit.isElementHit) {\r\n const sourceId = hit.sourceId;\r\n if (!this._acceptedElementIds.has(sourceId)) {\r\n this._acceptedElementIds.add(sourceId);\r\n this._acceptedModelIds.add(hit.modelId!);\r\n if (hit.subCategoryId)\r\n this._acceptedSubCategoryIds.add(hit.subCategoryId);\r\n this.applyMask(vp);\r\n }\r\n }\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n protected createSubCategoryMask() {\r\n return PlanarClipMaskSettings.createForElementsOrSubCategories(PlanarClipMaskMode.IncludeSubCategories, this._acceptedSubCategoryIds, this._acceptedModelIds, this._transparency);\r\n }\r\n\r\n protected createElementMask(option: \"include\" | \"exclude\") {\r\n const mode = \"include\" === option ? PlanarClipMaskMode.IncludeElements : PlanarClipMaskMode.ExcludeElements;\r\n return PlanarClipMaskSettings.createForElementsOrSubCategories(mode, this._acceptedElementIds, this._acceptedModelIds, this._transparency);\r\n }\r\n\r\n protected createModelMask() {\r\n return PlanarClipMaskSettings.createForModels(this._acceptedModelIds, this._transparency);\r\n }\r\n\r\n protected setRealityModelMask(vp: ScreenViewport, mask: PlanarClipMaskSettings): void {\r\n if (typeof this._targetMaskModel === \"string\")\r\n vp.displayStyle.settings.planarClipMasks.set(this._targetMaskModel, mask);\r\n else if (undefined !== this._targetMaskModel)\r\n this._targetMaskModel.planarClipMaskSettings = mask;\r\n }\r\n}\r\n/** Tool to mask background map by elements\r\n * @beta\r\n */\r\nexport class MaskBackgroundMapByElementTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskBackgroundMapByElement\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return false; }\r\n protected showPrompt(): void {\r\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByElement.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\"}`);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByElementTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask(\"include\").toJSON() });\r\n }\r\n}\r\n/** Tool to mask background map by excluded elements\r\n * @beta\r\n */\r\nexport class MaskBackgroundMapByExcludedElementTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskBackgroundMapByExcludedElement\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return false; }\r\n protected showPrompt(): void {\r\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByExcludedElement.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\"}`);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByExcludedElementTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n vp.changeBackgroundMapProps({ planarClipMask: this.createElementMask(\"exclude\").toJSON() });\r\n }\r\n}\r\n\r\n/** Tool to mask background map by SubCategories\r\n * @beta\r\n */\r\nexport class MaskBackgroundMapBySubCategoryTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskBackgroundMapBySubCategory\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return false; }\r\n protected override allowSelection(): boolean { return false; } // Need picking to get subcategory.\r\n protected showPrompt(): void {\r\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.MaskBackgroundMapBySubCategory.Prompts.IdentifyMaskSubCategory\");\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapBySubCategoryTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n vp.changeBackgroundMapProps({ planarClipMask: this.createSubCategoryMask().toJSON() });\r\n }\r\n}\r\n\r\n/** Tool to mask background map by geometric models\r\n * @beta\r\n */\r\nexport class MaskBackgroundMapByModelTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskBackgroundMapByModel\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return false; }\r\n protected showPrompt(): void {\r\n IModelApp.notifications.outputPromptByKey(`FrontendDevTools:tools.MaskBackgroundMapByModel.Prompts.${this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskModel\"}`);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskBackgroundMapByModelTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n vp.changeBackgroundMapProps({ planarClipMask: this.createModelMask().toJSON() });\r\n }\r\n}\r\n\r\n/** Tool to mask reality model by elements\r\n * @beta\r\n */\r\nexport class MaskRealityModelByElementTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskRealityModelByElement\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return true; }\r\n\r\n protected showPrompt(): void {\r\n const key = `FrontendDevTools:tools.MaskRealityModelByElement.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\")}`;\r\n IModelApp.notifications.outputPromptByKey(key);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByElementTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n this.setRealityModelMask(vp, this.createElementMask(\"include\"));\r\n }\r\n}\r\n\r\n/** Tool to mask reality model by excluded elements\r\n * @beta\r\n */\r\nexport class MaskRealityModelByExcludedElementTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskRealityModelByExcludedElement\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return true; }\r\n\r\n protected showPrompt(): void {\r\n const key = `FrontendDevTools:tools.MaskRealityModelByExcludedElement.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskElement\")}`;\r\n IModelApp.notifications.outputPromptByKey(key);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByExcludedElementTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n this.setRealityModelMask(vp, this.createElementMask(\"exclude\"));\r\n }\r\n}\r\n\r\n/** Tool to mask reality model by geometric models\r\n * @beta\r\n */\r\n\r\nexport class MaskRealityModelByModelTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskRealityModelByModel\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n protected override targetModelRequired() { return true; }\r\n\r\n protected showPrompt(): void {\r\n const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : (this._useSelection ? \"AcceptSelection\" : \"IdentifyMaskModel\")}`;\r\n IModelApp.notifications.outputPromptByKey(key);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelByModelTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n this.setRealityModelMask(vp, this.createModelMask());\r\n }\r\n}\r\n\r\n/** Tool to mask reality model by SubCategories\r\n * @beta\r\n */\r\nexport class MaskRealityModelBySubCategoryTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"MaskRealityModelBySubCategory\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n protected override targetModelRequired() { return true; }\r\n protected override allowSelection(): boolean { return false; } // Need picking to get subcategory.\r\n\r\n protected showPrompt(): void {\r\n const key = `FrontendDevTools:tools.MaskRealityModelByModel.Prompts.${this._targetMaskModel === undefined ? \"IdentifyRealityModel\" : \"IdentifyMaskSubCategory\"}`;\r\n IModelApp.notifications.outputPromptByKey(key);\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new MaskRealityModelBySubCategoryTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n this.setRealityModelMask(vp, this.createSubCategoryMask());\r\n }\r\n}\r\n\r\n/** Tool to mask reality model by higher priority models.\r\n * @beta\r\n */\r\nexport class SetHigherPriorityRealityModelMasking extends PlanarMaskBaseTool {\r\n public static override toolId = \"SetHigherPriorityRealityModelMasking\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 2; }\r\n protected override targetModelRequired() { return true; }\r\n protected override elementRequired() { return false; }\r\n private _priority = 0;\r\n\r\n protected showPrompt(): void {\r\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.SetHigherPriorityRealityModelMasking.Prompts.IdentifyRealityModel\");\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new SetHigherPriorityRealityModelMasking(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n const basePriority = this._targetMaskModel === vp.displayStyle.getOSMBuildingRealityModel() ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n this.setRealityModelMask(vp, PlanarClipMaskSettings.createByPriority(basePriority + this._priority, this._transparency)!);\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n await super.parseAndRun(...args);\r\n const priority = parseInt(args[0], 10);\r\n this._priority = (priority === undefined || isNaN(priority)) ? 0 : priority;\r\n return this.run();\r\n }\r\n}\r\n\r\n/** Remove masks from reality model.\r\n * @beta\r\n */\r\nexport class UnmaskRealityModelTool extends PlanarMaskBaseTool {\r\n public static override toolId = \"UnmaskRealityModel\";\r\n protected override targetModelRequired() { return true; }\r\n\r\n protected showPrompt(): void {\r\n IModelApp.notifications.outputPromptByKey(\"FrontendDevTools:tools.UnmaskRealityModel.Prompts.IdentifyRealityModel\");\r\n }\r\n protected createToolInstance(): PlanarMaskBaseTool { return new UnmaskRealityModelTool(); }\r\n protected applyMask(vp: ScreenViewport): void {\r\n const settings = PlanarClipMaskSettings.createForElementsOrSubCategories(PlanarClipMaskMode.IncludeSubCategories, this._acceptedSubCategoryIds, this._acceptedModelIds);\r\n this.setRealityModelMask(vp, settings);\r\n }\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\r\n if (hit?.modelId) {\r\n const model = hit.viewport.displayStyle.contextRealityModelStates.find((x) => x.modelId === hit.modelId);\r\n if (model)\r\n model.planarClipMaskSettings = undefined;\r\n else\r\n hit.viewport.displayStyle.settings.planarClipMasks.delete(hit.modelId);\r\n\r\n await this.onRestartTool();\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n}\r\n"]}