@itwin/saved-views-react 0.3.1 → 0.4.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/SavedView.d.ts +6 -0
- package/lib/SavedViewsClient/ITwinSavedViewsClient.js +2 -0
- package/lib/captureSavedViewData.js +2 -2
- package/lib/createViewState.d.ts +3 -0
- package/lib/createViewState.js +245 -0
- package/lib/experimental.d.ts +3 -3
- package/lib/experimental.js +3 -2
- package/lib/translation/SavedViewTranslation.d.ts +4 -0
- package/lib/translation/SavedViewTranslation.js +25 -0
- package/lib/{api/utilities → translation}/SavedViewTypes.d.ts +16 -20
- package/lib/{api/utilities/translation → translation}/SavedViewsExtensionHandlers.js +1 -1
- package/lib/{api/utilities/translation → translation}/extensionExtractor.d.ts +2 -2
- package/package.json +1 -1
- package/lib/api/clients/ISavedViewsClient.d.ts +0 -9
- package/lib/api/clients/ISavedViewsClient.js +0 -16
- package/lib/api/utilities/translation/SavedViewTranslation.d.ts +0 -26
- package/lib/api/utilities/translation/SavedViewTranslation.js +0 -246
- package/lib/api/utilities/translation/viewExtractorSavedViewToLegacySavedView.d.ts +0 -18
- package/lib/api/utilities/translation/viewExtractorSavedViewToLegacySavedView.js +0 -242
- /package/lib/{ui/viewlist/ModelCategoryOverrideProvider.d.ts → ModelCategoryOverrideProvider.d.ts} +0 -0
- /package/lib/{ui/viewlist/ModelCategoryOverrideProvider.js → ModelCategoryOverrideProvider.js} +0 -0
- /package/lib/{api/utilities/translation → translation}/RgbColor.d.ts +0 -0
- /package/lib/{api/utilities/translation → translation}/RgbColor.js +0 -0
- /package/lib/{api/utilities → translation}/SavedViewTypes.js +0 -0
- /package/lib/{api/utilities/translation → translation}/SavedViewsExtensionHandlers.d.ts +0 -0
- /package/lib/{api/utilities/translation → translation}/clipVectorsExtractor.d.ts +0 -0
- /package/lib/{api/utilities/translation → translation}/clipVectorsExtractor.js +0 -0
- /package/lib/{api/utilities/translation → translation}/clipVectorsLegacyExtractor.d.ts +0 -0
- /package/lib/{api/utilities/translation → translation}/clipVectorsLegacyExtractor.js +0 -0
- /package/lib/{api/utilities/translation → translation}/displayStyleExtractor.d.ts +0 -0
- /package/lib/{api/utilities/translation → translation}/displayStyleExtractor.js +0 -0
- /package/lib/{api/utilities/translation → translation}/extensionExtractor.js +0 -0
- /package/lib/{api/utilities/translation → translation}/extractionUtilities.d.ts +0 -0
- /package/lib/{api/utilities/translation → translation}/extractionUtilities.js +0 -0
package/lib/SavedView.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ export interface SavedView {
|
|
|
7
7
|
tagIds?: string[] | undefined;
|
|
8
8
|
shared?: boolean | undefined;
|
|
9
9
|
thumbnail?: ReactNode | string | undefined;
|
|
10
|
+
/** `extensionName` and `data` pairs. */
|
|
11
|
+
extensions?: Map<string, string> | undefined;
|
|
12
|
+
/** Time the saved view was created as an ISO8601 string, `"YYYY-MM-DDTHH:mm:ss.sssZ"` */
|
|
13
|
+
creationTime?: string;
|
|
14
|
+
/** Time the saved view was last modified as an ISO8601 string, `"YYYY-MM-DDTHH:mm:ss.sssZ"` */
|
|
15
|
+
lastModified?: string;
|
|
10
16
|
}
|
|
11
17
|
export interface SavedViewTag {
|
|
12
18
|
id: string;
|
|
@@ -125,6 +125,8 @@ function savedViewResponseToSavedView(response) {
|
|
|
125
125
|
creatorId: response._links.creator?.href.split("/").at(-1),
|
|
126
126
|
shared: response.shared,
|
|
127
127
|
thumbnail: undefined,
|
|
128
|
+
creationTime: response.creationTime,
|
|
129
|
+
lastModified: response.lastModified,
|
|
128
130
|
};
|
|
129
131
|
}
|
|
130
132
|
function groupResponseToSavedViewGroup(response) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { QueryRowFormat } from "@itwin/core-common";
|
|
2
|
-
import { extractClipVectorsFromLegacy } from "./
|
|
3
|
-
import { extractDisplayStyle2dFromLegacy, extractDisplayStyle3dFromLegacy, } from "./
|
|
2
|
+
import { extractClipVectorsFromLegacy } from "./translation/clipVectorsLegacyExtractor.js";
|
|
3
|
+
import { extractDisplayStyle2dFromLegacy, extractDisplayStyle3dFromLegacy, } from "./translation/displayStyleExtractor.js";
|
|
4
4
|
export async function captureSavedViewData(args) {
|
|
5
5
|
const { captureHiddenModelsAndCategories = true } = args;
|
|
6
6
|
const hiddenCategoriesPromise = captureHiddenModelsAndCategories
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type IModelConnection, type ViewState } from "@itwin/core-frontend";
|
|
2
|
+
import { type SavedViewRepresentation } from "@itwin/saved-views-client";
|
|
3
|
+
export declare function createViewState(iModel: IModelConnection, savedViewRsp: SavedViewRepresentation, useHiddenModelsAndCategories?: boolean): Promise<ViewState | undefined>;
|
|
@@ -0,0 +1,245 @@
|
|
|
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 { Camera, IModelReadRpcInterface, } from "@itwin/core-common";
|
|
6
|
+
import { DrawingViewState, SheetViewState, SpatialViewState, } from "@itwin/core-frontend";
|
|
7
|
+
import { isViewDataITwin3d, isViewDataITwinDrawing, isViewDataITwinSheet, } from "@itwin/saved-views-client";
|
|
8
|
+
import { getMissingCategories, getMissingModels } from "./captureSavedViewData.js";
|
|
9
|
+
import { extractClipVectors } from "./translation/clipVectorsExtractor.js";
|
|
10
|
+
import { extractDisplayStyle, extractDisplayStyle3d } from "./translation/displayStyleExtractor.js";
|
|
11
|
+
export async function createViewState(iModel, savedViewRsp, useHiddenModelsAndCategories = true) {
|
|
12
|
+
const viewState = await createViewStateVariant(iModel, savedViewRsp);
|
|
13
|
+
if (useHiddenModelsAndCategories) {
|
|
14
|
+
await applyHiddenModelsAndCategories(iModel, viewState, savedViewRsp);
|
|
15
|
+
}
|
|
16
|
+
await viewState.load();
|
|
17
|
+
return viewState;
|
|
18
|
+
}
|
|
19
|
+
async function createViewStateVariant(iModel, savedViewRsp) {
|
|
20
|
+
if (isViewDataITwinDrawing(savedViewRsp.savedViewData)) {
|
|
21
|
+
return createDrawingViewState(iModel, savedViewRsp.savedViewData.itwinDrawingView);
|
|
22
|
+
}
|
|
23
|
+
if (isViewDataITwinSheet(savedViewRsp.savedViewData)) {
|
|
24
|
+
return createSheetViewState(iModel, savedViewRsp.savedViewData.itwinSheetView);
|
|
25
|
+
}
|
|
26
|
+
return createSpatialViewState(iModel, savedViewRsp.savedViewData.itwin3dView);
|
|
27
|
+
}
|
|
28
|
+
async function createSpatialViewState(iModel, viewData) {
|
|
29
|
+
const seedViewState = await fetchIModelViewData(iModel, SpatialViewState.classFullName);
|
|
30
|
+
const props = {
|
|
31
|
+
viewDefinitionProps: {
|
|
32
|
+
origin: viewData.origin,
|
|
33
|
+
extents: viewData.extents,
|
|
34
|
+
angles: viewData.angles,
|
|
35
|
+
camera: viewData.camera ?? new Camera(),
|
|
36
|
+
jsonProperties: {
|
|
37
|
+
viewDetails: extractClipVectors(viewData),
|
|
38
|
+
},
|
|
39
|
+
classFullName: seedViewState.classFullName,
|
|
40
|
+
code: seedViewState.code,
|
|
41
|
+
model: seedViewState.model,
|
|
42
|
+
categorySelectorId: seedViewState.categorySelector.id,
|
|
43
|
+
displayStyleId: seedViewState.displayStyle.id,
|
|
44
|
+
cameraOn: viewData.camera !== undefined,
|
|
45
|
+
modelSelectorId: seedViewState.modelSelector.id,
|
|
46
|
+
},
|
|
47
|
+
categorySelectorProps: {
|
|
48
|
+
classFullName: seedViewState.categorySelector.classFullName,
|
|
49
|
+
categories: viewData.categories?.enabled ?? [],
|
|
50
|
+
code: cloneCode(seedViewState.categorySelector.code),
|
|
51
|
+
model: seedViewState.categorySelector.model,
|
|
52
|
+
},
|
|
53
|
+
modelSelectorProps: {
|
|
54
|
+
classFullName: seedViewState.modelSelector.classFullName,
|
|
55
|
+
code: cloneCode(seedViewState.modelSelector.code),
|
|
56
|
+
model: seedViewState.modelSelector.model,
|
|
57
|
+
models: viewData.models?.enabled ?? [],
|
|
58
|
+
},
|
|
59
|
+
displayStyleProps: {
|
|
60
|
+
id: seedViewState.displayStyle.id,
|
|
61
|
+
classFullName: seedViewState.displayStyle.classFullName,
|
|
62
|
+
code: seedViewState.displayStyle.code,
|
|
63
|
+
model: seedViewState.displayStyle.model,
|
|
64
|
+
jsonProperties: {
|
|
65
|
+
styles: extractDisplayStyle3d(viewData),
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
return SpatialViewState.createFromProps(props, iModel);
|
|
70
|
+
}
|
|
71
|
+
async function createDrawingViewState(iModel, viewData) {
|
|
72
|
+
const seedViewState = await fetchIModelViewData(iModel, DrawingViewState.classFullName);
|
|
73
|
+
const props = {
|
|
74
|
+
viewDefinitionProps: {
|
|
75
|
+
classFullName: seedViewState.classFullName,
|
|
76
|
+
id: seedViewState.id,
|
|
77
|
+
jsonProperties: {
|
|
78
|
+
viewDetails: {
|
|
79
|
+
gridOrient: seedViewState.getGridOrientation(),
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
code: cloneCode(seedViewState.code),
|
|
83
|
+
model: seedViewState.model,
|
|
84
|
+
federationGuid: seedViewState.federationGuid,
|
|
85
|
+
categorySelectorId: seedViewState.categorySelector.id,
|
|
86
|
+
displayStyleId: seedViewState.displayStyle.id,
|
|
87
|
+
isPrivate: seedViewState.isPrivate,
|
|
88
|
+
description: seedViewState.description,
|
|
89
|
+
origin: viewData.origin,
|
|
90
|
+
delta: viewData.delta,
|
|
91
|
+
angle: viewData.angle,
|
|
92
|
+
baseModelId: viewData.baseModelId,
|
|
93
|
+
},
|
|
94
|
+
categorySelectorProps: {
|
|
95
|
+
classFullName: seedViewState.categorySelector.classFullName,
|
|
96
|
+
categories: viewData.categories?.enabled ?? [],
|
|
97
|
+
code: cloneCode(seedViewState.categorySelector.code),
|
|
98
|
+
model: seedViewState.categorySelector.model,
|
|
99
|
+
federationGuid: seedViewState.categorySelector.federationGuid,
|
|
100
|
+
id: seedViewState.categorySelector.id,
|
|
101
|
+
},
|
|
102
|
+
displayStyleProps: {
|
|
103
|
+
classFullName: seedViewState.displayStyle.classFullName,
|
|
104
|
+
id: seedViewState.displayStyle.id,
|
|
105
|
+
jsonProperties: {
|
|
106
|
+
styles: extractDisplayStyle(viewData, seedViewState),
|
|
107
|
+
},
|
|
108
|
+
code: cloneCode(seedViewState.displayStyle.code),
|
|
109
|
+
model: seedViewState.displayStyle.model,
|
|
110
|
+
federationGuid: seedViewState.displayStyle.federationGuid,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
return DrawingViewState.createFromProps(props, iModel);
|
|
114
|
+
}
|
|
115
|
+
async function createSheetViewState(iModel, viewData) {
|
|
116
|
+
const seedViewState = await fetchIModelViewData(iModel, SheetViewState.classFullName);
|
|
117
|
+
const props = {
|
|
118
|
+
viewDefinitionProps: {
|
|
119
|
+
classFullName: seedViewState.classFullName,
|
|
120
|
+
id: seedViewState.id,
|
|
121
|
+
jsonProperties: {
|
|
122
|
+
viewDetails: {
|
|
123
|
+
gridOrient: seedViewState.getGridOrientation(),
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
code: cloneCode(seedViewState.code),
|
|
127
|
+
model: seedViewState.model,
|
|
128
|
+
federationGuid: seedViewState.federationGuid,
|
|
129
|
+
categorySelectorId: seedViewState.categorySelector.id,
|
|
130
|
+
displayStyleId: seedViewState.displayStyle.id,
|
|
131
|
+
isPrivate: seedViewState.isPrivate,
|
|
132
|
+
description: seedViewState.description,
|
|
133
|
+
origin: viewData.origin,
|
|
134
|
+
delta: viewData.delta,
|
|
135
|
+
angle: viewData.angle,
|
|
136
|
+
baseModelId: viewData.baseModelId,
|
|
137
|
+
},
|
|
138
|
+
categorySelectorProps: {
|
|
139
|
+
classFullName: seedViewState.categorySelector.classFullName,
|
|
140
|
+
categories: viewData.categories?.enabled ?? [],
|
|
141
|
+
code: cloneCode(seedViewState.categorySelector.code),
|
|
142
|
+
model: seedViewState.categorySelector.model,
|
|
143
|
+
federationGuid: seedViewState.categorySelector.federationGuid,
|
|
144
|
+
id: seedViewState.categorySelector.id,
|
|
145
|
+
},
|
|
146
|
+
displayStyleProps: {
|
|
147
|
+
classFullName: seedViewState.displayStyle.classFullName,
|
|
148
|
+
id: seedViewState.displayStyle.id,
|
|
149
|
+
jsonProperties: {
|
|
150
|
+
styles: extractDisplayStyle(viewData, seedViewState),
|
|
151
|
+
},
|
|
152
|
+
code: cloneCode(seedViewState.displayStyle.code),
|
|
153
|
+
model: seedViewState.displayStyle.model,
|
|
154
|
+
federationGuid: seedViewState.displayStyle.federationGuid,
|
|
155
|
+
},
|
|
156
|
+
sheetProps: {
|
|
157
|
+
width: viewData.width,
|
|
158
|
+
height: viewData.height,
|
|
159
|
+
model: seedViewState.displayStyle.model,
|
|
160
|
+
classFullName: SheetViewState.classFullName,
|
|
161
|
+
code: {
|
|
162
|
+
spec: seedViewState.displayStyle.code.spec,
|
|
163
|
+
scope: seedViewState.displayStyle.code.scope,
|
|
164
|
+
value: "",
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
sheetAttachments: viewData.sheetAttachments,
|
|
168
|
+
};
|
|
169
|
+
return SheetViewState.createFromProps(props, iModel);
|
|
170
|
+
}
|
|
171
|
+
async function fetchIModelViewData(iModel, viewClassName) {
|
|
172
|
+
if (iModel.isBlankConnection()) {
|
|
173
|
+
return createEmptyViewState(iModel, viewClassName);
|
|
174
|
+
}
|
|
175
|
+
const viewId = await getDefaultViewIdFromClassName(iModel, viewClassName);
|
|
176
|
+
if (viewId === "") {
|
|
177
|
+
return createEmptyViewState(iModel, viewClassName);
|
|
178
|
+
}
|
|
179
|
+
return iModel.views.load(viewId);
|
|
180
|
+
}
|
|
181
|
+
function createEmptyViewState(iModel, viewClassName) {
|
|
182
|
+
const blankViewState = SpatialViewState.createBlank(iModel, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 });
|
|
183
|
+
if (viewClassName === SpatialViewState.classFullName) {
|
|
184
|
+
return blankViewState;
|
|
185
|
+
}
|
|
186
|
+
const blankViewStateProps = {
|
|
187
|
+
viewDefinitionProps: blankViewState.toJSON(),
|
|
188
|
+
categorySelectorProps: blankViewState.categorySelector.toJSON(),
|
|
189
|
+
displayStyleProps: blankViewState.displayStyle.toJSON(),
|
|
190
|
+
};
|
|
191
|
+
switch (viewClassName) {
|
|
192
|
+
case DrawingViewState.classFullName:
|
|
193
|
+
return DrawingViewState.createFromProps(blankViewStateProps, iModel);
|
|
194
|
+
case SheetViewState.classFullName:
|
|
195
|
+
return SheetViewState.createFromProps(blankViewStateProps, iModel);
|
|
196
|
+
default:
|
|
197
|
+
return blankViewState;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async function getDefaultViewIdFromClassName(iModel, viewClassName) {
|
|
201
|
+
// Check validity of default view
|
|
202
|
+
const viewId = await iModel.views.queryDefaultViewId();
|
|
203
|
+
const params = {};
|
|
204
|
+
params.from = viewClassName;
|
|
205
|
+
params.where = "ECInstanceId=" + viewId;
|
|
206
|
+
const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(iModel.getRpcProps(), params);
|
|
207
|
+
if (viewProps.length > 0) {
|
|
208
|
+
return viewId;
|
|
209
|
+
}
|
|
210
|
+
// Return the first view we can find
|
|
211
|
+
const viewList = await iModel.views.getViewList({ from: viewClassName, wantPrivate: false });
|
|
212
|
+
if (viewList.length === 0) {
|
|
213
|
+
return "";
|
|
214
|
+
}
|
|
215
|
+
return viewList[0].id;
|
|
216
|
+
}
|
|
217
|
+
function cloneCode({ spec, scope, value }) {
|
|
218
|
+
return { spec, scope, value };
|
|
219
|
+
}
|
|
220
|
+
async function applyHiddenModelsAndCategories(iModel, viewState, savedViewRsp) {
|
|
221
|
+
if (isViewDataITwin3d(savedViewRsp.savedViewData)) {
|
|
222
|
+
if (!viewState.isSpatialView()) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const savedViewData = savedViewRsp.savedViewData.itwin3dView;
|
|
226
|
+
if (!savedViewData.categories?.disabled || !savedViewData.models?.disabled) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const [visibleCategories, visibleModels] = await Promise.all([
|
|
230
|
+
getMissingCategories(iModel, new Set(savedViewData.categories.disabled)),
|
|
231
|
+
getMissingModels(iModel, new Set(savedViewData.models.disabled)),
|
|
232
|
+
]);
|
|
233
|
+
viewState.categorySelector.addCategories(visibleCategories);
|
|
234
|
+
viewState.modelSelector.addModels(visibleModels);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const savedViewData = isViewDataITwinDrawing(savedViewRsp.savedViewData)
|
|
238
|
+
? savedViewRsp.savedViewData.itwinDrawingView
|
|
239
|
+
: savedViewRsp.savedViewData.itwinSheetView;
|
|
240
|
+
if (!savedViewData.categories?.disabled) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const visibleCategories = await getMissingCategories(iModel, new Set(savedViewData.categories.disabled));
|
|
244
|
+
viewState.categorySelector.addCategories(visibleCategories);
|
|
245
|
+
}
|
package/lib/experimental.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createSavedViewOptions, type CreateSavedViewOptionsParams } from "./SavedViewTile/SavedViewOptions.js";
|
|
2
2
|
export { SavedViewsExpandableBlockWidget } from "./SavedViewsWidget/SavedViewsExpandableBlockWidget.js";
|
|
3
3
|
export { SavedViewsFolderWidget } from "./SavedViewsWidget/SavedViewsFolderWidget.js";
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
6
|
-
export { ModelCategoryOverrideProvider } from "./
|
|
4
|
+
export { applyExtensionsToViewport } from "./translation/SavedViewTranslation.js";
|
|
5
|
+
export { createViewState } from "./createViewState.js";
|
|
6
|
+
export { ModelCategoryOverrideProvider } from "./ModelCategoryOverrideProvider.js";
|
package/lib/experimental.js
CHANGED
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
export { createSavedViewOptions } from "./SavedViewTile/SavedViewOptions.js";
|
|
6
6
|
export { SavedViewsExpandableBlockWidget } from "./SavedViewsWidget/SavedViewsExpandableBlockWidget.js";
|
|
7
7
|
export { SavedViewsFolderWidget } from "./SavedViewsWidget/SavedViewsFolderWidget.js";
|
|
8
|
-
export { applyExtensionsToViewport
|
|
9
|
-
export {
|
|
8
|
+
export { applyExtensionsToViewport } from "./translation/SavedViewTranslation.js";
|
|
9
|
+
export { createViewState } from "./createViewState.js";
|
|
10
|
+
export { ModelCategoryOverrideProvider } from "./ModelCategoryOverrideProvider.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Viewport } from "@itwin/core-frontend";
|
|
2
|
+
import type { SavedView } from "../SavedView.js";
|
|
3
|
+
/** Apply extension data (overrides) onto the supplied viewport. Only works with legacy-formatted extension data. */
|
|
4
|
+
export declare function applyExtensionsToViewport(viewport: Viewport, savedView: SavedView): Promise<void>;
|
|
@@ -0,0 +1,25 @@
|
|
|
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 } from "@itwin/core-frontend";
|
|
6
|
+
import { SavedViewsExtensionHandlers } from "./SavedViewsExtensionHandlers.js";
|
|
7
|
+
/** Apply extension data (overrides) onto the supplied viewport. Only works with legacy-formatted extension data. */
|
|
8
|
+
export async function applyExtensionsToViewport(viewport, savedView) {
|
|
9
|
+
// Clear the current if there's any (this should always happen, even if there are no extensions)
|
|
10
|
+
if (EmphasizeElements.get(viewport)) {
|
|
11
|
+
EmphasizeElements.clear(viewport);
|
|
12
|
+
viewport.isFadeOutActive = false;
|
|
13
|
+
}
|
|
14
|
+
const defaultHandlers = [
|
|
15
|
+
SavedViewsExtensionHandlers.EmphasizeElements,
|
|
16
|
+
SavedViewsExtensionHandlers.PerModelCategoryVisibility,
|
|
17
|
+
SavedViewsExtensionHandlers.VisibilityOverride,
|
|
18
|
+
];
|
|
19
|
+
for (const extHandler of defaultHandlers) {
|
|
20
|
+
const extData = savedView.extensions?.get(extHandler.extensionName);
|
|
21
|
+
if (extData) {
|
|
22
|
+
await extHandler.onViewApply(extData, viewport);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import type { Id64Array } from "@itwin/core-bentley";
|
|
2
2
|
import type { CategorySelectorProps, DisplayStyle3dProps, DisplayStyleProps, EmphasizeElementsProps, ModelSelectorProps, SectionDrawingViewProps, SheetProps, SpatialViewDefinitionProps, ViewDefinition2dProps } from "@itwin/core-common";
|
|
3
3
|
import type { Range3dProps } from "@itwin/core-geometry";
|
|
4
|
-
import type { ModelCategoryOverrideProviderProps } from "
|
|
5
|
-
|
|
4
|
+
import type { ModelCategoryOverrideProviderProps } from "../ModelCategoryOverrideProvider.js";
|
|
5
|
+
export interface LegacySavedView3d extends LegacySavedViewBase {
|
|
6
|
+
displayStyleProps: DisplayStyle3dProps;
|
|
7
|
+
modelSelectorProps: ModelSelectorProps;
|
|
8
|
+
modelExtents?: Range3dProps;
|
|
9
|
+
viewDefinitionProps: SpatialViewDefinitionProps;
|
|
10
|
+
perModelCategoryVisibility?: PerModelCategoryVisibilityProps[];
|
|
11
|
+
hiddenModels?: Id64Array;
|
|
12
|
+
}
|
|
6
13
|
export interface PerModelCategoryVisibilityProps {
|
|
7
14
|
modelId: string;
|
|
8
15
|
categoryId: string;
|
|
9
16
|
visible: boolean;
|
|
10
17
|
}
|
|
18
|
+
export interface LegacySavedView2d extends LegacySavedViewBase {
|
|
19
|
+
viewDefinitionProps: ViewDefinition2dProps;
|
|
20
|
+
displayStyleProps: DisplayStyleProps;
|
|
21
|
+
sectionDrawing?: SectionDrawingViewProps;
|
|
22
|
+
sheetProps?: SheetProps;
|
|
23
|
+
sheetAttachments?: Id64Array;
|
|
24
|
+
}
|
|
11
25
|
export interface LegacySavedViewBase {
|
|
12
26
|
id: string;
|
|
13
27
|
name: string;
|
|
@@ -24,24 +38,6 @@ export interface LegacySavedViewBase {
|
|
|
24
38
|
hiddenCategories?: Id64Array;
|
|
25
39
|
extensions?: Map<string, string>;
|
|
26
40
|
}
|
|
27
|
-
export interface LegacySavedView2d extends LegacySavedViewBase {
|
|
28
|
-
viewDefinitionProps: ViewDefinition2dProps;
|
|
29
|
-
displayStyleProps: DisplayStyleProps;
|
|
30
|
-
sectionDrawing?: SectionDrawingViewProps;
|
|
31
|
-
sheetProps?: SheetProps;
|
|
32
|
-
sheetAttachments?: Id64Array;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Format for a saved view setting instance in the service
|
|
36
|
-
*/
|
|
37
|
-
export interface LegacySavedView3d extends LegacySavedViewBase {
|
|
38
|
-
displayStyleProps: DisplayStyle3dProps;
|
|
39
|
-
modelSelectorProps: ModelSelectorProps;
|
|
40
|
-
modelExtents?: Range3dProps;
|
|
41
|
-
viewDefinitionProps: SpatialViewDefinitionProps;
|
|
42
|
-
perModelCategoryVisibility?: PerModelCategoryVisibilityProps[];
|
|
43
|
-
hiddenModels?: Id64Array;
|
|
44
|
-
}
|
|
45
41
|
export interface LegacyTag {
|
|
46
42
|
name: string;
|
|
47
43
|
createdByUserId: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EmphasizeElements, PerModelCategoryVisibility } from "@itwin/core-frontend";
|
|
2
|
-
import { ModelCategoryOverrideProvider } from "
|
|
2
|
+
import { ModelCategoryOverrideProvider } from "../ModelCategoryOverrideProvider.js";
|
|
3
3
|
import { extractEmphasizeElements, extractPerModelCategoryVisibility, extractVisibilityOverride, } from "./extensionExtractor.js";
|
|
4
4
|
/**
|
|
5
5
|
* Collection of default extension handlers
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type EmphasizeElementsProps } from "@itwin/core-common";
|
|
2
|
-
import { ModelCategoryOverrideProviderProps } from "
|
|
3
|
-
import type { PerModelCategoryVisibilityProps } from "
|
|
2
|
+
import { ModelCategoryOverrideProviderProps } from "../ModelCategoryOverrideProvider.js";
|
|
3
|
+
import type { PerModelCategoryVisibilityProps } from "./SavedViewTypes.js";
|
|
4
4
|
/**
|
|
5
5
|
* Extracts the EmphasizeElementsProps from string data in an extension
|
|
6
6
|
* @param extensionData
|
package/package.json
CHANGED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { LegacySavedView3d, LegacySavedView2d, LegacySavedViewBase } from "../utilities/SavedViewTypes.js";
|
|
2
|
-
/** Is a 3d saved view */
|
|
3
|
-
export declare function isSavedView3d(view: LegacySavedViewBase): view is LegacySavedView3d;
|
|
4
|
-
/** Is a 3d spatial saved view */
|
|
5
|
-
export declare function isSpatialSavedView(view: LegacySavedViewBase): view is LegacySavedView3d;
|
|
6
|
-
/** Is a 2d drawing saved view */
|
|
7
|
-
export declare function isDrawingSavedView(view: LegacySavedViewBase): view is LegacySavedView2d;
|
|
8
|
-
/** Is a 2d sheet saved view */
|
|
9
|
-
export declare function isSheetSavedView(view: LegacySavedViewBase): view is LegacySavedView2d;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/** Is a 3d saved view */
|
|
2
|
-
export function isSavedView3d(view) {
|
|
3
|
-
return !view.is2d;
|
|
4
|
-
}
|
|
5
|
-
/** Is a 3d spatial saved view */
|
|
6
|
-
export function isSpatialSavedView(view) {
|
|
7
|
-
return ((view.is2d === undefined || !view.is2d) && "modelSelectorProps" in view);
|
|
8
|
-
}
|
|
9
|
-
/** Is a 2d drawing saved view */
|
|
10
|
-
export function isDrawingSavedView(view) {
|
|
11
|
-
return view.is2d !== undefined && view.is2d && !("sheetProps" in view);
|
|
12
|
-
}
|
|
13
|
-
/** Is a 2d sheet saved view */
|
|
14
|
-
export function isSheetSavedView(view) {
|
|
15
|
-
return view.is2d !== undefined && view.is2d && "sheetProps" in view;
|
|
16
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { SpatialViewState, type IModelConnection, type ViewState, type Viewport } from "@itwin/core-frontend";
|
|
2
|
-
import { type SavedViewRepresentation } from "@itwin/saved-views-client";
|
|
3
|
-
import type { LegacySavedView3d, LegacySavedViewBase } from "../SavedViewTypes.js";
|
|
4
|
-
/**
|
|
5
|
-
* Converts a legacy saved view (response) to an iTwin.js ViewState.
|
|
6
|
-
* @param legacySavedView a saved view response that includes a legacy view
|
|
7
|
-
* @param iModel the {@linkcode IModelConnection} for the saved view; used to query for additional information
|
|
8
|
-
* @param useHiddenModelsAndCategories when explicitly set to `false`, the returned {@linkcode ViewState} does not have
|
|
9
|
-
* populated category and model selectors
|
|
10
|
-
* @returns a {@linkcode ViewState} with the saved view applied
|
|
11
|
-
*/
|
|
12
|
-
export declare function translateLegacySavedViewToITwinJsViewState(legacySavedView: LegacySavedViewBase, iModel: IModelConnection, useHiddenModelsAndCategories?: boolean): Promise<ViewState | undefined>;
|
|
13
|
-
export declare function augmentWithScheduleScript(iModel: IModelConnection, savedView: LegacySavedView3d, viewState: SpatialViewState): Promise<boolean>;
|
|
14
|
-
/**
|
|
15
|
-
* Apply extension data (overrides) onto the supplied viewport. Only works with legacy-formatted extension data.
|
|
16
|
-
* @param viewport The {@link Viewport} used to display the saved view and iModel.
|
|
17
|
-
* @param legacySavedView A saved view response that includes a legacy view.
|
|
18
|
-
*/
|
|
19
|
-
export declare function applyExtensionsToViewport(viewport: Viewport, legacySavedView: LegacySavedViewBase): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Creates legacy saved view data from a saved view response.
|
|
22
|
-
* @param savedViewResponse A saved view response with or without a legacy view.
|
|
23
|
-
* @param iModel The {@link IModelConnection} for the saved view; used to query for additional information.
|
|
24
|
-
* @resolves The saved views formatted as a legacy SavedViewBase.
|
|
25
|
-
*/
|
|
26
|
-
export declare function translateSavedViewToLegacySavedView(iModel: IModelConnection, savedViewResponse: SavedViewRepresentation): Promise<LegacySavedViewBase>;
|
|
@@ -1,246 +0,0 @@
|
|
|
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 { IModelReadRpcInterface } from "@itwin/core-common";
|
|
6
|
-
import { DisplayStyle3dState, DrawingViewState, EmphasizeElements, SheetViewState, SpatialViewState, } from "@itwin/core-frontend";
|
|
7
|
-
import { isViewDataITwin3d, isViewDataITwinDrawing, isViewDataITwinSheet, } from "@itwin/saved-views-client";
|
|
8
|
-
import { getMissingCategories, getMissingModels } from "../../../captureSavedViewData.js";
|
|
9
|
-
import { isDrawingSavedView, isSavedView3d, isSheetSavedView, isSpatialSavedView, } from "../../clients/ISavedViewsClient.js";
|
|
10
|
-
import { SavedViewsExtensionHandlers } from "./SavedViewsExtensionHandlers.js";
|
|
11
|
-
import { savedViewITwin3dToLegacy3dSavedView, savedViewItwinDrawingToLegacyDrawingView, savedViewItwinSheetToLegacySheetSavedView, } from "./viewExtractorSavedViewToLegacySavedView.js";
|
|
12
|
-
/**
|
|
13
|
-
* Converts a legacy saved view (response) to an iTwin.js ViewState.
|
|
14
|
-
* @param legacySavedView a saved view response that includes a legacy view
|
|
15
|
-
* @param iModel the {@linkcode IModelConnection} for the saved view; used to query for additional information
|
|
16
|
-
* @param useHiddenModelsAndCategories when explicitly set to `false`, the returned {@linkcode ViewState} does not have
|
|
17
|
-
* populated category and model selectors
|
|
18
|
-
* @returns a {@linkcode ViewState} with the saved view applied
|
|
19
|
-
*/
|
|
20
|
-
export async function translateLegacySavedViewToITwinJsViewState(legacySavedView, iModel, useHiddenModelsAndCategories = true) {
|
|
21
|
-
const viewState = await createViewState(iModel, legacySavedView);
|
|
22
|
-
if (viewState && useHiddenModelsAndCategories) {
|
|
23
|
-
await applyHiddenModelsAndCategories(iModel, viewState, legacySavedView);
|
|
24
|
-
}
|
|
25
|
-
return viewState;
|
|
26
|
-
}
|
|
27
|
-
async function createViewState(iModel, savedView) {
|
|
28
|
-
if (isSpatialSavedView(savedView)) {
|
|
29
|
-
return createSpatialViewState(iModel, savedView);
|
|
30
|
-
}
|
|
31
|
-
if (isDrawingSavedView(savedView)) {
|
|
32
|
-
return createDrawingViewState(iModel, savedView);
|
|
33
|
-
}
|
|
34
|
-
if (isSheetSavedView(savedView)) {
|
|
35
|
-
return createSheetViewState(iModel, savedView);
|
|
36
|
-
}
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
async function createSpatialViewState(iModel, savedView) {
|
|
40
|
-
const props = {
|
|
41
|
-
viewDefinitionProps: savedView.viewDefinitionProps,
|
|
42
|
-
categorySelectorProps: savedView.categorySelectorProps,
|
|
43
|
-
modelSelectorProps: savedView.modelSelectorProps,
|
|
44
|
-
displayStyleProps: savedView.displayStyleProps,
|
|
45
|
-
};
|
|
46
|
-
const viewState = SpatialViewState.createFromProps(props, iModel);
|
|
47
|
-
await viewState.load();
|
|
48
|
-
return viewState;
|
|
49
|
-
}
|
|
50
|
-
async function createDrawingViewState(iModelConnection, savedView) {
|
|
51
|
-
const props = {
|
|
52
|
-
viewDefinitionProps: savedView.viewDefinitionProps,
|
|
53
|
-
categorySelectorProps: savedView.categorySelectorProps,
|
|
54
|
-
displayStyleProps: savedView.displayStyleProps,
|
|
55
|
-
};
|
|
56
|
-
const viewState = DrawingViewState.createFromProps(props, iModelConnection);
|
|
57
|
-
await viewState.load();
|
|
58
|
-
return viewState;
|
|
59
|
-
}
|
|
60
|
-
async function createSheetViewState(iModelConnection, savedView) {
|
|
61
|
-
if (savedView.sheetProps === undefined || savedView.sheetAttachments === undefined) {
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
const props = {
|
|
65
|
-
viewDefinitionProps: savedView.viewDefinitionProps,
|
|
66
|
-
categorySelectorProps: savedView.categorySelectorProps,
|
|
67
|
-
displayStyleProps: savedView.displayStyleProps,
|
|
68
|
-
sheetProps: savedView.sheetProps,
|
|
69
|
-
sheetAttachments: savedView.sheetAttachments,
|
|
70
|
-
};
|
|
71
|
-
const viewState = SheetViewState.createFromProps(props, iModelConnection);
|
|
72
|
-
await viewState.load();
|
|
73
|
-
return viewState;
|
|
74
|
-
}
|
|
75
|
-
async function applyHiddenModelsAndCategories(iModel, viewState, savedView) {
|
|
76
|
-
if (!legacyViewHasValidHiddenModelsAndCategories(savedView)) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const visible = await getVisibleModelsAndCategories(savedView, iModel);
|
|
80
|
-
if (visible.categories) {
|
|
81
|
-
viewState.categorySelector.addCategories(visible.categories);
|
|
82
|
-
}
|
|
83
|
-
if (viewState.isSpatialView() && visible.models) {
|
|
84
|
-
viewState.modelSelector.addModels(visible.models);
|
|
85
|
-
}
|
|
86
|
-
await viewState.load();
|
|
87
|
-
}
|
|
88
|
-
function legacyViewHasValidHiddenModelsAndCategories(savedView) {
|
|
89
|
-
if (isSavedView3d(savedView)) {
|
|
90
|
-
return !!(savedView.hiddenCategories && savedView.hiddenModels);
|
|
91
|
-
}
|
|
92
|
-
return !!savedView.hiddenCategories;
|
|
93
|
-
}
|
|
94
|
-
async function getVisibleModelsAndCategories(savedView, iModel) {
|
|
95
|
-
return {
|
|
96
|
-
models: isSavedView3d(savedView) ? await getMissingModels(iModel, new Set(savedView.hiddenModels)) : undefined,
|
|
97
|
-
categories: await getMissingCategories(iModel, new Set(savedView.hiddenCategories)),
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
export async function augmentWithScheduleScript(iModel, savedView, viewState) {
|
|
101
|
-
if (!savedView.displayStyleProps.jsonProperties?.styles?.timePoint) {
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
try {
|
|
105
|
-
const viewList = await iModel.views.getViewList({ wantPrivate: false });
|
|
106
|
-
const viewStates = await Promise.all(viewList.map(({ id }) => iModel.views.load(id)));
|
|
107
|
-
const scheduleViewState = viewStates.find(({ scheduleScript }) => scheduleScript && !scheduleScript.duration.isNull);
|
|
108
|
-
if (scheduleViewState) {
|
|
109
|
-
savedView.displayStyleProps.id = scheduleViewState.id;
|
|
110
|
-
viewState.displayStyle = new DisplayStyle3dState(savedView.displayStyleProps, iModel, scheduleViewState.displayStyle);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Apply extension data (overrides) onto the supplied viewport. Only works with legacy-formatted extension data.
|
|
120
|
-
* @param viewport The {@link Viewport} used to display the saved view and iModel.
|
|
121
|
-
* @param legacySavedView A saved view response that includes a legacy view.
|
|
122
|
-
*/
|
|
123
|
-
export async function applyExtensionsToViewport(viewport, legacySavedView) {
|
|
124
|
-
// Clear the current if there's any (this should always happen, even if there are no extensions)
|
|
125
|
-
if (EmphasizeElements.get(viewport)) {
|
|
126
|
-
EmphasizeElements.clear(viewport);
|
|
127
|
-
viewport.isFadeOutActive = false;
|
|
128
|
-
}
|
|
129
|
-
const defaultHandlers = [
|
|
130
|
-
SavedViewsExtensionHandlers.EmphasizeElements,
|
|
131
|
-
SavedViewsExtensionHandlers.PerModelCategoryVisibility,
|
|
132
|
-
SavedViewsExtensionHandlers.VisibilityOverride,
|
|
133
|
-
];
|
|
134
|
-
for (const extHandler of defaultHandlers) {
|
|
135
|
-
const extData = legacySavedView.extensions?.get(extHandler.extensionName);
|
|
136
|
-
if (extData) {
|
|
137
|
-
await extHandler.onViewApply(extData, viewport);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Creates legacy saved view data from a saved view response.
|
|
143
|
-
* @param savedViewResponse A saved view response with or without a legacy view.
|
|
144
|
-
* @param iModel The {@link IModelConnection} for the saved view; used to query for additional information.
|
|
145
|
-
* @resolves The saved views formatted as a legacy SavedViewBase.
|
|
146
|
-
*/
|
|
147
|
-
export async function translateSavedViewToLegacySavedView(iModel, savedViewResponse) {
|
|
148
|
-
const savedViewData = savedViewResponse.savedViewData;
|
|
149
|
-
// If the legacy view already exists, use that; otherwise, use extraction code to get the legacy view
|
|
150
|
-
let legacySavedView;
|
|
151
|
-
if (savedViewData.legacyView) {
|
|
152
|
-
legacySavedView = savedViewData.legacyView;
|
|
153
|
-
if (isSavedView3d(legacySavedView)) {
|
|
154
|
-
legacySavedView.modelSelectorProps.models = legacySavedView.modelSelectorProps.models.filter((model) => !!model);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
else if (isViewDataITwin3d(savedViewData)) {
|
|
158
|
-
const viewState = await fetchIModelViewData(iModel, ViewTypes.ViewDefinition3d);
|
|
159
|
-
legacySavedView = savedViewITwin3dToLegacy3dSavedView(savedViewResponse, viewState);
|
|
160
|
-
}
|
|
161
|
-
else if (isViewDataITwinDrawing(savedViewData)) {
|
|
162
|
-
const viewState = await fetchIModelViewData(iModel, ViewTypes.DrawingViewDefinition);
|
|
163
|
-
legacySavedView = savedViewItwinDrawingToLegacyDrawingView(savedViewResponse, viewState);
|
|
164
|
-
}
|
|
165
|
-
else if (isViewDataITwinSheet(savedViewData)) {
|
|
166
|
-
const viewState = await fetchIModelViewData(iModel, ViewTypes.SheetViewDefinition);
|
|
167
|
-
legacySavedView = savedViewItwinSheetToLegacySheetSavedView(savedViewResponse, viewState);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
throw new Error("Could not translate itwin-saved-views API response to a SavedViewBaseSetting");
|
|
171
|
-
}
|
|
172
|
-
// Append all extensions to the saved view
|
|
173
|
-
legacySavedView.extensions = new Map();
|
|
174
|
-
for (const { extensionName, data } of savedViewResponse.extensions ?? []) {
|
|
175
|
-
if (extensionName && data) {
|
|
176
|
-
legacySavedView.extensions.set(extensionName, data);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return legacySavedView;
|
|
180
|
-
}
|
|
181
|
-
async function fetchIModelViewData(iModel, viewClassName) {
|
|
182
|
-
if (iModel.isBlankConnection()) {
|
|
183
|
-
return manufactureEmptyViewState(iModel, viewClassName);
|
|
184
|
-
}
|
|
185
|
-
const viewId = await getDefaultViewIdFromClassName(iModel, viewClassName);
|
|
186
|
-
if (viewId === "") {
|
|
187
|
-
return manufactureEmptyViewState(iModel, viewClassName);
|
|
188
|
-
}
|
|
189
|
-
return iModel.views.load(viewId);
|
|
190
|
-
}
|
|
191
|
-
function manufactureEmptyViewState(iModel, viewClassName) {
|
|
192
|
-
const blankViewState = SpatialViewState.createBlank(iModel, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 });
|
|
193
|
-
if (viewClassName === ViewTypes.ViewDefinition3d) {
|
|
194
|
-
return blankViewState;
|
|
195
|
-
}
|
|
196
|
-
const blankViewStateProps = {
|
|
197
|
-
viewDefinitionProps: blankViewState.toJSON(),
|
|
198
|
-
categorySelectorProps: blankViewState.categorySelector.toJSON(),
|
|
199
|
-
displayStyleProps: blankViewState.displayStyle.toJSON(),
|
|
200
|
-
};
|
|
201
|
-
switch (viewClassName) {
|
|
202
|
-
case ViewTypes.DrawingViewDefinition:
|
|
203
|
-
return DrawingViewState.createFromProps(blankViewStateProps, iModel);
|
|
204
|
-
case ViewTypes.SheetViewDefinition:
|
|
205
|
-
return SheetViewState.createFromProps(blankViewStateProps, iModel);
|
|
206
|
-
default:
|
|
207
|
-
return blankViewState;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
async function getDefaultViewIdFromClassName(iModel, savedViewType) {
|
|
211
|
-
let viewFullName = undefined;
|
|
212
|
-
switch (savedViewType) {
|
|
213
|
-
case ViewTypes.ViewDefinition3d:
|
|
214
|
-
viewFullName = SpatialViewState.classFullName;
|
|
215
|
-
break;
|
|
216
|
-
case ViewTypes.DrawingViewDefinition:
|
|
217
|
-
viewFullName = DrawingViewState.classFullName;
|
|
218
|
-
break;
|
|
219
|
-
case ViewTypes.SheetViewDefinition:
|
|
220
|
-
viewFullName = SheetViewState.classFullName;
|
|
221
|
-
break;
|
|
222
|
-
default:
|
|
223
|
-
throw new Error("Unrecognized View Type");
|
|
224
|
-
}
|
|
225
|
-
// Check validity of default view
|
|
226
|
-
const viewId = await iModel.views.queryDefaultViewId();
|
|
227
|
-
const params = {};
|
|
228
|
-
params.from = viewFullName;
|
|
229
|
-
params.where = "ECInstanceId=" + viewId;
|
|
230
|
-
const viewProps = await IModelReadRpcInterface.getClient().queryElementProps(iModel.getRpcProps(), params);
|
|
231
|
-
if (viewProps.length > 0) {
|
|
232
|
-
return viewId;
|
|
233
|
-
}
|
|
234
|
-
// Return the first view we can find
|
|
235
|
-
const viewList = await iModel.views.getViewList({ from: viewFullName, wantPrivate: false });
|
|
236
|
-
if (viewList.length === 0) {
|
|
237
|
-
return "";
|
|
238
|
-
}
|
|
239
|
-
return viewList[0].id;
|
|
240
|
-
}
|
|
241
|
-
var ViewTypes;
|
|
242
|
-
(function (ViewTypes) {
|
|
243
|
-
ViewTypes[ViewTypes["SheetViewDefinition"] = 0] = "SheetViewDefinition";
|
|
244
|
-
ViewTypes[ViewTypes["ViewDefinition3d"] = 1] = "ViewDefinition3d";
|
|
245
|
-
ViewTypes[ViewTypes["DrawingViewDefinition"] = 2] = "DrawingViewDefinition";
|
|
246
|
-
})(ViewTypes || (ViewTypes = {}));
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { SheetViewState, type DrawingViewState, type SpatialViewState } from "@itwin/core-frontend";
|
|
2
|
-
import type { SavedViewRepresentation } from "@itwin/saved-views-client";
|
|
3
|
-
import type { LegacySavedView3d, LegacySavedView2d } from "../SavedViewTypes.js";
|
|
4
|
-
export declare function savedViewITwin3dToLegacy3dSavedView(savedViewRsp: SavedViewRepresentation, seedSpatialViewState: SpatialViewState): LegacySavedView3d;
|
|
5
|
-
/**
|
|
6
|
-
* Transform a ViewDataITwinDrawing into a legacy SavedView if possible
|
|
7
|
-
* @param savedViewRsp
|
|
8
|
-
* @param iModelViewData
|
|
9
|
-
* @returns SavedView2d
|
|
10
|
-
*/
|
|
11
|
-
export declare function savedViewItwinDrawingToLegacyDrawingView(savedViewRsp: SavedViewRepresentation, seedDrawingViewState: DrawingViewState): LegacySavedView2d;
|
|
12
|
-
/**
|
|
13
|
-
* Transform a ViewDataITwinSheet into a legacy SavedView if possible
|
|
14
|
-
* @param savedViewRsp
|
|
15
|
-
* @param seedSheetViewState
|
|
16
|
-
* @returns SavedView2d
|
|
17
|
-
*/
|
|
18
|
-
export declare function savedViewItwinSheetToLegacySheetSavedView(savedViewRsp: SavedViewRepresentation, seedSheetViewState: SheetViewState): LegacySavedView2d;
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import { SheetViewState } from "@itwin/core-frontend";
|
|
2
|
-
import { extractClipVectors } from "./clipVectorsExtractor.js";
|
|
3
|
-
import { extractDisplayStyle, extractDisplayStyle3d } from "./displayStyleExtractor.js";
|
|
4
|
-
export function savedViewITwin3dToLegacy3dSavedView(savedViewRsp, seedSpatialViewState) {
|
|
5
|
-
const modelSelector = seedSpatialViewState.modelSelector;
|
|
6
|
-
const itwin3dView = savedViewRsp.savedViewData.itwin3dView;
|
|
7
|
-
const legacyView = {
|
|
8
|
-
id: savedViewRsp.id,
|
|
9
|
-
is2d: false,
|
|
10
|
-
groupId: savedViewRsp._links.group ? extractIdFromHref(savedViewRsp._links.group.href) : undefined,
|
|
11
|
-
tags: extractTags(savedViewRsp._links.creator?.href ?? "", savedViewRsp.tags),
|
|
12
|
-
name: savedViewRsp.displayName,
|
|
13
|
-
userId: extractIdFromHref(savedViewRsp._links.creator?.href ?? "") ?? "",
|
|
14
|
-
shared: savedViewRsp.shared,
|
|
15
|
-
thumbnailId: savedViewRsp.id ?? "",
|
|
16
|
-
viewDefinitionProps: {
|
|
17
|
-
origin: itwin3dView.origin,
|
|
18
|
-
extents: itwin3dView.extents,
|
|
19
|
-
angles: itwin3dView.angles ?? {},
|
|
20
|
-
camera: itwin3dView.camera,
|
|
21
|
-
jsonProperties: {
|
|
22
|
-
viewDetails: extractClipVectors(itwin3dView) ?? {},
|
|
23
|
-
},
|
|
24
|
-
classFullName: seedSpatialViewState.classFullName,
|
|
25
|
-
code: seedSpatialViewState.code,
|
|
26
|
-
model: seedSpatialViewState.model,
|
|
27
|
-
categorySelectorId: seedSpatialViewState.categorySelector.id,
|
|
28
|
-
displayStyleId: seedSpatialViewState.displayStyle.id,
|
|
29
|
-
cameraOn: itwin3dView.camera !== undefined,
|
|
30
|
-
modelSelectorId: seedSpatialViewState.modelSelector.id,
|
|
31
|
-
},
|
|
32
|
-
modelSelectorProps: {
|
|
33
|
-
classFullName: modelSelector.classFullName,
|
|
34
|
-
code: {
|
|
35
|
-
spec: modelSelector.code.spec,
|
|
36
|
-
scope: modelSelector.code.scope,
|
|
37
|
-
value: modelSelector.code.value,
|
|
38
|
-
},
|
|
39
|
-
model: modelSelector.model,
|
|
40
|
-
models: itwin3dView.models?.enabled ?? [],
|
|
41
|
-
},
|
|
42
|
-
categorySelectorProps: {
|
|
43
|
-
classFullName: seedSpatialViewState.categorySelector.classFullName,
|
|
44
|
-
categories: itwin3dView.categories?.enabled ?? [],
|
|
45
|
-
code: {
|
|
46
|
-
scope: seedSpatialViewState.categorySelector.code.scope,
|
|
47
|
-
spec: seedSpatialViewState.categorySelector.code.spec,
|
|
48
|
-
value: seedSpatialViewState.categorySelector.code.value,
|
|
49
|
-
},
|
|
50
|
-
model: seedSpatialViewState.categorySelector.model,
|
|
51
|
-
},
|
|
52
|
-
displayStyleProps: {
|
|
53
|
-
id: seedSpatialViewState.displayStyle.id,
|
|
54
|
-
classFullName: seedSpatialViewState.displayStyle.classFullName,
|
|
55
|
-
code: seedSpatialViewState.displayStyle.code,
|
|
56
|
-
model: seedSpatialViewState.displayStyle.model,
|
|
57
|
-
jsonProperties: {
|
|
58
|
-
styles: extractDisplayStyle3d(savedViewRsp.savedViewData.itwin3dView),
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
appendHiddenCategoriesToLegacyView(itwin3dView, legacyView);
|
|
63
|
-
appendHiddenModelsTo3dLegacySavedView(itwin3dView, legacyView);
|
|
64
|
-
return legacyView;
|
|
65
|
-
}
|
|
66
|
-
function appendHiddenModelsTo3dLegacySavedView(view, legacyView) {
|
|
67
|
-
if (view.models?.disabled) {
|
|
68
|
-
legacyView.hiddenModels = view.models?.disabled;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Transform a ViewDataITwinDrawing into a legacy SavedView if possible
|
|
73
|
-
* @param savedViewRsp
|
|
74
|
-
* @param iModelViewData
|
|
75
|
-
* @returns SavedView2d
|
|
76
|
-
*/
|
|
77
|
-
export function savedViewItwinDrawingToLegacyDrawingView(savedViewRsp, seedDrawingViewState) {
|
|
78
|
-
const iTwinDrawingView = savedViewRsp.savedViewData.itwinDrawingView;
|
|
79
|
-
seedDrawingViewState.displayStyle;
|
|
80
|
-
const legacyView = {
|
|
81
|
-
id: savedViewRsp.id,
|
|
82
|
-
is2d: true,
|
|
83
|
-
groupId: savedViewRsp._links.group ? extractIdFromHref(savedViewRsp._links.group.href) : undefined,
|
|
84
|
-
tags: extractTags(savedViewRsp._links.creator?.href ?? "", savedViewRsp.tags),
|
|
85
|
-
name: savedViewRsp.displayName,
|
|
86
|
-
userId: extractIdFromHref(savedViewRsp._links.creator?.href ?? "") ?? "",
|
|
87
|
-
shared: savedViewRsp.shared,
|
|
88
|
-
thumbnailId: savedViewRsp.id ?? "",
|
|
89
|
-
categorySelectorProps: {
|
|
90
|
-
classFullName: seedDrawingViewState.categorySelector.classFullName,
|
|
91
|
-
categories: iTwinDrawingView.categories?.enabled ?? [],
|
|
92
|
-
code: {
|
|
93
|
-
scope: seedDrawingViewState.categorySelector.code.scope,
|
|
94
|
-
spec: seedDrawingViewState.categorySelector.code.spec,
|
|
95
|
-
value: seedDrawingViewState.categorySelector.code.value,
|
|
96
|
-
},
|
|
97
|
-
model: seedDrawingViewState.categorySelector.model,
|
|
98
|
-
federationGuid: seedDrawingViewState.categorySelector.federationGuid ?? "",
|
|
99
|
-
id: seedDrawingViewState.categorySelector.id,
|
|
100
|
-
},
|
|
101
|
-
viewDefinitionProps: {
|
|
102
|
-
classFullName: seedDrawingViewState.classFullName,
|
|
103
|
-
id: seedDrawingViewState.id,
|
|
104
|
-
jsonProperties: {
|
|
105
|
-
viewDetails: {
|
|
106
|
-
gridOrient: seedDrawingViewState.getGridOrientation(),
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
code: {
|
|
110
|
-
scope: seedDrawingViewState.code.scope,
|
|
111
|
-
spec: seedDrawingViewState.code.spec,
|
|
112
|
-
value: seedDrawingViewState.code.value,
|
|
113
|
-
},
|
|
114
|
-
model: seedDrawingViewState.model,
|
|
115
|
-
federationGuid: seedDrawingViewState.federationGuid ?? "",
|
|
116
|
-
categorySelectorId: seedDrawingViewState.categorySelector.id,
|
|
117
|
-
displayStyleId: seedDrawingViewState.displayStyle.id,
|
|
118
|
-
isPrivate: seedDrawingViewState.isPrivate ?? false,
|
|
119
|
-
description: seedDrawingViewState.description ?? "",
|
|
120
|
-
origin: iTwinDrawingView.origin,
|
|
121
|
-
delta: iTwinDrawingView.delta,
|
|
122
|
-
angle: iTwinDrawingView.angle,
|
|
123
|
-
baseModelId: iTwinDrawingView.baseModelId,
|
|
124
|
-
},
|
|
125
|
-
displayStyleProps: {
|
|
126
|
-
classFullName: seedDrawingViewState.displayStyle.classFullName,
|
|
127
|
-
id: seedDrawingViewState.displayStyle.id,
|
|
128
|
-
jsonProperties: {
|
|
129
|
-
styles: extractDisplayStyle(iTwinDrawingView, seedDrawingViewState),
|
|
130
|
-
},
|
|
131
|
-
code: {
|
|
132
|
-
spec: seedDrawingViewState.displayStyle.code.spec,
|
|
133
|
-
scope: seedDrawingViewState.displayStyle.code.scope,
|
|
134
|
-
value: seedDrawingViewState.displayStyle.code.value,
|
|
135
|
-
},
|
|
136
|
-
model: seedDrawingViewState.displayStyle.model,
|
|
137
|
-
federationGuid: seedDrawingViewState.displayStyle.federationGuid ?? "",
|
|
138
|
-
},
|
|
139
|
-
};
|
|
140
|
-
appendHiddenCategoriesToLegacyView(iTwinDrawingView, legacyView);
|
|
141
|
-
return legacyView;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Transform a ViewDataITwinSheet into a legacy SavedView if possible
|
|
145
|
-
* @param savedViewRsp
|
|
146
|
-
* @param seedSheetViewState
|
|
147
|
-
* @returns SavedView2d
|
|
148
|
-
*/
|
|
149
|
-
export function savedViewItwinSheetToLegacySheetSavedView(savedViewRsp, seedSheetViewState) {
|
|
150
|
-
const itwinSheetView = savedViewRsp.savedViewData.itwinSheetView;
|
|
151
|
-
const legacyView = {
|
|
152
|
-
id: savedViewRsp.id,
|
|
153
|
-
is2d: true,
|
|
154
|
-
groupId: savedViewRsp._links.group ? extractIdFromHref(savedViewRsp._links.group.href) : undefined,
|
|
155
|
-
tags: extractTags(savedViewRsp._links.creator?.href ?? "", savedViewRsp.tags),
|
|
156
|
-
name: savedViewRsp.displayName,
|
|
157
|
-
userId: extractIdFromHref(savedViewRsp._links.creator?.href ?? "") ?? "",
|
|
158
|
-
shared: savedViewRsp.shared,
|
|
159
|
-
thumbnailId: savedViewRsp.id ?? "",
|
|
160
|
-
categorySelectorProps: {
|
|
161
|
-
classFullName: seedSheetViewState.categorySelector.classFullName,
|
|
162
|
-
categories: itwinSheetView.categories?.enabled ?? [],
|
|
163
|
-
code: {
|
|
164
|
-
scope: seedSheetViewState.categorySelector.code.scope,
|
|
165
|
-
spec: seedSheetViewState.categorySelector.code.spec,
|
|
166
|
-
value: seedSheetViewState.categorySelector.code.value,
|
|
167
|
-
},
|
|
168
|
-
model: seedSheetViewState.categorySelector.model,
|
|
169
|
-
federationGuid: seedSheetViewState.categorySelector.federationGuid,
|
|
170
|
-
id: seedSheetViewState.categorySelector.id,
|
|
171
|
-
},
|
|
172
|
-
viewDefinitionProps: {
|
|
173
|
-
classFullName: seedSheetViewState.classFullName,
|
|
174
|
-
id: seedSheetViewState.id,
|
|
175
|
-
jsonProperties: {
|
|
176
|
-
viewDetails: {
|
|
177
|
-
gridOrient: seedSheetViewState.getGridOrientation() ?? undefined,
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
code: {
|
|
181
|
-
scope: seedSheetViewState.code.scope,
|
|
182
|
-
spec: seedSheetViewState.code.spec,
|
|
183
|
-
value: seedSheetViewState.code.value,
|
|
184
|
-
},
|
|
185
|
-
model: seedSheetViewState.model,
|
|
186
|
-
federationGuid: seedSheetViewState.federationGuid ?? "",
|
|
187
|
-
categorySelectorId: seedSheetViewState.categorySelector.id,
|
|
188
|
-
displayStyleId: seedSheetViewState.displayStyle.id,
|
|
189
|
-
isPrivate: seedSheetViewState.isPrivate ?? false,
|
|
190
|
-
description: seedSheetViewState.description ?? "",
|
|
191
|
-
origin: itwinSheetView.origin,
|
|
192
|
-
delta: itwinSheetView.delta,
|
|
193
|
-
angle: itwinSheetView.angle,
|
|
194
|
-
baseModelId: itwinSheetView.baseModelId,
|
|
195
|
-
},
|
|
196
|
-
displayStyleProps: {
|
|
197
|
-
classFullName: seedSheetViewState.displayStyle.classFullName,
|
|
198
|
-
id: seedSheetViewState.displayStyle.id,
|
|
199
|
-
jsonProperties: {
|
|
200
|
-
styles: extractDisplayStyle(itwinSheetView, seedSheetViewState),
|
|
201
|
-
},
|
|
202
|
-
code: {
|
|
203
|
-
spec: seedSheetViewState.displayStyle.code.spec,
|
|
204
|
-
scope: seedSheetViewState.displayStyle.code.scope,
|
|
205
|
-
value: seedSheetViewState.displayStyle.code.value,
|
|
206
|
-
},
|
|
207
|
-
model: seedSheetViewState.displayStyle.model,
|
|
208
|
-
federationGuid: seedSheetViewState.displayStyle.federationGuid ?? "",
|
|
209
|
-
},
|
|
210
|
-
sheetProps: {
|
|
211
|
-
width: itwinSheetView.width ?? -1,
|
|
212
|
-
height: itwinSheetView.height ?? -1,
|
|
213
|
-
model: seedSheetViewState.displayStyle.model,
|
|
214
|
-
classFullName: SheetViewState.classFullName,
|
|
215
|
-
code: {
|
|
216
|
-
spec: seedSheetViewState.displayStyle.code.spec,
|
|
217
|
-
scope: seedSheetViewState.displayStyle.code.scope,
|
|
218
|
-
value: "",
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
sheetAttachments: itwinSheetView.sheetAttachments ?? [],
|
|
222
|
-
};
|
|
223
|
-
appendHiddenCategoriesToLegacyView(itwinSheetView, legacyView);
|
|
224
|
-
return legacyView;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Extract all the tags.
|
|
228
|
-
* @param creator href for the creator
|
|
229
|
-
* @param tags the list of tags in the saved view
|
|
230
|
-
*/
|
|
231
|
-
function extractTags(creator, tags) {
|
|
232
|
-
const createdByUserId = extractIdFromHref(creator) ?? "";
|
|
233
|
-
return tags?.map((tag) => ({ name: tag.displayName, createdByUserId }));
|
|
234
|
-
}
|
|
235
|
-
function extractIdFromHref(href) {
|
|
236
|
-
return href.split("/").pop();
|
|
237
|
-
}
|
|
238
|
-
function appendHiddenCategoriesToLegacyView(iTwinView, legacyView) {
|
|
239
|
-
if (iTwinView.categories?.disabled) {
|
|
240
|
-
legacyView.hiddenCategories = iTwinView.categories.disabled;
|
|
241
|
-
}
|
|
242
|
-
}
|
/package/lib/{ui/viewlist/ModelCategoryOverrideProvider.d.ts → ModelCategoryOverrideProvider.d.ts}
RENAMED
|
File without changes
|
/package/lib/{ui/viewlist/ModelCategoryOverrideProvider.js → ModelCategoryOverrideProvider.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|