@itwin/saved-views-react 0.8.0 → 0.9.0
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/lib/applySavedView.d.ts +2 -1
- package/lib/applySavedView.js +27 -13
- package/lib/captureSavedViewData.d.ts +5 -0
- package/lib/captureSavedViewData.js +8 -2
- package/lib/translation/SavedViewsExtensionHandlers.d.ts +8 -0
- package/lib/translation/SavedViewsExtensionHandlers.js +5 -5
- package/package.json +1 -1
package/lib/applySavedView.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ViewChangeOptions, ViewPose, ViewState, type IModelConnection, type Viewport } from "@itwin/core-frontend";
|
|
2
2
|
import type { SavedViewData } from "./SavedView.js";
|
|
3
|
+
import { type DefaultExtensionHandlersApplyOverrides } from "./translation/SavedViewsExtensionHandlers.js";
|
|
3
4
|
export interface ApplySavedViewSettings {
|
|
4
5
|
/**
|
|
5
6
|
* How to make use of captured {@link ViewState} data. The default behavior is
|
|
@@ -65,5 +66,5 @@ type ApplyStrategy = "apply" | "keep";
|
|
|
65
66
|
* applySavedView(iModel, viewport2, savedView, { viewState }),
|
|
66
67
|
* ]);
|
|
67
68
|
*/
|
|
68
|
-
export declare function applySavedView(iModel: IModelConnection, viewport: Viewport, savedViewData: SavedViewData, settings?: ApplySavedViewSettings | undefined): Promise<void>;
|
|
69
|
+
export declare function applySavedView(iModel: IModelConnection, viewport: Viewport, savedViewData: SavedViewData, settings?: ApplySavedViewSettings | undefined, overrides?: DefaultExtensionHandlersApplyOverrides): Promise<void>;
|
|
69
70
|
export {};
|
package/lib/applySavedView.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { ViewPose, ViewState } from "@itwin/core-frontend";
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { ViewPose, ViewState, } from "@itwin/core-frontend";
|
|
6
6
|
import { createViewState } from "./createViewState.js";
|
|
7
|
-
import { extensionHandlers } from "./translation/SavedViewsExtensionHandlers.js";
|
|
7
|
+
import { extensionHandlers, } from "./translation/SavedViewsExtensionHandlers.js";
|
|
8
8
|
/**
|
|
9
9
|
* Updates {@linkcode viewport} state to match captured Saved View.
|
|
10
10
|
*
|
|
@@ -17,7 +17,7 @@ import { extensionHandlers } from "./translation/SavedViewsExtensionHandlers.js"
|
|
|
17
17
|
* applySavedView(iModel, viewport2, savedView, { viewState }),
|
|
18
18
|
* ]);
|
|
19
19
|
*/
|
|
20
|
-
export async function applySavedView(iModel, viewport, savedViewData, settings = {}) {
|
|
20
|
+
export async function applySavedView(iModel, viewport, savedViewData, settings = {}, overrides) {
|
|
21
21
|
if (settings.viewState !== "keep") {
|
|
22
22
|
// We use "hidden" as the default value for modelAndCategoryVisibilityFallback
|
|
23
23
|
// because users expect modelSelector.enabled and categorySelector.enabled to
|
|
@@ -26,7 +26,9 @@ export async function applySavedView(iModel, viewport, savedViewData, settings =
|
|
|
26
26
|
const { modelAndCategoryVisibilityFallback = "hidden" } = settings;
|
|
27
27
|
const viewState = settings.viewState instanceof ViewState
|
|
28
28
|
? settings.viewState
|
|
29
|
-
: await createViewState(iModel, savedViewData.viewData, {
|
|
29
|
+
: await createViewState(iModel, savedViewData.viewData, {
|
|
30
|
+
modelAndCategoryVisibilityFallback,
|
|
31
|
+
});
|
|
30
32
|
if (settings.camera instanceof ViewPose) {
|
|
31
33
|
viewState.applyPose(settings.camera);
|
|
32
34
|
}
|
|
@@ -37,19 +39,29 @@ export async function applySavedView(iModel, viewport, savedViewData, settings =
|
|
|
37
39
|
}
|
|
38
40
|
const extensions = findKnownExtensions(savedViewData.extensions ?? []);
|
|
39
41
|
if (extensions.emphasis) {
|
|
42
|
+
const override = overrides?.emphasizeElements;
|
|
40
43
|
if (settings.emphasis !== "keep") {
|
|
41
|
-
|
|
44
|
+
override?.reset
|
|
45
|
+
? override.reset(viewport)
|
|
46
|
+
: extensionHandlers.emphasizeElements.reset(viewport);
|
|
42
47
|
}
|
|
43
48
|
if (settings.emphasis === "apply") {
|
|
44
|
-
|
|
49
|
+
override?.apply
|
|
50
|
+
? override.apply(extensions.emphasis, viewport)
|
|
51
|
+
: extensionHandlers.emphasizeElements.apply(extensions.emphasis, viewport);
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
54
|
if (extensions.perModelCategoryVisibility) {
|
|
55
|
+
const override = overrides?.perModelCategoryVisibility;
|
|
48
56
|
if (settings.perModelCategoryVisibility !== "keep") {
|
|
49
|
-
|
|
57
|
+
override?.reset
|
|
58
|
+
? override.reset(viewport)
|
|
59
|
+
: extensionHandlers.perModelCategoryVisibility.reset(viewport);
|
|
50
60
|
}
|
|
51
61
|
if (settings.perModelCategoryVisibility === "apply") {
|
|
52
|
-
|
|
62
|
+
override?.apply
|
|
63
|
+
? override.apply(extensions.perModelCategoryVisibility, viewport)
|
|
64
|
+
: extensionHandlers.perModelCategoryVisibility.apply(extensions.perModelCategoryVisibility, viewport);
|
|
53
65
|
}
|
|
54
66
|
}
|
|
55
67
|
}
|
|
@@ -61,14 +73,16 @@ function findKnownExtensions(extensions) {
|
|
|
61
73
|
};
|
|
62
74
|
for (const extension of extensions) {
|
|
63
75
|
if (result.emphasis === undefined &&
|
|
64
|
-
extension.extensionName ===
|
|
76
|
+
extension.extensionName ===
|
|
77
|
+
extensionHandlers.emphasizeElements.extensionName) {
|
|
65
78
|
result.emphasis = extension.data;
|
|
66
79
|
if (result.perModelCategoryVisibility) {
|
|
67
80
|
break;
|
|
68
81
|
}
|
|
69
82
|
}
|
|
70
83
|
if (result.perModelCategoryVisibility === undefined &&
|
|
71
|
-
extension.extensionName ===
|
|
84
|
+
extension.extensionName ===
|
|
85
|
+
extensionHandlers.perModelCategoryVisibility.extensionName) {
|
|
72
86
|
result.perModelCategoryVisibility = extension.data;
|
|
73
87
|
if (result.emphasis) {
|
|
74
88
|
break;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Id64Array } from "@itwin/core-bentley";
|
|
2
2
|
import type { IModelConnection, Viewport } from "@itwin/core-frontend";
|
|
3
3
|
import type { SavedViewData } from "./SavedView.js";
|
|
4
|
+
import { type DefaultExtensionHandlersCaptureOverrides } from "./translation/SavedViewsExtensionHandlers.js";
|
|
4
5
|
interface CaptureSavedViewDataArgs {
|
|
5
6
|
/** Viewport to capture. */
|
|
6
7
|
viewport: Viewport;
|
|
@@ -14,6 +15,10 @@ interface CaptureSavedViewDataArgs {
|
|
|
14
15
|
* @default false
|
|
15
16
|
*/
|
|
16
17
|
omitPerModelCategoryVisibility?: boolean | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Overrides for the capture function of default extension handlers .
|
|
20
|
+
*/
|
|
21
|
+
overrides?: DefaultExtensionHandlersCaptureOverrides;
|
|
17
22
|
}
|
|
18
23
|
/**
|
|
19
24
|
* Captures current {@link Viewport} state into serializable format. The returned
|
|
@@ -19,10 +19,16 @@ import { extractDisplayStyle2dFromLegacy, extractDisplayStyle3dFromLegacy, } fro
|
|
|
19
19
|
export async function captureSavedViewData(args) {
|
|
20
20
|
const extensions = [];
|
|
21
21
|
if (!args.omitEmphasis) {
|
|
22
|
-
extensions.push(
|
|
22
|
+
extensions.push({
|
|
23
|
+
...extensionHandlers.emphasizeElements,
|
|
24
|
+
capture: args.overrides?.emphasizeElements?.capture ?? extensionHandlers.emphasizeElements.capture,
|
|
25
|
+
});
|
|
23
26
|
}
|
|
24
27
|
if (!args.omitPerModelCategoryVisibility) {
|
|
25
|
-
extensions.push(
|
|
28
|
+
extensions.push({
|
|
29
|
+
...extensionHandlers.perModelCategoryVisibility,
|
|
30
|
+
capture: args.overrides?.perModelCategoryVisibility?.capture ?? extensionHandlers.perModelCategoryVisibility.capture,
|
|
31
|
+
});
|
|
26
32
|
}
|
|
27
33
|
return {
|
|
28
34
|
viewData: await createSavedViewVariant(args.viewport),
|
|
@@ -5,6 +5,14 @@ export interface ExtensionHandler {
|
|
|
5
5
|
reset: (viewport: Viewport) => void;
|
|
6
6
|
capture: (viewport: Viewport) => string | undefined;
|
|
7
7
|
}
|
|
8
|
+
export interface DefaultExtensionHandlersApplyOverrides {
|
|
9
|
+
emphasizeElements?: Partial<Pick<ExtensionHandler, "apply" | "reset">>;
|
|
10
|
+
perModelCategoryVisibility?: Partial<Pick<ExtensionHandler, "apply" | "reset">>;
|
|
11
|
+
}
|
|
12
|
+
export interface DefaultExtensionHandlersCaptureOverrides {
|
|
13
|
+
emphasizeElements?: Partial<Pick<ExtensionHandler, "capture">>;
|
|
14
|
+
perModelCategoryVisibility?: Partial<Pick<ExtensionHandler, "capture">>;
|
|
15
|
+
}
|
|
8
16
|
export declare const extensionHandlers: {
|
|
9
17
|
emphasizeElements: {
|
|
10
18
|
extensionName: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { EmphasizeElements, PerModelCategoryVisibility } from "@itwin/core-frontend";
|
|
6
|
-
import { extractEmphasizeElements, extractPerModelCategoryVisibility } from "./extensionExtractor.js";
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { EmphasizeElements, PerModelCategoryVisibility, } from "@itwin/core-frontend";
|
|
6
|
+
import { extractEmphasizeElements, extractPerModelCategoryVisibility, } from "./extensionExtractor.js";
|
|
7
7
|
export const extensionHandlers = {
|
|
8
8
|
emphasizeElements: {
|
|
9
9
|
extensionName: "EmphasizeElements",
|