@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.
- package/CHANGELOG.md +723 -0
- package/LICENSE.md +9 -0
- package/README.md +321 -0
- package/lib/ClipboardUtilities.d.ts +9 -0
- package/lib/ClipboardUtilities.d.ts.map +1 -0
- package/lib/ClipboardUtilities.js +27 -0
- package/lib/ClipboardUtilities.js.map +1 -0
- package/lib/FrontEndDevTools.d.ts +19 -0
- package/lib/FrontEndDevTools.d.ts.map +1 -0
- package/lib/FrontEndDevTools.js +203 -0
- package/lib/FrontEndDevTools.js.map +1 -0
- package/lib/effects/Convolution.d.ts +69 -0
- package/lib/effects/Convolution.d.ts.map +1 -0
- package/lib/effects/Convolution.js +166 -0
- package/lib/effects/Convolution.js.map +1 -0
- package/lib/effects/EffectTools.d.ts +34 -0
- package/lib/effects/EffectTools.d.ts.map +1 -0
- package/lib/effects/EffectTools.js +69 -0
- package/lib/effects/EffectTools.js.map +1 -0
- package/lib/effects/Explosion.d.ts +13 -0
- package/lib/effects/Explosion.d.ts.map +1 -0
- package/lib/effects/Explosion.js +168 -0
- package/lib/effects/Explosion.js.map +1 -0
- package/lib/effects/FlipImage.d.ts +31 -0
- package/lib/effects/FlipImage.d.ts.map +1 -0
- package/lib/effects/FlipImage.js +100 -0
- package/lib/effects/FlipImage.js.map +1 -0
- package/lib/effects/LensDistortion.d.ts +35 -0
- package/lib/effects/LensDistortion.d.ts.map +1 -0
- package/lib/effects/LensDistortion.js +110 -0
- package/lib/effects/LensDistortion.js.map +1 -0
- package/lib/effects/Random.d.ts +25 -0
- package/lib/effects/Random.d.ts.map +1 -0
- package/lib/effects/Random.js +50 -0
- package/lib/effects/Random.js.map +1 -0
- package/lib/effects/Saturation.d.ts +31 -0
- package/lib/effects/Saturation.d.ts.map +1 -0
- package/lib/effects/Saturation.js +86 -0
- package/lib/effects/Saturation.js.map +1 -0
- package/lib/effects/Snow.d.ts +77 -0
- package/lib/effects/Snow.d.ts.map +1 -0
- package/lib/effects/Snow.js +187 -0
- package/lib/effects/Snow.js.map +1 -0
- package/lib/effects/Vignette.d.ts +40 -0
- package/lib/effects/Vignette.d.ts.map +1 -0
- package/lib/effects/Vignette.js +109 -0
- package/lib/effects/Vignette.js.map +1 -0
- package/lib/frontend-devtools.d.ts +82 -0
- package/lib/frontend-devtools.d.ts.map +1 -0
- package/lib/frontend-devtools.js +98 -0
- package/lib/frontend-devtools.js.map +1 -0
- package/lib/public/locales/en/FrontendDevTools.json +449 -0
- package/lib/public/sprites/particle_explosion.png +0 -0
- package/lib/public/sprites/particle_flame.png +0 -0
- package/lib/public/sprites/particle_snow.png +0 -0
- package/lib/tools/AnimationIntervalTool.d.ts +16 -0
- package/lib/tools/AnimationIntervalTool.d.ts.map +1 -0
- package/lib/tools/AnimationIntervalTool.js +31 -0
- package/lib/tools/AnimationIntervalTool.js.map +1 -0
- package/lib/tools/ChangeUnitsTool.d.ts +16 -0
- package/lib/tools/ChangeUnitsTool.d.ts.map +1 -0
- package/lib/tools/ChangeUnitsTool.js +42 -0
- package/lib/tools/ChangeUnitsTool.js.map +1 -0
- package/lib/tools/ClipTools.d.ts +68 -0
- package/lib/tools/ClipTools.d.ts.map +1 -0
- package/lib/tools/ClipTools.js +162 -0
- package/lib/tools/ClipTools.js.map +1 -0
- package/lib/tools/DisplayStyleTools.d.ts +99 -0
- package/lib/tools/DisplayStyleTools.d.ts.map +1 -0
- package/lib/tools/DisplayStyleTools.js +242 -0
- package/lib/tools/DisplayStyleTools.js.map +1 -0
- package/lib/tools/EmphasizeElementsTool.d.ts +61 -0
- package/lib/tools/EmphasizeElementsTool.d.ts.map +1 -0
- package/lib/tools/EmphasizeElementsTool.js +155 -0
- package/lib/tools/EmphasizeElementsTool.js.map +1 -0
- package/lib/tools/FrustumDecoration.d.ts +58 -0
- package/lib/tools/FrustumDecoration.d.ts.map +1 -0
- package/lib/tools/FrustumDecoration.js +372 -0
- package/lib/tools/FrustumDecoration.js.map +1 -0
- package/lib/tools/InspectElementTool.d.ts +42 -0
- package/lib/tools/InspectElementTool.d.ts.map +1 -0
- package/lib/tools/InspectElementTool.js +185 -0
- package/lib/tools/InspectElementTool.js.map +1 -0
- package/lib/tools/MapLayerTool.d.ts +248 -0
- package/lib/tools/MapLayerTool.d.ts.map +1 -0
- package/lib/tools/MapLayerTool.js +462 -0
- package/lib/tools/MapLayerTool.js.map +1 -0
- package/lib/tools/MeasureTileLoadTime.d.ts +13 -0
- package/lib/tools/MeasureTileLoadTime.d.ts.map +1 -0
- package/lib/tools/MeasureTileLoadTime.js +61 -0
- package/lib/tools/MeasureTileLoadTime.js.map +1 -0
- package/lib/tools/ModelAppearanceTools.d.ts +87 -0
- package/lib/tools/ModelAppearanceTools.d.ts.map +1 -0
- package/lib/tools/ModelAppearanceTools.js +184 -0
- package/lib/tools/ModelAppearanceTools.js.map +1 -0
- package/lib/tools/PlanProjectionTools.d.ts +41 -0
- package/lib/tools/PlanProjectionTools.d.ts.map +1 -0
- package/lib/tools/PlanProjectionTools.js +150 -0
- package/lib/tools/PlanProjectionTools.js.map +1 -0
- package/lib/tools/PlanarMaskTools.d.ts +182 -0
- package/lib/tools/PlanarMaskTools.d.ts.map +1 -0
- package/lib/tools/PlanarMaskTools.js +366 -0
- package/lib/tools/PlanarMaskTools.js.map +1 -0
- package/lib/tools/ProjectExtents.d.ts +41 -0
- package/lib/tools/ProjectExtents.d.ts.map +1 -0
- package/lib/tools/ProjectExtents.js +108 -0
- package/lib/tools/ProjectExtents.js.map +1 -0
- package/lib/tools/RealityModelTools.d.ts +117 -0
- package/lib/tools/RealityModelTools.d.ts.map +1 -0
- package/lib/tools/RealityModelTools.js +269 -0
- package/lib/tools/RealityModelTools.js.map +1 -0
- package/lib/tools/RealityTransitionTool.d.ts +26 -0
- package/lib/tools/RealityTransitionTool.d.ts.map +1 -0
- package/lib/tools/RealityTransitionTool.js +110 -0
- package/lib/tools/RealityTransitionTool.js.map +1 -0
- package/lib/tools/RenderSystemTools.d.ts +46 -0
- package/lib/tools/RenderSystemTools.d.ts.map +1 -0
- package/lib/tools/RenderSystemTools.js +81 -0
- package/lib/tools/RenderSystemTools.js.map +1 -0
- package/lib/tools/RenderTargetTools.d.ts +101 -0
- package/lib/tools/RenderTargetTools.d.ts.map +1 -0
- package/lib/tools/RenderTargetTools.js +167 -0
- package/lib/tools/RenderTargetTools.js.map +1 -0
- package/lib/tools/ReportWebGLCompatibilityTool.d.ts +12 -0
- package/lib/tools/ReportWebGLCompatibilityTool.d.ts.map +1 -0
- package/lib/tools/ReportWebGLCompatibilityTool.js +31 -0
- package/lib/tools/ReportWebGLCompatibilityTool.js.map +1 -0
- package/lib/tools/SavedViews.d.ts +47 -0
- package/lib/tools/SavedViews.d.ts.map +1 -0
- package/lib/tools/SavedViews.js +137 -0
- package/lib/tools/SavedViews.js.map +1 -0
- package/lib/tools/SelectionTools.d.ts +17 -0
- package/lib/tools/SelectionTools.d.ts.map +1 -0
- package/lib/tools/SelectionTools.js +28 -0
- package/lib/tools/SelectionTools.js.map +1 -0
- package/lib/tools/SetGpuMemoryLimitTool.d.ts +16 -0
- package/lib/tools/SetGpuMemoryLimitTool.d.ts.map +1 -0
- package/lib/tools/SetGpuMemoryLimitTool.js +34 -0
- package/lib/tools/SetGpuMemoryLimitTool.js.map +1 -0
- package/lib/tools/SourceAspectIdTools.d.ts +41 -0
- package/lib/tools/SourceAspectIdTools.d.ts.map +1 -0
- package/lib/tools/SourceAspectIdTools.js +105 -0
- package/lib/tools/SourceAspectIdTools.js.map +1 -0
- package/lib/tools/TileRequestDecoration.d.ts +13 -0
- package/lib/tools/TileRequestDecoration.d.ts.map +1 -0
- package/lib/tools/TileRequestDecoration.js +84 -0
- package/lib/tools/TileRequestDecoration.js.map +1 -0
- package/lib/tools/TileTreeBoundsDecoration.d.ts +12 -0
- package/lib/tools/TileTreeBoundsDecoration.d.ts.map +1 -0
- package/lib/tools/TileTreeBoundsDecoration.js +75 -0
- package/lib/tools/TileTreeBoundsDecoration.js.map +1 -0
- package/lib/tools/ToolTipProvider.d.ts +16 -0
- package/lib/tools/ToolTipProvider.d.ts.map +1 -0
- package/lib/tools/ToolTipProvider.js +67 -0
- package/lib/tools/ToolTipProvider.js.map +1 -0
- package/lib/tools/ViewportTools.d.ts +194 -0
- package/lib/tools/ViewportTools.d.ts.map +1 -0
- package/lib/tools/ViewportTools.js +451 -0
- package/lib/tools/ViewportTools.js.map +1 -0
- package/lib/tools/parseArgs.d.ts +24 -0
- package/lib/tools/parseArgs.d.ts.map +1 -0
- package/lib/tools/parseArgs.js +52 -0
- package/lib/tools/parseArgs.js.map +1 -0
- package/lib/tools/parseBoolean.d.ts +9 -0
- package/lib/tools/parseBoolean.d.ts.map +1 -0
- package/lib/tools/parseBoolean.js +27 -0
- package/lib/tools/parseBoolean.js.map +1 -0
- package/lib/tools/parseToggle.d.ts +9 -0
- package/lib/tools/parseToggle.d.ts.map +1 -0
- package/lib/tools/parseToggle.js +26 -0
- package/lib/tools/parseToggle.js.map +1 -0
- package/lib/ui/Button.d.ts +30 -0
- package/lib/ui/Button.d.ts.map +1 -0
- package/lib/ui/Button.js +27 -0
- package/lib/ui/Button.js.map +1 -0
- package/lib/ui/CheckBox.d.ts +24 -0
- package/lib/ui/CheckBox.d.ts.map +1 -0
- package/lib/ui/CheckBox.js +28 -0
- package/lib/ui/CheckBox.js.map +1 -0
- package/lib/ui/ColorInput.d.ts +28 -0
- package/lib/ui/ColorInput.d.ts.map +1 -0
- package/lib/ui/ColorInput.js +54 -0
- package/lib/ui/ColorInput.js.map +1 -0
- package/lib/ui/ComboBox.d.ts +29 -0
- package/lib/ui/ComboBox.d.ts.map +1 -0
- package/lib/ui/ComboBox.js +43 -0
- package/lib/ui/ComboBox.js.map +1 -0
- package/lib/ui/DataList.d.ts +28 -0
- package/lib/ui/DataList.d.ts.map +1 -0
- package/lib/ui/DataList.js +40 -0
- package/lib/ui/DataList.js.map +1 -0
- package/lib/ui/NestedMenu.d.ts +20 -0
- package/lib/ui/NestedMenu.d.ts.map +1 -0
- package/lib/ui/NestedMenu.js +47 -0
- package/lib/ui/NestedMenu.js.map +1 -0
- package/lib/ui/NumericInput.d.ts +35 -0
- package/lib/ui/NumericInput.d.ts.map +1 -0
- package/lib/ui/NumericInput.js +60 -0
- package/lib/ui/NumericInput.js.map +1 -0
- package/lib/ui/RadioBox.d.ts +29 -0
- package/lib/ui/RadioBox.d.ts.map +1 -0
- package/lib/ui/RadioBox.js +77 -0
- package/lib/ui/RadioBox.js.map +1 -0
- package/lib/ui/Slider.d.ts +25 -0
- package/lib/ui/Slider.d.ts.map +1 -0
- package/lib/ui/Slider.js +33 -0
- package/lib/ui/Slider.js.map +1 -0
- package/lib/ui/TextBox.d.ts +33 -0
- package/lib/ui/TextBox.d.ts.map +1 -0
- package/lib/ui/TextBox.js +57 -0
- package/lib/ui/TextBox.js.map +1 -0
- package/lib/widgets/DiagnosticsPanel.d.ts +36 -0
- package/lib/widgets/DiagnosticsPanel.d.ts.map +1 -0
- package/lib/widgets/DiagnosticsPanel.js +76 -0
- package/lib/widgets/DiagnosticsPanel.js.map +1 -0
- package/lib/widgets/FpsTracker.d.ts +20 -0
- package/lib/widgets/FpsTracker.d.ts.map +1 -0
- package/lib/widgets/FpsTracker.js +57 -0
- package/lib/widgets/FpsTracker.js.map +1 -0
- package/lib/widgets/GpuProfiler.d.ts +17 -0
- package/lib/widgets/GpuProfiler.d.ts.map +1 -0
- package/lib/widgets/GpuProfiler.js +193 -0
- package/lib/widgets/GpuProfiler.js.map +1 -0
- package/lib/widgets/KeyinField.d.ts +62 -0
- package/lib/widgets/KeyinField.d.ts.map +1 -0
- package/lib/widgets/KeyinField.js +188 -0
- package/lib/widgets/KeyinField.js.map +1 -0
- package/lib/widgets/MemoryTracker.d.ts +28 -0
- package/lib/widgets/MemoryTracker.d.ts.map +1 -0
- package/lib/widgets/MemoryTracker.js +244 -0
- package/lib/widgets/MemoryTracker.js.map +1 -0
- package/lib/widgets/TileMemoryBreakdown.d.ts +31 -0
- package/lib/widgets/TileMemoryBreakdown.d.ts.map +1 -0
- package/lib/widgets/TileMemoryBreakdown.js +205 -0
- package/lib/widgets/TileMemoryBreakdown.js.map +1 -0
- package/lib/widgets/TileStatisticsTracker.d.ts +22 -0
- package/lib/widgets/TileStatisticsTracker.d.ts.map +1 -0
- package/lib/widgets/TileStatisticsTracker.js +143 -0
- package/lib/widgets/TileStatisticsTracker.js.map +1 -0
- package/lib/widgets/ToolSettingsTracker.d.ts +10 -0
- package/lib/widgets/ToolSettingsTracker.d.ts.map +1 -0
- package/lib/widgets/ToolSettingsTracker.js +182 -0
- package/lib/widgets/ToolSettingsTracker.js.map +1 -0
- 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"]}
|