@itwin/frontend-devtools 3.4.0-dev.8 → 3.5.0-dev.4
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 +24 -1
- package/lib/cjs/tools/FrustumDecoration.d.ts.map +1 -1
- package/lib/cjs/tools/FrustumDecoration.js +4 -1
- package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
- package/lib/cjs/tools/MeasureTileLoadTime.d.ts.map +1 -1
- package/lib/cjs/tools/MeasureTileLoadTime.js +4 -1
- package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/cjs/tools/PlanarMaskTools.d.ts.map +1 -1
- package/lib/cjs/tools/PlanarMaskTools.js +4 -1
- package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
- package/lib/cjs/tools/SelectionTools.d.ts.map +1 -1
- package/lib/cjs/tools/SelectionTools.js.map +1 -1
- package/lib/cjs/ui/Button.d.ts.map +1 -1
- package/lib/cjs/ui/Button.js.map +1 -1
- package/lib/cjs/ui/ColorInput.d.ts.map +1 -1
- package/lib/cjs/ui/ColorInput.js.map +1 -1
- package/lib/cjs/ui/NestedMenu.d.ts.map +1 -1
- package/lib/cjs/ui/NestedMenu.js.map +1 -1
- package/lib/cjs/ui/NumericInput.d.ts.map +1 -1
- package/lib/cjs/ui/NumericInput.js.map +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.js +47 -17
- package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/esm/tools/FrustumDecoration.d.ts.map +1 -1
- package/lib/esm/tools/FrustumDecoration.js +4 -1
- package/lib/esm/tools/FrustumDecoration.js.map +1 -1
- package/lib/esm/tools/MeasureTileLoadTime.d.ts.map +1 -1
- package/lib/esm/tools/MeasureTileLoadTime.js +4 -1
- package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/esm/tools/PlanarMaskTools.d.ts.map +1 -1
- package/lib/esm/tools/PlanarMaskTools.js +4 -1
- package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
- package/lib/esm/tools/SelectionTools.d.ts.map +1 -1
- package/lib/esm/tools/SelectionTools.js.map +1 -1
- package/lib/esm/ui/Button.d.ts.map +1 -1
- package/lib/esm/ui/Button.js.map +1 -1
- package/lib/esm/ui/ColorInput.d.ts.map +1 -1
- package/lib/esm/ui/ColorInput.js.map +1 -1
- package/lib/esm/ui/NestedMenu.d.ts.map +1 -1
- package/lib/esm/ui/NestedMenu.js.map +1 -1
- package/lib/esm/ui/NumericInput.d.ts.map +1 -1
- package/lib/esm/ui/NumericInput.js.map +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.d.ts.map +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.js +47 -17
- package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumericInput.d.ts","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,aAAa;AACb,oBAAY,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEnF,aAAa;AACb,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,aAAa;AACb,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,GAAE,OAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"NumericInput.d.ts","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,aAAa;AACb,oBAAY,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEnF,aAAa;AACb,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,aAAa;AACb,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,GAAE,OAAe,GAAG,gBAAgB,CAiCxG;AAED,aAAa;AACb,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,aAAa;AACb,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,aAAa;AACb,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,CAoB9F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAwB/F,aAAa;AACb,SAAgB,kBAAkB,CAAC,KAAwB,EAAE,WAAoB,KAAK;IACpF,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;IACtB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAErC,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI;YACF,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,EAAE;SACH;IACH,CAAC,CAAC;IAEF,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../src/ui/NumericInput.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 Controls\r\n */\r\n\r\n/** @alpha */\r\nexport type NumericInputHandler = (value: number, input: HTMLInputElement) => void;\r\n\r\n/** @alpha */\r\nexport interface NumericInputProps {\r\n handler: NumericInputHandler;\r\n id?: string;\r\n parent?: HTMLElement;\r\n value: number;\r\n display?: \"inline\" | \"none\" | \"block\";\r\n disabled?: boolean;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n tooltip?: string;\r\n parseAsFloat?: true;\r\n}\r\n\r\n/** @alpha */\r\nexport function createNumericInput(props: NumericInputProps, useFloat: boolean = false): HTMLInputElement {\r\n const input = document.createElement(\"input\");\r\n input.type = \"number\";\r\n input.value = props.value.toString();\r\n\r\n input.onchange = () => {\r\n try {\r\n const value = useFloat ? parseFloat(input.value) : parseInt(input.value, 10);\r\n if (!Number.isNaN(value))\r\n props.handler(value, input);\r\n } catch (_ex) {\r\n //\r\n }\r\n };\r\n\r\n if (undefined !== props.id)\r\n input.id = props.id;\r\n if (undefined !== props.display)\r\n input.style.display = props.display;\r\n if (undefined !== props.min)\r\n input.min = props.min.toString();\r\n if (undefined !== props.max)\r\n input.max = props.max.toString();\r\n if (undefined !== props.step)\r\n input.step = props.step.toString();\r\n if (undefined !== props.tooltip)\r\n input.title = props.tooltip;\r\n if (undefined !== props.disabled)\r\n input.disabled = props.disabled;\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(input);\r\n\r\n return input;\r\n}\r\n\r\n/** @alpha */\r\nexport interface LabeledNumericInputProps extends NumericInputProps {\r\n name: string;\r\n id: string;\r\n}\r\n\r\n/** @alpha */\r\nexport interface LabeledNumericInput {\r\n input: HTMLInputElement;\r\n div: HTMLDivElement;\r\n label: HTMLLabelElement;\r\n}\r\n\r\n/** @alpha */\r\nexport function createLabeledNumericInput(props: LabeledNumericInputProps): LabeledNumericInput {\r\n const div = document.createElement(\"div\");\r\n\r\n const label = document.createElement(\"label\");\r\n label.htmlFor = props.id;\r\n label.innerText = props.name;\r\n div.appendChild(label);\r\n\r\n const inputProps = { ...props };\r\n inputProps.parent = div;\r\n inputProps.display = \"inline\";\r\n const input = createNumericInput(inputProps, true === props.parseAsFloat);\r\n\r\n if (undefined !== props.parent)\r\n props.parent.appendChild(div);\r\n\r\n if (undefined !== props.tooltip)\r\n div.title = props.tooltip;\r\n\r\n return { label, div, input };\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSettingsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKzF;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAS;gBAExB,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"ToolSettingsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"AAUA,OAAO,EAA2C,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKzF;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAS;gBAExB,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ;IAwM9C,OAAO,IAAI,IAAI;CACvB"}
|
|
@@ -34,8 +34,11 @@ class ToolSettingsTracker {
|
|
|
34
34
|
name: "Preserve World Up When Rotating",
|
|
35
35
|
id: "ts_preserveWorldUp",
|
|
36
36
|
isChecked: core_frontend_1.ToolSettings.preserveWorldUp,
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
handler: (_cb) => {
|
|
38
|
+
core_frontend_1.ToolSettings.preserveWorldUp = !core_frontend_1.ToolSettings.preserveWorldUp;
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
40
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
41
|
+
},
|
|
39
42
|
});
|
|
40
43
|
div.style.textAlign = "left";
|
|
41
44
|
// We use a static so the expand/collapse state persists after closing and reopening the drop-down.
|
|
@@ -51,8 +54,11 @@ class ToolSettingsTracker {
|
|
|
51
54
|
min: 0,
|
|
52
55
|
step: 1,
|
|
53
56
|
value: core_frontend_1.ScreenViewport.animation.time.normal.milliseconds,
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
handler: (value, _input) => {
|
|
58
|
+
core_frontend_1.ScreenViewport.animation.time.normal = core_bentley_1.BeDuration.fromMilliseconds(value);
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
60
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
61
|
+
},
|
|
56
62
|
});
|
|
57
63
|
div.style.display = "block";
|
|
58
64
|
div.style.textAlign = "left";
|
|
@@ -68,8 +74,11 @@ class ToolSettingsTracker {
|
|
|
68
74
|
min: 0,
|
|
69
75
|
step: 0.01,
|
|
70
76
|
value: core_frontend_1.ToolSettings.viewToolPickRadiusInches,
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
handler: (value, _input) => {
|
|
78
|
+
core_frontend_1.ToolSettings.viewToolPickRadiusInches = value;
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
80
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
81
|
+
},
|
|
73
82
|
parseAsFloat: true,
|
|
74
83
|
}, true);
|
|
75
84
|
div.style.display = "block";
|
|
@@ -80,8 +89,11 @@ class ToolSettingsTracker {
|
|
|
80
89
|
name: "Walk Enforce Z Up",
|
|
81
90
|
id: "ts_walkEnforceZUp",
|
|
82
91
|
isChecked: core_frontend_1.ToolSettings.walkEnforceZUp,
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
handler: (_cb) => {
|
|
93
|
+
core_frontend_1.ToolSettings.walkEnforceZUp = !core_frontend_1.ToolSettings.walkEnforceZUp;
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
95
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
96
|
+
},
|
|
85
97
|
});
|
|
86
98
|
div.style.display = "block";
|
|
87
99
|
div.style.textAlign = "left";
|
|
@@ -96,8 +108,11 @@ class ToolSettingsTracker {
|
|
|
96
108
|
min: 0,
|
|
97
109
|
step: 0.1,
|
|
98
110
|
value: core_frontend_1.ToolSettings.walkCameraAngle.degrees,
|
|
99
|
-
|
|
100
|
-
|
|
111
|
+
handler: (value, _input) => {
|
|
112
|
+
core_frontend_1.ToolSettings.walkCameraAngle.setDegrees(value);
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
114
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
115
|
+
},
|
|
101
116
|
parseAsFloat: true,
|
|
102
117
|
}, true);
|
|
103
118
|
div.style.display = "block";
|
|
@@ -113,8 +128,11 @@ class ToolSettingsTracker {
|
|
|
113
128
|
min: 0,
|
|
114
129
|
step: 0.1,
|
|
115
130
|
value: core_frontend_1.ToolSettings.walkVelocity,
|
|
116
|
-
|
|
117
|
-
|
|
131
|
+
handler: (value, _input) => {
|
|
132
|
+
core_frontend_1.ToolSettings.walkVelocity = value;
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
134
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
135
|
+
},
|
|
118
136
|
parseAsFloat: true,
|
|
119
137
|
}, true);
|
|
120
138
|
div.style.display = "block";
|
|
@@ -130,8 +148,11 @@ class ToolSettingsTracker {
|
|
|
130
148
|
min: 0,
|
|
131
149
|
step: 0.025,
|
|
132
150
|
value: core_frontend_1.ToolSettings.wheelZoomBumpDistance,
|
|
133
|
-
|
|
134
|
-
|
|
151
|
+
handler: (value, _input) => {
|
|
152
|
+
core_frontend_1.ToolSettings.wheelZoomBumpDistance = value;
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
154
|
+
core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
155
|
+
},
|
|
135
156
|
parseAsFloat: true,
|
|
136
157
|
}, true);
|
|
137
158
|
div.style.display = "block";
|
|
@@ -147,7 +168,10 @@ class ToolSettingsTracker {
|
|
|
147
168
|
min: 1.0,
|
|
148
169
|
step: 0.025,
|
|
149
170
|
value: core_frontend_1.ToolSettings.wheelZoomRatio,
|
|
150
|
-
handler: async (value, _input) => {
|
|
171
|
+
handler: async (value, _input) => {
|
|
172
|
+
core_frontend_1.ToolSettings.wheelZoomRatio = value;
|
|
173
|
+
return core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
174
|
+
},
|
|
151
175
|
parseAsFloat: true,
|
|
152
176
|
}, true);
|
|
153
177
|
div.style.display = "block";
|
|
@@ -156,7 +180,10 @@ class ToolSettingsTracker {
|
|
|
156
180
|
id: "num_inertiaDamping",
|
|
157
181
|
parent: settingsDiv,
|
|
158
182
|
value: core_frontend_1.ToolSettings.viewingInertia.damping,
|
|
159
|
-
handler: async (value, _) => {
|
|
183
|
+
handler: async (value, _) => {
|
|
184
|
+
core_frontend_1.ToolSettings.viewingInertia.damping = value;
|
|
185
|
+
return core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
186
|
+
},
|
|
160
187
|
min: 0,
|
|
161
188
|
max: 1,
|
|
162
189
|
step: 0.05,
|
|
@@ -167,7 +194,10 @@ class ToolSettingsTracker {
|
|
|
167
194
|
id: "num_inertiaDuration",
|
|
168
195
|
parent: settingsDiv,
|
|
169
196
|
value: core_frontend_1.ToolSettings.viewingInertia.duration.milliseconds / 1000,
|
|
170
|
-
handler: async (value, _) => {
|
|
197
|
+
handler: async (value, _) => {
|
|
198
|
+
core_frontend_1.ToolSettings.viewingInertia.duration = core_bentley_1.BeDuration.fromMilliseconds(value * 1000);
|
|
199
|
+
return core_frontend_1.IModelApp.toolAdmin.exitViewTool();
|
|
200
|
+
},
|
|
171
201
|
min: 0,
|
|
172
202
|
max: 10,
|
|
173
203
|
step: 0.5,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolSettingsTracker.js","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { BeDuration } from \"@itwin/core-bentley\";\r\nimport { IModelApp, ScreenViewport, ToolSettings, Viewport } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { createNestedMenu } from \"../ui/NestedMenu\";\r\nimport { createLabeledNumericInput, createNumericInput } from \"../ui/NumericInput\";\r\n\r\n/** Allows the global settings controlling the behavior of viewing tools to be customized.\r\n * @alpha\r\n */\r\nexport class ToolSettingsTracker {\r\n private static _expandToolSettings = false;\r\n\r\n public constructor(parent: HTMLElement, _vp: Viewport) {\r\n const settingsDiv = document.createElement(\"div\");\r\n settingsDiv.style.display = \"block\";\r\n settingsDiv.style.textAlign = \"left\";\r\n\r\n createNestedMenu({\r\n label: \"Tool Settings\",\r\n parent,\r\n expand: ToolSettingsTracker._expandToolSettings,\r\n handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded,\r\n body: settingsDiv,\r\n });\r\n\r\n let div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n createCheckBox({\r\n parent: div,\r\n name: \"Preserve World Up When Rotating\",\r\n id: \"ts_preserveWorldUp\",\r\n isChecked: ToolSettings.preserveWorldUp,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (_cb) => { ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp; IModelApp.toolAdmin.exitViewTool(); },\r\n });\r\n div.style.textAlign = \"left\";\r\n\r\n // We use a static so the expand/collapse state persists after closing and reopening the drop-down.\r\n settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? \"block\" : \"none\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n let label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Animation Duration (ms): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_animationTime\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_animationTime\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 1,\r\n value: ScreenViewport.animation.time.normal.milliseconds,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (value, _input) => { ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value); IModelApp.toolAdmin.exitViewTool(); },\r\n });\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Pick Radius (inches): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_viewToolPickRadiusInches\";\r\n label.innerText = \"Pick Radius (inches): \";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_viewToolPickRadiusInches\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.01,\r\n value: ToolSettings.viewToolPickRadiusInches,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (value, _input) => { ToolSettings.viewToolPickRadiusInches = value; IModelApp.toolAdmin.exitViewTool(); },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n createCheckBox({\r\n parent: div,\r\n name: \"Walk Enforce Z Up\",\r\n id: \"ts_walkEnforceZUp\",\r\n isChecked: ToolSettings.walkEnforceZUp,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (_cb) => { ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp; IModelApp.toolAdmin.exitViewTool(); },\r\n });\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Camera Angle (degrees): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_walkCameraAngle\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_walkCameraAngle\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.1,\r\n value: ToolSettings.walkCameraAngle.degrees,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (value, _input) => { ToolSettings.walkCameraAngle.setDegrees(value); IModelApp.toolAdmin.exitViewTool(); },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Velocity (meters per second): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_walkVelocity\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_walkVelocity\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.1,\r\n value: ToolSettings.walkVelocity,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (value, _input) => { ToolSettings.walkVelocity = value; IModelApp.toolAdmin.exitViewTool(); },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Bump Distance (meters): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_wheelZoomBumpDistance\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_wheelZoomBumpDistance\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.025,\r\n value: ToolSettings.wheelZoomBumpDistance,\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n handler: (value, _input) => { ToolSettings.wheelZoomBumpDistance = value; IModelApp.toolAdmin.exitViewTool(); },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Ratio: \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_wheelZoomRatio\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_wheelZoomRatio\",\r\n display: \"inline\",\r\n min: 1.0,\r\n step: 0.025,\r\n value: ToolSettings.wheelZoomRatio,\r\n handler: async (value, _input) => { ToolSettings.wheelZoomRatio = value; return IModelApp.toolAdmin.exitViewTool(); },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n createLabeledNumericInput({\r\n id: \"num_inertiaDamping\",\r\n parent: settingsDiv,\r\n value: ToolSettings.viewingInertia.damping,\r\n handler: async (value, _) => { ToolSettings.viewingInertia.damping = value; return IModelApp.toolAdmin.exitViewTool(); },\r\n min: 0,\r\n max: 1,\r\n step: 0.05,\r\n parseAsFloat: true,\r\n name: \"Inertial damping: \",\r\n });\r\n createLabeledNumericInput({\r\n id: \"num_inertiaDuration\",\r\n parent: settingsDiv,\r\n value: ToolSettings.viewingInertia.duration.milliseconds / 1000,\r\n handler: async (value, _) => { ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000); return IModelApp.toolAdmin.exitViewTool(); },\r\n min: 0,\r\n max: 10,\r\n step: 0.5,\r\n parseAsFloat: true,\r\n name: \"Inertial duration (seconds): \",\r\n });\r\n }\r\n\r\n public dispose(): void { }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ToolSettingsTracker.js","sourceRoot":"","sources":["../../../src/widgets/ToolSettingsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { BeDuration } from \"@itwin/core-bentley\";\r\nimport { IModelApp, ScreenViewport, ToolSettings, Viewport } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { createNestedMenu } from \"../ui/NestedMenu\";\r\nimport { createLabeledNumericInput, createNumericInput } from \"../ui/NumericInput\";\r\n\r\n/** Allows the global settings controlling the behavior of viewing tools to be customized.\r\n * @alpha\r\n */\r\nexport class ToolSettingsTracker {\r\n private static _expandToolSettings = false;\r\n\r\n public constructor(parent: HTMLElement, _vp: Viewport) {\r\n const settingsDiv = document.createElement(\"div\");\r\n settingsDiv.style.display = \"block\";\r\n settingsDiv.style.textAlign = \"left\";\r\n\r\n createNestedMenu({\r\n label: \"Tool Settings\",\r\n parent,\r\n expand: ToolSettingsTracker._expandToolSettings,\r\n handler: (expanded) => ToolSettingsTracker._expandToolSettings = expanded,\r\n body: settingsDiv,\r\n });\r\n\r\n let div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n createCheckBox({\r\n parent: div,\r\n name: \"Preserve World Up When Rotating\",\r\n id: \"ts_preserveWorldUp\",\r\n isChecked: ToolSettings.preserveWorldUp,\r\n handler: (_cb) => {\r\n ToolSettings.preserveWorldUp = !ToolSettings.preserveWorldUp;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n });\r\n div.style.textAlign = \"left\";\r\n\r\n // We use a static so the expand/collapse state persists after closing and reopening the drop-down.\r\n settingsDiv.style.display = ToolSettingsTracker._expandToolSettings ? \"block\" : \"none\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n let label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Animation Duration (ms): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_animationTime\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_animationTime\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 1,\r\n value: ScreenViewport.animation.time.normal.milliseconds,\r\n handler: (value, _input) => {\r\n ScreenViewport.animation.time.normal = BeDuration.fromMilliseconds(value);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n });\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Pick Radius (inches): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_viewToolPickRadiusInches\";\r\n label.innerText = \"Pick Radius (inches): \";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_viewToolPickRadiusInches\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.01,\r\n value: ToolSettings.viewToolPickRadiusInches,\r\n handler: (value, _input) => {\r\n ToolSettings.viewToolPickRadiusInches = value;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n createCheckBox({\r\n parent: div,\r\n name: \"Walk Enforce Z Up\",\r\n id: \"ts_walkEnforceZUp\",\r\n isChecked: ToolSettings.walkEnforceZUp,\r\n handler: (_cb) => {\r\n ToolSettings.walkEnforceZUp = !ToolSettings.walkEnforceZUp;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n });\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Camera Angle (degrees): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_walkCameraAngle\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_walkCameraAngle\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.1,\r\n value: ToolSettings.walkCameraAngle.degrees,\r\n handler: (value, _input) => {\r\n ToolSettings.walkCameraAngle.setDegrees(value);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Walk Velocity (meters per second): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_walkVelocity\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_walkVelocity\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.1,\r\n value: ToolSettings.walkVelocity,\r\n handler: (value, _input) => {\r\n ToolSettings.walkVelocity = value;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Bump Distance (meters): \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_wheelZoomBumpDistance\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_wheelZoomBumpDistance\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 0.025,\r\n value: ToolSettings.wheelZoomBumpDistance,\r\n handler: (value, _input) => {\r\n ToolSettings.wheelZoomBumpDistance = value;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n div = IModelApp.makeHTMLElement(\"div\", { parent: settingsDiv });\r\n label = IModelApp.makeHTMLElement(\"label\", { innerText: \"Wheel Zoom Ratio: \", parent: div });\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"ts_wheelZoomRatio\";\r\n createNumericInput({\r\n parent: div,\r\n id: \"ts_wheelZoomRatio\",\r\n display: \"inline\",\r\n min: 1.0,\r\n step: 0.025,\r\n value: ToolSettings.wheelZoomRatio,\r\n handler: async (value, _input) => {\r\n ToolSettings.wheelZoomRatio = value;\r\n return IModelApp.toolAdmin.exitViewTool();\r\n },\r\n parseAsFloat: true,\r\n }, true);\r\n div.style.display = \"block\";\r\n div.style.textAlign = \"left\";\r\n\r\n createLabeledNumericInput({\r\n id: \"num_inertiaDamping\",\r\n parent: settingsDiv,\r\n value: ToolSettings.viewingInertia.damping,\r\n handler: async (value, _) => {\r\n ToolSettings.viewingInertia.damping = value;\r\n return IModelApp.toolAdmin.exitViewTool();\r\n },\r\n min: 0,\r\n max: 1,\r\n step: 0.05,\r\n parseAsFloat: true,\r\n name: \"Inertial damping: \",\r\n });\r\n createLabeledNumericInput({\r\n id: \"num_inertiaDuration\",\r\n parent: settingsDiv,\r\n value: ToolSettings.viewingInertia.duration.milliseconds / 1000,\r\n handler: async (value, _) => {\r\n ToolSettings.viewingInertia.duration = BeDuration.fromMilliseconds(value * 1000);\r\n return IModelApp.toolAdmin.exitViewTool();\r\n },\r\n min: 0,\r\n max: 10,\r\n step: 0.5,\r\n parseAsFloat: true,\r\n name: \"Inertial duration (seconds): \",\r\n });\r\n }\r\n\r\n public dispose(): void { }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrustumDecoration.d.ts","sourceRoot":"","sources":["../../../src/tools/FrustumDecoration.ts"],"names":[],"mappings":"AAWA,OAAO,EACQ,eAAe,EAAE,SAAS,EAA0C,IAAI,EAAE,QAAQ,EAChG,MAAM,sBAAsB,CAAC;AAG9B,UAAU,wBAAwB;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAwID;;;;;;;GAOG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAoB;IAEjD,OAAO;IAIP,0HAA0H;IAC1H,SAAgB,oBAAoB,QAAQ;IAErC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAmB;IAE5C,oDAAoD;WACtC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAM5E,yDAAyD;WAC3C,OAAO,IAAI,IAAI;IAQ7B,WAAkB,SAAS,YAAuD;CACnF;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,IAAI;IACjD,OAAuB,MAAM,SAA2B;IACxD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,2BAA2B,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB5G,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAgBvE;AA0FD;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,IAAI;IACrD,OAAuB,MAAM,SAA+B;IAC5D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBvC,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE;
|
|
1
|
+
{"version":3,"file":"FrustumDecoration.d.ts","sourceRoot":"","sources":["../../../src/tools/FrustumDecoration.ts"],"names":[],"mappings":"AAWA,OAAO,EACQ,eAAe,EAAE,SAAS,EAA0C,IAAI,EAAE,QAAQ,EAChG,MAAM,sBAAsB,CAAC;AAG9B,UAAU,wBAAwB;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAwID;;;;;;;GAOG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAoB;IAEjD,OAAO;IAIP,0HAA0H;IAC1H,SAAgB,oBAAoB,QAAQ;IAErC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAmB;IAE5C,oDAAoD;WACtC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAM5E,yDAAyD;WAC3C,OAAO,IAAI,IAAI;IAQ7B,WAAkB,SAAS,YAAuD;CACnF;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,IAAI;IACjD,OAAuB,MAAM,SAA2B;IACxD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,2BAA2B,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB5G,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAgBvE;AA0FD;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,IAAI;IACrD,OAAuB,MAAM,SAA+B;IAC5D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBvC,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE;AAwED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,IAAI;IAC/C,OAAuB,MAAM,SAAyB;IACtD,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvC,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE"}
|
|
@@ -296,7 +296,10 @@ class ShadowFrustumDecoration {
|
|
|
296
296
|
this._targetVp = vp;
|
|
297
297
|
const removeDecorator = IModelApp.viewManager.addDecorator(this);
|
|
298
298
|
const removeOnRender = vp.onRender.addListener((_) => this.onRender());
|
|
299
|
-
this._cleanup = () => {
|
|
299
|
+
this._cleanup = () => {
|
|
300
|
+
removeDecorator();
|
|
301
|
+
removeOnRender();
|
|
302
|
+
};
|
|
300
303
|
IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);
|
|
301
304
|
}
|
|
302
305
|
stop() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrustumDecoration.js","sourceRoot":"","sources":["../../../src/tools/FrustumDecoration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { Map4d, Point3d } from \"@itwin/core-geometry\";\r\nimport { ColorByName, ColorDef, Frustum, LinePixels, Npc } from \"@itwin/core-common\";\r\nimport {\r\n CoordSystem, DecorateContext, Decorator, GraphicBuilder, GraphicType, IModelApp, Tool, Viewport, ViewState, ViewState3d,\r\n} from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\ninterface FrustumDecorationOptions {\r\n showPreloadFrustum?: boolean;\r\n showBackgroundIntersections?: boolean;\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum.\r\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\r\n * Options for doing so include:\r\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\r\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\r\n */\r\nclass FrustumDecoration {\r\n private readonly _worldFrustum: Frustum;\r\n private readonly _adjustedWorldFrustum: Frustum;\r\n private readonly _preloadFrustum: Frustum;\r\n private readonly _npcFrustum: Frustum;\r\n private readonly _worldToNpcMap: Map4d;\r\n private readonly _eyePoint: Point3d;\r\n private readonly _focalPlane: number;\r\n private readonly _isCameraOn: boolean;\r\n\r\n private constructor(vp: Viewport, view: ViewState3d, private readonly _options?: FrustumDecorationOptions) {\r\n this._worldFrustum = vp.getFrustum(CoordSystem.World, false);\r\n this._adjustedWorldFrustum = vp.getFrustum(CoordSystem.World, true);\r\n this._preloadFrustum = vp.viewingSpace.getPreloadFrustum();\r\n this._npcFrustum = vp.getFrustum(CoordSystem.Npc, true);\r\n this._worldToNpcMap = vp.viewingSpace.worldToNpcMap.clone();\r\n this._eyePoint = view.camera.getEyePoint().clone();\r\n this._focalPlane = vp.worldToNpc(view.getTargetPoint()).z;\r\n this._isCameraOn = vp.isCameraOn;\r\n }\r\n\r\n public static create(vp: Viewport, options?: FrustumDecorationOptions): FrustumDecoration | undefined {\r\n const view = vp.view.isSpatialView() ? vp.view : undefined;\r\n return undefined !== view ? new FrustumDecoration(vp, view, options) : undefined;\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n\r\n if (this._isCameraOn)\r\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, this._npcFrustum, this._worldToNpcMap, this._eyePoint, this._focalPlane, context.viewport);\r\n\r\n FrustumDecoration.drawFrustumBox(builder, this._worldFrustum, false, context.viewport); // show original frustum...\r\n FrustumDecoration.drawFrustumBox(builder, this._adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\r\n const options = this._options;\r\n if (options !== undefined) {\r\n if (options.showPreloadFrustum)\r\n FrustumDecoration.drawPreloadFrustum(builder, this._preloadFrustum);\r\n\r\n if (options?.showBackgroundIntersections) {\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (backgroundMapGeometry)\r\n backgroundMapGeometry.addFrustumDecorations(builder, this._adjustedWorldFrustum);\r\n }\r\n }\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static drawPreloadFrustum(builder: GraphicBuilder, frustum: Frustum) {\r\n const preloadColor = ColorDef.create(ColorByName.coral);\r\n builder.setSymbology(preloadColor, preloadColor, 1, 2);\r\n builder.addFrustum(frustum);\r\n }\r\n\r\n public static drawFrustumBox(builder: GraphicBuilder, frustum: Frustum, adjustedBox: boolean, vp: Viewport): void {\r\n const backPts = this.getPlanePts(frustum.points, false); // back plane\r\n const frontPts = this.getPlanePts(frustum.points, true); // front plane\r\n\r\n const bgColor = vp.view.backgroundColor;\r\n const backAndBottomColor = ColorDef.red.adjustedForContrast(bgColor);\r\n const frontAndTopLeftColor = ColorDef.blue.adjustedForContrast(bgColor);\r\n const frontAndTopRightColor = ColorDef.green.adjustedForContrast(bgColor);\r\n const edgeWeight = adjustedBox ? 2 : 1;\r\n const edgeStyle = adjustedBox ? LinePixels.Solid : LinePixels.Code2;\r\n\r\n // Back plane\r\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(backPts);\r\n\r\n // Front plane\r\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(frontPts);\r\n\r\n // Bottom edge\r\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 0));\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 1));\r\n\r\n // Top edge\r\n builder.setSymbology(frontAndTopRightColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 2));\r\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 3));\r\n }\r\n\r\n private static getEdgePts(startPts: Point3d[], endPts: Point3d[], index: number): Point3d[] {\r\n return [\r\n startPts[index],\r\n endPts[index],\r\n ];\r\n }\r\n\r\n private static getPlanePts(frustPts: Point3d[], front: boolean): Point3d[] {\r\n const baseIndex = front ? Npc._001 : Npc._000;\r\n const planePts = [\r\n frustPts[baseIndex + Npc._000],\r\n frustPts[baseIndex + Npc._100],\r\n frustPts[baseIndex + Npc._110],\r\n frustPts[baseIndex + Npc._010],\r\n ];\r\n\r\n planePts.push(planePts[0]);\r\n return planePts;\r\n }\r\n\r\n public static drawEyePositionAndFocalPlane(builder: GraphicBuilder, npcFrustum: Frustum, worldToNpcMap: Map4d, eyePoint: Point3d, focusPlaneNpc: number, vp: Viewport): void {\r\n // Eye position...\r\n const contrastColor = vp.getContrastToBackgroundColor();\r\n builder.setSymbology(contrastColor, ColorDef.black, 8);\r\n builder.addPointString([eyePoint]);\r\n\r\n // Focal plane...\r\n const focalPtsNpc = FrustumDecoration.getPlanePts(npcFrustum.points, false);\r\n const focalPtsWorld: Point3d[] = [];\r\n for (const npcPt of focalPtsNpc)\r\n focalPtsWorld.push(Point3d.create(npcPt.x, npcPt.y, focusPlaneNpc));\r\n worldToNpcMap.transform1.multiplyPoint3dArrayQuietNormalize(focalPtsWorld);\r\n\r\n const bgColor = vp.view.backgroundColor;\r\n const focalPlaneColor = ColorDef.green.adjustedForContrast(bgColor);\r\n const focalTransColor = focalPlaneColor.withTransparency(100);\r\n builder.setSymbology(focalPlaneColor, focalTransColor, 2);\r\n builder.addLineString(focalPtsWorld);\r\n builder.addShape(focalPtsWorld);\r\n }\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum.\r\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\r\n * Options for doing so include:\r\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\r\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\r\n * @beta\r\n */\r\nexport class FrustumDecorator implements Decorator {\r\n private readonly _decoration?: FrustumDecoration;\r\n\r\n private constructor(vp: Viewport, options?: FrustumDecorationOptions) {\r\n this._decoration = FrustumDecoration.create(vp, options);\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (undefined !== this._decoration)\r\n this._decoration.decorate(context);\r\n }\r\n\r\n private static _instance?: FrustumDecorator;\r\n\r\n /** Add the decoration to the specified viewport. */\r\n public static enable(vp: Viewport, options?: FrustumDecorationOptions): void {\r\n FrustumDecorator.disable();\r\n FrustumDecorator._instance = new FrustumDecorator(vp, options);\r\n IModelApp.viewManager.addDecorator(FrustumDecorator._instance);\r\n }\r\n\r\n /** Remove the decoration from the specified viewport. */\r\n public static disable(): void {\r\n const instance = FrustumDecorator._instance;\r\n if (undefined !== instance) {\r\n IModelApp.viewManager.dropDecorator(instance);\r\n FrustumDecorator._instance = undefined;\r\n }\r\n }\r\n\r\n public static get isEnabled() { return undefined !== FrustumDecorator._instance; }\r\n}\r\n\r\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the [[FrustumDecorator]].\r\n * @beta\r\n */\r\nexport class ToggleFrustumSnapshotTool extends Tool {\r\n public static override toolId = \"ToggleFrustumSnapshot\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n public override async run(enable?: boolean, showPreloadFrustum?: boolean, showBackgroundIntersections?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return true;\r\n\r\n if (undefined === enable)\r\n enable = !FrustumDecorator.isEnabled;\r\n\r\n if (enable !== FrustumDecorator.isEnabled) {\r\n if (enable) {\r\n FrustumDecorator.enable(vp, { showPreloadFrustum, showBackgroundIntersections });\r\n vp.onChangeView.addOnce(() => FrustumDecorator.disable());\r\n } else {\r\n FrustumDecorator.disable();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n let showPreload, showBackgroundIntersections, enable;\r\n for (const arg of args) {\r\n if (arg === \"preload\")\r\n showPreload = true;\r\n else if (arg === \"background\")\r\n showBackgroundIntersections = true;\r\n else\r\n enable = parseToggle(arg);\r\n }\r\n\r\n if (typeof enable !== \"string\")\r\n await this.run(enable, showPreload, showBackgroundIntersections);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum from the currently selected viewport.\r\n * Only useful when more than one spatial viewport is open.\r\n */\r\nclass SelectedViewFrustumDecoration {\r\n private static _decorator?: SelectedViewFrustumDecoration;\r\n protected _targetVp: Viewport;\r\n protected _removeDecorationListener?: () => void;\r\n protected _removeViewChangedListener?: () => void;\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public constructor(vp: Viewport, private _options?: FrustumDecorationOptions) {\r\n this._targetVp = vp;\r\n this._removeDecorationListener = IModelApp.viewManager.addDecorator(this);\r\n this._removeViewChangedListener = vp.onViewChanged.addListener(this.onViewChanged, this); // eslint-disable-line @typescript-eslint/unbound-method\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n protected stop(): void {\r\n if (this._removeDecorationListener) {\r\n this._removeDecorationListener();\r\n this._removeDecorationListener = undefined;\r\n }\r\n if (this._removeViewChangedListener) {\r\n this._removeViewChangedListener();\r\n this._removeViewChangedListener = undefined;\r\n }\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n public onViewChanged(targetVp: Viewport): void {\r\n if (targetVp !== this._targetVp)\r\n return;\r\n const decorator = SelectedViewFrustumDecoration._decorator;\r\n if (undefined !== decorator) {\r\n for (const vp of IModelApp.viewManager) {\r\n if (vp !== this._targetVp)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n }\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const vp = context.viewport;\r\n if (!this._targetVp.view.isSpatialView() || vp === this._targetVp || !vp.view.isSpatialView())\r\n return;\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n\r\n if (this._targetVp.isCameraOn) {\r\n const npcFrustum = this._targetVp.getFrustum(CoordSystem.Npc, true);\r\n const focalPlane = this._targetVp.worldToNpc(this._targetVp.view.getTargetPoint()).z;\r\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, npcFrustum, this._targetVp.viewingSpace.worldToNpcMap, this._targetVp.view.camera.getEyePoint(), focalPlane, context.viewport);\r\n }\r\n\r\n const worldFrustum = this._targetVp.getFrustum(CoordSystem.World, false);\r\n const adjustedWorldFrustum = this._targetVp.getFrustum(CoordSystem.World, true);\r\n\r\n FrustumDecoration.drawFrustumBox(builder, worldFrustum, false, context.viewport); // show original frustum...\r\n FrustumDecoration.drawFrustumBox(builder, adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\r\n if (this._options && this._options.showPreloadFrustum)\r\n FrustumDecoration.drawPreloadFrustum(builder, context.viewport.viewingSpace.getPreloadFrustum());\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n // Returns true if decoration becomes enabled.\r\n public static toggle(vp: Viewport, enabled?: boolean): boolean {\r\n if (undefined !== enabled) {\r\n const alreadyEnabled = undefined !== SelectedViewFrustumDecoration._decorator;\r\n if (enabled === alreadyEnabled)\r\n return alreadyEnabled;\r\n }\r\n\r\n if (undefined === SelectedViewFrustumDecoration._decorator) {\r\n SelectedViewFrustumDecoration._decorator = new SelectedViewFrustumDecoration(vp);\r\n return true;\r\n } else {\r\n SelectedViewFrustumDecoration._decorator.stop();\r\n SelectedViewFrustumDecoration._decorator = undefined;\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the selected view frustum decoration.\r\n * @beta\r\n */\r\nexport class ToggleSelectedViewFrustumTool extends Tool {\r\n public static override toolId = \"ToggleSelectedViewFrustum\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp || !vp.view.isSpatialView())\r\n return false;\r\n if (SelectedViewFrustumDecoration.toggle(vp, enable)) {\r\n const remove = vp.onChangeView.addListener((_vp: Viewport, prev: ViewState) => {\r\n if (!prev.hasSameCoordinates(vp.view)) {\r\n SelectedViewFrustumDecoration.toggle(vp, false);\r\n remove();\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n\r\nclass ShadowFrustumDecoration {\r\n private static _instance?: ShadowFrustumDecoration;\r\n private _targetVp: Viewport;\r\n private _cleanup?: () => void;\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public constructor(vp: Viewport) {\r\n this._targetVp = vp;\r\n const removeDecorator = IModelApp.viewManager.addDecorator(this);\r\n const removeOnRender = vp.onRender.addListener((_) => this.onRender());\r\n this._cleanup = () => { removeDecorator(); removeOnRender(); };\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n private stop(): void {\r\n if (undefined !== this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n public onRender(): void {\r\n const decorator = ShadowFrustumDecoration._instance;\r\n if (undefined !== decorator) {\r\n for (const vp of IModelApp.viewManager) {\r\n if (vp !== this._targetVp)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n }\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const frustum = this._targetVp.target.debugControl!.shadowFrustum;\r\n if (undefined === frustum)\r\n return;\r\n\r\n const thisVp = context.viewport;\r\n if (thisVp === this._targetVp || !thisVp.view.isSpatialView())\r\n return;\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n FrustumDecoration.drawFrustumBox(builder, frustum, false, thisVp);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(vp: Viewport, enabled?: boolean): void {\r\n const instance = ShadowFrustumDecoration._instance;\r\n if (undefined !== enabled) {\r\n const alreadyEnabled = undefined !== instance;\r\n if (enabled === alreadyEnabled)\r\n return;\r\n }\r\n\r\n if (undefined === instance) {\r\n ShadowFrustumDecoration._instance = new ShadowFrustumDecoration(vp);\r\n } else {\r\n instance.stop();\r\n ShadowFrustumDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Toggle visualization of the selected viewport's shadow frustum in all other viewports.\r\n * @beta\r\n */\r\nexport class ToggleShadowFrustumTool extends Tool {\r\n public static override toolId = \"ToggleShadowFrustum\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && vp.view.isSpatialView())\r\n ShadowFrustumDecoration.toggle(vp, enable);\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"FrustumDecoration.js","sourceRoot":"","sources":["../../../src/tools/FrustumDecoration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { Map4d, Point3d } from \"@itwin/core-geometry\";\r\nimport { ColorByName, ColorDef, Frustum, LinePixels, Npc } from \"@itwin/core-common\";\r\nimport {\r\n CoordSystem, DecorateContext, Decorator, GraphicBuilder, GraphicType, IModelApp, Tool, Viewport, ViewState, ViewState3d,\r\n} from \"@itwin/core-frontend\";\r\nimport { parseToggle } from \"./parseToggle\";\r\n\r\ninterface FrustumDecorationOptions {\r\n showPreloadFrustum?: boolean;\r\n showBackgroundIntersections?: boolean;\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum.\r\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\r\n * Options for doing so include:\r\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\r\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\r\n */\r\nclass FrustumDecoration {\r\n private readonly _worldFrustum: Frustum;\r\n private readonly _adjustedWorldFrustum: Frustum;\r\n private readonly _preloadFrustum: Frustum;\r\n private readonly _npcFrustum: Frustum;\r\n private readonly _worldToNpcMap: Map4d;\r\n private readonly _eyePoint: Point3d;\r\n private readonly _focalPlane: number;\r\n private readonly _isCameraOn: boolean;\r\n\r\n private constructor(vp: Viewport, view: ViewState3d, private readonly _options?: FrustumDecorationOptions) {\r\n this._worldFrustum = vp.getFrustum(CoordSystem.World, false);\r\n this._adjustedWorldFrustum = vp.getFrustum(CoordSystem.World, true);\r\n this._preloadFrustum = vp.viewingSpace.getPreloadFrustum();\r\n this._npcFrustum = vp.getFrustum(CoordSystem.Npc, true);\r\n this._worldToNpcMap = vp.viewingSpace.worldToNpcMap.clone();\r\n this._eyePoint = view.camera.getEyePoint().clone();\r\n this._focalPlane = vp.worldToNpc(view.getTargetPoint()).z;\r\n this._isCameraOn = vp.isCameraOn;\r\n }\r\n\r\n public static create(vp: Viewport, options?: FrustumDecorationOptions): FrustumDecoration | undefined {\r\n const view = vp.view.isSpatialView() ? vp.view : undefined;\r\n return undefined !== view ? new FrustumDecoration(vp, view, options) : undefined;\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n\r\n if (this._isCameraOn)\r\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, this._npcFrustum, this._worldToNpcMap, this._eyePoint, this._focalPlane, context.viewport);\r\n\r\n FrustumDecoration.drawFrustumBox(builder, this._worldFrustum, false, context.viewport); // show original frustum...\r\n FrustumDecoration.drawFrustumBox(builder, this._adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\r\n const options = this._options;\r\n if (options !== undefined) {\r\n if (options.showPreloadFrustum)\r\n FrustumDecoration.drawPreloadFrustum(builder, this._preloadFrustum);\r\n\r\n if (options?.showBackgroundIntersections) {\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (backgroundMapGeometry)\r\n backgroundMapGeometry.addFrustumDecorations(builder, this._adjustedWorldFrustum);\r\n }\r\n }\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static drawPreloadFrustum(builder: GraphicBuilder, frustum: Frustum) {\r\n const preloadColor = ColorDef.create(ColorByName.coral);\r\n builder.setSymbology(preloadColor, preloadColor, 1, 2);\r\n builder.addFrustum(frustum);\r\n }\r\n\r\n public static drawFrustumBox(builder: GraphicBuilder, frustum: Frustum, adjustedBox: boolean, vp: Viewport): void {\r\n const backPts = this.getPlanePts(frustum.points, false); // back plane\r\n const frontPts = this.getPlanePts(frustum.points, true); // front plane\r\n\r\n const bgColor = vp.view.backgroundColor;\r\n const backAndBottomColor = ColorDef.red.adjustedForContrast(bgColor);\r\n const frontAndTopLeftColor = ColorDef.blue.adjustedForContrast(bgColor);\r\n const frontAndTopRightColor = ColorDef.green.adjustedForContrast(bgColor);\r\n const edgeWeight = adjustedBox ? 2 : 1;\r\n const edgeStyle = adjustedBox ? LinePixels.Solid : LinePixels.Code2;\r\n\r\n // Back plane\r\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(backPts);\r\n\r\n // Front plane\r\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(frontPts);\r\n\r\n // Bottom edge\r\n builder.setSymbology(backAndBottomColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 0));\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 1));\r\n\r\n // Top edge\r\n builder.setSymbology(frontAndTopRightColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 2));\r\n builder.setSymbology(frontAndTopLeftColor, ColorDef.black, edgeWeight, edgeStyle);\r\n builder.addLineString(this.getEdgePts(backPts, frontPts, 3));\r\n }\r\n\r\n private static getEdgePts(startPts: Point3d[], endPts: Point3d[], index: number): Point3d[] {\r\n return [\r\n startPts[index],\r\n endPts[index],\r\n ];\r\n }\r\n\r\n private static getPlanePts(frustPts: Point3d[], front: boolean): Point3d[] {\r\n const baseIndex = front ? Npc._001 : Npc._000;\r\n const planePts = [\r\n frustPts[baseIndex + Npc._000],\r\n frustPts[baseIndex + Npc._100],\r\n frustPts[baseIndex + Npc._110],\r\n frustPts[baseIndex + Npc._010],\r\n ];\r\n\r\n planePts.push(planePts[0]);\r\n return planePts;\r\n }\r\n\r\n public static drawEyePositionAndFocalPlane(builder: GraphicBuilder, npcFrustum: Frustum, worldToNpcMap: Map4d, eyePoint: Point3d, focusPlaneNpc: number, vp: Viewport): void {\r\n // Eye position...\r\n const contrastColor = vp.getContrastToBackgroundColor();\r\n builder.setSymbology(contrastColor, ColorDef.black, 8);\r\n builder.addPointString([eyePoint]);\r\n\r\n // Focal plane...\r\n const focalPtsNpc = FrustumDecoration.getPlanePts(npcFrustum.points, false);\r\n const focalPtsWorld: Point3d[] = [];\r\n for (const npcPt of focalPtsNpc)\r\n focalPtsWorld.push(Point3d.create(npcPt.x, npcPt.y, focusPlaneNpc));\r\n worldToNpcMap.transform1.multiplyPoint3dArrayQuietNormalize(focalPtsWorld);\r\n\r\n const bgColor = vp.view.backgroundColor;\r\n const focalPlaneColor = ColorDef.green.adjustedForContrast(bgColor);\r\n const focalTransColor = focalPlaneColor.withTransparency(100);\r\n builder.setSymbology(focalPlaneColor, focalTransColor, 2);\r\n builder.addLineString(focalPtsWorld);\r\n builder.addShape(focalPtsWorld);\r\n }\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum.\r\n * This is obviously only useful when drawn inside a viewport using a *different* Frustum.\r\n * Options for doing so include:\r\n * - Having more than one viewport, and drawing the frustum of one viewport inside the other viewports; and\r\n * - Allowing the user to take a snapshot of the current frustum, then navigate the view to inspect it within the same viewport.\r\n * @beta\r\n */\r\nexport class FrustumDecorator implements Decorator {\r\n private readonly _decoration?: FrustumDecoration;\r\n\r\n private constructor(vp: Viewport, options?: FrustumDecorationOptions) {\r\n this._decoration = FrustumDecoration.create(vp, options);\r\n }\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public decorate(context: DecorateContext): void {\r\n if (undefined !== this._decoration)\r\n this._decoration.decorate(context);\r\n }\r\n\r\n private static _instance?: FrustumDecorator;\r\n\r\n /** Add the decoration to the specified viewport. */\r\n public static enable(vp: Viewport, options?: FrustumDecorationOptions): void {\r\n FrustumDecorator.disable();\r\n FrustumDecorator._instance = new FrustumDecorator(vp, options);\r\n IModelApp.viewManager.addDecorator(FrustumDecorator._instance);\r\n }\r\n\r\n /** Remove the decoration from the specified viewport. */\r\n public static disable(): void {\r\n const instance = FrustumDecorator._instance;\r\n if (undefined !== instance) {\r\n IModelApp.viewManager.dropDecorator(instance);\r\n FrustumDecorator._instance = undefined;\r\n }\r\n }\r\n\r\n public static get isEnabled() { return undefined !== FrustumDecorator._instance; }\r\n}\r\n\r\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the [[FrustumDecorator]].\r\n * @beta\r\n */\r\nexport class ToggleFrustumSnapshotTool extends Tool {\r\n public static override toolId = \"ToggleFrustumSnapshot\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 2; }\r\n\r\n public override async run(enable?: boolean, showPreloadFrustum?: boolean, showBackgroundIntersections?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp)\r\n return true;\r\n\r\n if (undefined === enable)\r\n enable = !FrustumDecorator.isEnabled;\r\n\r\n if (enable !== FrustumDecorator.isEnabled) {\r\n if (enable) {\r\n FrustumDecorator.enable(vp, { showPreloadFrustum, showBackgroundIntersections });\r\n vp.onChangeView.addOnce(() => FrustumDecorator.disable());\r\n } else {\r\n FrustumDecorator.disable();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n let showPreload, showBackgroundIntersections, enable;\r\n for (const arg of args) {\r\n if (arg === \"preload\")\r\n showPreload = true;\r\n else if (arg === \"background\")\r\n showBackgroundIntersections = true;\r\n else\r\n enable = parseToggle(arg);\r\n }\r\n\r\n if (typeof enable !== \"string\")\r\n await this.run(enable, showPreload, showBackgroundIntersections);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Decorates the viewport with a graphical depiction of a Frustum from the currently selected viewport.\r\n * Only useful when more than one spatial viewport is open.\r\n */\r\nclass SelectedViewFrustumDecoration {\r\n private static _decorator?: SelectedViewFrustumDecoration;\r\n protected _targetVp: Viewport;\r\n protected _removeDecorationListener?: () => void;\r\n protected _removeViewChangedListener?: () => void;\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public constructor(vp: Viewport, private _options?: FrustumDecorationOptions) {\r\n this._targetVp = vp;\r\n this._removeDecorationListener = IModelApp.viewManager.addDecorator(this);\r\n this._removeViewChangedListener = vp.onViewChanged.addListener(this.onViewChanged, this); // eslint-disable-line @typescript-eslint/unbound-method\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n protected stop(): void {\r\n if (this._removeDecorationListener) {\r\n this._removeDecorationListener();\r\n this._removeDecorationListener = undefined;\r\n }\r\n if (this._removeViewChangedListener) {\r\n this._removeViewChangedListener();\r\n this._removeViewChangedListener = undefined;\r\n }\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n public onViewChanged(targetVp: Viewport): void {\r\n if (targetVp !== this._targetVp)\r\n return;\r\n const decorator = SelectedViewFrustumDecoration._decorator;\r\n if (undefined !== decorator) {\r\n for (const vp of IModelApp.viewManager) {\r\n if (vp !== this._targetVp)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n }\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const vp = context.viewport;\r\n if (!this._targetVp.view.isSpatialView() || vp === this._targetVp || !vp.view.isSpatialView())\r\n return;\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n\r\n if (this._targetVp.isCameraOn) {\r\n const npcFrustum = this._targetVp.getFrustum(CoordSystem.Npc, true);\r\n const focalPlane = this._targetVp.worldToNpc(this._targetVp.view.getTargetPoint()).z;\r\n FrustumDecoration.drawEyePositionAndFocalPlane(builder, npcFrustum, this._targetVp.viewingSpace.worldToNpcMap, this._targetVp.view.camera.getEyePoint(), focalPlane, context.viewport);\r\n }\r\n\r\n const worldFrustum = this._targetVp.getFrustum(CoordSystem.World, false);\r\n const adjustedWorldFrustum = this._targetVp.getFrustum(CoordSystem.World, true);\r\n\r\n FrustumDecoration.drawFrustumBox(builder, worldFrustum, false, context.viewport); // show original frustum...\r\n FrustumDecoration.drawFrustumBox(builder, adjustedWorldFrustum, true, context.viewport); // show adjusted frustum...\r\n if (this._options && this._options.showPreloadFrustum)\r\n FrustumDecoration.drawPreloadFrustum(builder, context.viewport.viewingSpace.getPreloadFrustum());\r\n\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n // Returns true if decoration becomes enabled.\r\n public static toggle(vp: Viewport, enabled?: boolean): boolean {\r\n if (undefined !== enabled) {\r\n const alreadyEnabled = undefined !== SelectedViewFrustumDecoration._decorator;\r\n if (enabled === alreadyEnabled)\r\n return alreadyEnabled;\r\n }\r\n\r\n if (undefined === SelectedViewFrustumDecoration._decorator) {\r\n SelectedViewFrustumDecoration._decorator = new SelectedViewFrustumDecoration(vp);\r\n return true;\r\n } else {\r\n SelectedViewFrustumDecoration._decorator.stop();\r\n SelectedViewFrustumDecoration._decorator = undefined;\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Enable (\"ON\"), disable (\"OFF\"), or toggle (\"TOGGLE\" or omitted) the selected view frustum decoration.\r\n * @beta\r\n */\r\nexport class ToggleSelectedViewFrustumTool extends Tool {\r\n public static override toolId = \"ToggleSelectedViewFrustum\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined === vp || !vp.view.isSpatialView())\r\n return false;\r\n if (SelectedViewFrustumDecoration.toggle(vp, enable)) {\r\n const remove = vp.onChangeView.addListener((_vp: Viewport, prev: ViewState) => {\r\n if (!prev.hasSameCoordinates(vp.view)) {\r\n SelectedViewFrustumDecoration.toggle(vp, false);\r\n remove();\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n\r\nclass ShadowFrustumDecoration {\r\n private static _instance?: ShadowFrustumDecoration;\r\n private _targetVp: Viewport;\r\n private _cleanup?: () => void;\r\n\r\n /** This will allow the render system to cache and reuse the decorations created by this decorator's decorate() method. */\r\n public readonly useCachedDecorations = true;\r\n\r\n public constructor(vp: Viewport) {\r\n this._targetVp = vp;\r\n const removeDecorator = IModelApp.viewManager.addDecorator(this);\r\n const removeOnRender = vp.onRender.addListener((_) => this.onRender());\r\n this._cleanup = () => {\r\n removeDecorator();\r\n removeOnRender();\r\n };\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n private stop(): void {\r\n if (undefined !== this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n }\r\n\r\n public onRender(): void {\r\n const decorator = ShadowFrustumDecoration._instance;\r\n if (undefined !== decorator) {\r\n for (const vp of IModelApp.viewManager) {\r\n if (vp !== this._targetVp)\r\n vp.invalidateCachedDecorations(decorator);\r\n }\r\n }\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const frustum = this._targetVp.target.debugControl!.shadowFrustum;\r\n if (undefined === frustum)\r\n return;\r\n\r\n const thisVp = context.viewport;\r\n if (thisVp === this._targetVp || !thisVp.view.isSpatialView())\r\n return;\r\n\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n FrustumDecoration.drawFrustumBox(builder, frustum, false, thisVp);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n public static toggle(vp: Viewport, enabled?: boolean): void {\r\n const instance = ShadowFrustumDecoration._instance;\r\n if (undefined !== enabled) {\r\n const alreadyEnabled = undefined !== instance;\r\n if (enabled === alreadyEnabled)\r\n return;\r\n }\r\n\r\n if (undefined === instance) {\r\n ShadowFrustumDecoration._instance = new ShadowFrustumDecoration(vp);\r\n } else {\r\n instance.stop();\r\n ShadowFrustumDecoration._instance = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** Toggle visualization of the selected viewport's shadow frustum in all other viewports.\r\n * @beta\r\n */\r\nexport class ToggleShadowFrustumTool extends Tool {\r\n public static override toolId = \"ToggleShadowFrustum\";\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 1; }\r\n\r\n public override async run(enable?: boolean): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp && vp.view.isSpatialView())\r\n ShadowFrustumDecoration.toggle(vp, enable);\r\n\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: string[]): Promise<boolean> {\r\n const enable = parseToggle(args[0]);\r\n if (typeof enable !== \"string\")\r\n await this.run(enable);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasureTileLoadTime.d.ts","sourceRoot":"","sources":["../../../src/tools/MeasureTileLoadTime.ts"],"names":[],"mappings":"AAUA,OAAO,EAA0D,IAAI,EAAY,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"MeasureTileLoadTime.d.ts","sourceRoot":"","sources":["../../../src/tools/MeasureTileLoadTime.ts"],"names":[],"mappings":"AAUA,OAAO,EAA0D,IAAI,EAAY,MAAM,sBAAsB,CAAC;AAiD9G;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,IAAI;IAC/C,OAAuB,MAAM,SAAyB;IAEtD;;OAEG;IACmB,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAO1D"}
|
|
@@ -15,7 +15,10 @@ class TileLoadTimer {
|
|
|
15
15
|
IModelApp.viewManager.refreshForModifiedModels(undefined);
|
|
16
16
|
const removeOnRender = vp.onRender.addListener(() => this.onRender());
|
|
17
17
|
const removeOnClose = vp.iModel.onClose.addOnce(() => this.cancel());
|
|
18
|
-
this._cleanup = () => {
|
|
18
|
+
this._cleanup = () => {
|
|
19
|
+
removeOnRender();
|
|
20
|
+
removeOnClose();
|
|
21
|
+
};
|
|
19
22
|
IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, "Tile loading timer started."));
|
|
20
23
|
this._stopwatch.start();
|
|
21
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasureTileLoadTime.js","sourceRoot":"","sources":["../../../src/tools/MeasureTileLoadTime.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,IAAI,EAAY,MAAM,sBAAsB,CAAC;AAE9G,MAAM,aAAa;IAKjB,YAAmB,EAAY;QAC7B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QAElC,mCAAmC;QACnC,SAAS,CAAC,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAE1D,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"MeasureTileLoadTime.js","sourceRoot":"","sources":["../../../src/tools/MeasureTileLoadTime.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,IAAI,EAAY,MAAM,sBAAsB,CAAC;AAE9G,MAAM,aAAa;IAKjB,YAAmB,EAAY;QAC7B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QAElC,mCAAmC;QACnC,SAAS,CAAC,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAE1D,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;YACnB,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC;QAEF,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC;QAC3H,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEO,MAAM;QACZ,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC;QAC5H,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;SAC3B;IACH,CAAC;IAEO,QAAQ;QACd,uIAAuI;QACvI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB;YACnE,OAAO;QAET,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAErK,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,IAAI;IAG/C;;OAEG;IACa,KAAK,CAAC,GAAG,CAAC,KAAY;QACpC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC9C,IAAI,SAAS,KAAK,EAAE;YAClB,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QAExB,OAAO,IAAI,CAAC;IACd,CAAC;;AAXsB,8BAAM,GAAG,qBAAqB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { StopWatch } from \"@itwin/core-bentley\";\r\nimport { IModelApp, NotifyMessageDetails, OutputMessagePriority, Tool, Viewport } from \"@itwin/core-frontend\";\r\n\r\nclass TileLoadTimer {\r\n private readonly _vp: Viewport;\r\n private readonly _stopwatch: StopWatch;\r\n private _cleanup?: () => void;\r\n\r\n public constructor(vp: Viewport) {\r\n this._vp = vp;\r\n this._stopwatch = new StopWatch();\r\n\r\n // Purge tile trees for all models.\r\n IModelApp.viewManager.refreshForModifiedModels(undefined);\r\n\r\n const removeOnRender = vp.onRender.addListener(() => this.onRender());\r\n const removeOnClose = vp.iModel.onClose.addOnce(() => this.cancel());\r\n this._cleanup = () => {\r\n removeOnRender();\r\n removeOnClose();\r\n };\r\n\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"Tile loading timer started.\"));\r\n this._stopwatch.start();\r\n }\r\n\r\n private cancel(): void {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, \"Tile loading timer canceled.\"));\r\n this.stop();\r\n }\r\n\r\n private stop(): void {\r\n if (undefined !== this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n private onRender(): void {\r\n // ###TODO: May be intermediate frames during which children props have been asynchronously requested but no outstanding tile requests.\r\n if (!this._vp.areAllTileTreesLoaded || 0 < this._vp.numRequestedTiles)\r\n return;\r\n\r\n this._stopwatch.stop();\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, `Tiles loaded in ${this._stopwatch.elapsedSeconds.toFixed(4)} seconds.`));\r\n\r\n this.stop();\r\n }\r\n}\r\n\r\n/** Unloads all tile trees, then starts a timer that stops when all tile trees and tiles required for the view are ready.\r\n * Outputs the elapsed time to notifications manager.\r\n * @beta\r\n */\r\nexport class MeasureTileLoadTimeTool extends Tool {\r\n public static override toolId = \"MeasureTileLoadTime\";\r\n\r\n /** This method runs the tool, unloading all tile trees, then starts a timer that stops when all tile trees and tiles required for the view are ready. It will then output the elapsed time to notifications manager.\r\n * @param _args this parameter is unused\r\n */\r\n public override async run(_args: any[]): Promise<boolean> {\r\n const vp = IModelApp.viewManager.selectedView;\r\n if (undefined !== vp)\r\n new TileLoadTimer(vp);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarMaskTools.d.ts","sourceRoot":"","sources":["../../../src/tools/PlanarMaskTools.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAA8C,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxG,OAAO,EACL,aAAa,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAa,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EACrJ,MAAM,sBAAsB,CAAC;AAG9B;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,IAAI;IACnD,OAAuB,MAAM,SAA8B;IAC3D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5D,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,IAAI;IACrC,OAAuB,MAAM,SAAe;IAC5C,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAS9C;AAED;;GAEG;AACH,8BAAsB,kBAAmB,SAAQ,aAAa;IAC5D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,cAAyB;IAC7D,SAAS,CAAC,QAAQ,CAAC,uBAAuB,cAAyB;IACnE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,cAAyB;IAC/D,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IACpC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAS;IACzC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IACnC,SAAS,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,wBAAwB,CAAC;IAEnD,sBAAsB,IAAI,OAAO;IAC3B,aAAa;
|
|
1
|
+
{"version":3,"file":"PlanarMaskTools.d.ts","sourceRoot":"","sources":["../../../src/tools/PlanarMaskTools.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAA8C,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxG,OAAO,EACL,aAAa,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAa,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EACrJ,MAAM,sBAAsB,CAAC;AAG9B;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,IAAI;IACnD,OAAuB,MAAM,SAA8B;IAC3D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5D,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAOvE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,IAAI;IACrC,OAAuB,MAAM,SAAe;IAC5C,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;IAE5B,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAS9C;AAED;;GAEG;AACH,8BAAsB,kBAAmB,SAAQ,aAAa;IAC5D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,cAAyB;IAC7D,SAAS,CAAC,QAAQ,CAAC,uBAAuB,cAAyB;IACnE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,cAAyB;IAC/D,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IACpC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAS;IACzC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IACnC,SAAS,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,wBAAwB,CAAC;IAEnD,sBAAsB,IAAI,OAAO;IAC3B,aAAa;IAKb,WAAW;IACjC,OAAO,CAAC,2BAA2B;IAMnC,SAAS,CAAC,mBAAmB,IAAI,OAAO;IACxC,SAAS,CAAC,eAAe,IAAI,OAAO;IACpC,SAAS,CAAC,cAAc,IAAI,OAAO;IACnC,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI;IACrC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,kBAAkB;IAC3D,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IACtD,OAAO,CAAC,QAAQ;IAIM,QAAQ;IAKjB,aAAa;IAQJ,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAShD,SAAS;IAMT,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAc7E,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAuChF,SAAS,CAAC,qBAAqB;IAS/B,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS;IAUzD,SAAS,CAAC,eAAe;IAIzB,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI;CAMtF;AACD;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,kBAAkB;IACpE,OAAuB,MAAM,SAAgC;IAC7D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;IACtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAG5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AACD;;GAEG;AACH,qBAAa,sCAAuC,SAAQ,kBAAkB;IAC5E,OAAuB,MAAM,SAAwC;IACrE,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;IACtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAG5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,qBAAa,kCAAmC,SAAQ,kBAAkB;IACxE,OAAuB,MAAM,SAAoC;IACjE,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;cACnB,cAAc,IAAI,OAAO;IAC5C,SAAS,CAAC,UAAU,IAAI,IAAI;IAG5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,kBAAkB;IAClE,OAAuB,MAAM,SAA8B;IAC3D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;IACtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAG5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,kBAAkB;IACnE,OAAuB,MAAM,SAA+B;IAC5D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;IAEtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,qBAAa,qCAAsC,SAAQ,kBAAkB;IAC3E,OAAuB,MAAM,SAAuC;IACpE,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;IAEtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AAEH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,OAAuB,MAAM,SAA6B;IAC1D,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAE/B,mBAAmB;IAEtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,kBAAkB;IACvE,OAAuB,MAAM,SAAmC;IAChE,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;cACnB,cAAc,IAAI,OAAO;IAE5C,SAAS,CAAC,UAAU,IAAI,IAAI;IAI5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,qBAAa,oCAAqC,SAAQ,kBAAkB;IAC1E,OAAuB,MAAM,SAA0C;IACvE,WAA2B,OAAO,WAAgB;IAClD,WAA2B,OAAO,WAAgB;cAC/B,mBAAmB;cACnB,eAAe;IAClC,OAAO,CAAC,SAAS,CAAK;IAEtB,SAAS,CAAC,UAAU,IAAI,IAAI;IAG5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAKvB,WAAW,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAcvE;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,OAAuB,MAAM,SAAwB;cAClC,mBAAmB;IAEtC,SAAS,CAAC,UAAU,IAAI,IAAI;IAG5B,SAAS,CAAC,kBAAkB,IAAI,kBAAkB;IAClD,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAIvB,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAcjF"}
|
|
@@ -58,7 +58,10 @@ export class PlanarMaskBaseTool extends PrimitiveTool {
|
|
|
58
58
|
this._invert = false;
|
|
59
59
|
}
|
|
60
60
|
requireWriteableTarget() { return false; }
|
|
61
|
-
async onPostInstall() {
|
|
61
|
+
async onPostInstall() {
|
|
62
|
+
await super.onPostInstall();
|
|
63
|
+
this.setupAndPromptForNextAction();
|
|
64
|
+
}
|
|
62
65
|
async onUnsuspend() { this.showPrompt(); }
|
|
63
66
|
setupAndPromptForNextAction() {
|
|
64
67
|
this._useSelection = (undefined !== this.targetView && this.iModel.selectionSet.isActive);
|