@shapediver/viewer.creation-control-center.session 3.3.3 → 3.3.6
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapediver/viewer.creation-control-center.session",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Michael Oppitz <michael@shapediver.com>",
|
|
@@ -10,11 +10,10 @@
|
|
|
10
10
|
"test": "__tests__"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
-
"dist",
|
|
14
|
-
"src",
|
|
15
13
|
"package.json",
|
|
14
|
+
"dist/",
|
|
16
15
|
"README.md",
|
|
17
|
-
"
|
|
16
|
+
"LICENSE"
|
|
18
17
|
],
|
|
19
18
|
"publishConfig": {
|
|
20
19
|
"access": "public"
|
|
@@ -40,10 +39,10 @@
|
|
|
40
39
|
},
|
|
41
40
|
"dependencies": {
|
|
42
41
|
"@shapediver/sdk.geometry-api-sdk-v2": "1.11.0",
|
|
43
|
-
"@shapediver/viewer.session-engine.session-engine": "3.3.
|
|
44
|
-
"@shapediver/viewer.shared.build-data": "3.3.
|
|
45
|
-
"@shapediver/viewer.shared.services": "3.3.
|
|
46
|
-
"@shapediver/viewer.shared.types": "3.3.
|
|
42
|
+
"@shapediver/viewer.session-engine.session-engine": "3.3.6",
|
|
43
|
+
"@shapediver/viewer.shared.build-data": "3.3.6",
|
|
44
|
+
"@shapediver/viewer.shared.services": "3.3.6",
|
|
45
|
+
"@shapediver/viewer.shared.types": "3.3.6"
|
|
47
46
|
},
|
|
48
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "13aea937b128a001e6e93be300674c4a04624c29"
|
|
49
48
|
}
|
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
import { build_data } from '@shapediver/viewer.shared.build-data';
|
|
2
|
-
import {
|
|
3
|
-
EventEngine,
|
|
4
|
-
EVENTTYPE,
|
|
5
|
-
isViewerError,
|
|
6
|
-
Logger,
|
|
7
|
-
SESSION_SETTINGS_MODE,
|
|
8
|
-
ShapeDiverViewerSessionError,
|
|
9
|
-
StateEngine,
|
|
10
|
-
StatePromise,
|
|
11
|
-
UuidGenerator
|
|
12
|
-
} from '@shapediver/viewer.shared.services';
|
|
13
|
-
import { ICreationControlCenterSession, SessionCreationDefinition } from '../interfaces/ICreationControlCenterSession';
|
|
14
|
-
import { ISettings, latestVersion } from '@shapediver/viewer.settings';
|
|
15
|
-
import { ISettingsSections, ITaskEvent, TASK_TYPE } from '@shapediver/viewer.shared.types';
|
|
16
|
-
import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
|
|
17
|
-
import { SessionGlobalAccessObject } from './SessionGlobalAccessObject';
|
|
18
|
-
import { ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
|
|
19
|
-
|
|
20
|
-
export class CreationControlCenterSession implements ICreationControlCenterSession {
|
|
21
|
-
// #region Properties (8)
|
|
22
|
-
|
|
23
|
-
readonly #eventEngine: EventEngine = EventEngine.instance;
|
|
24
|
-
readonly #logger: Logger = Logger.instance;
|
|
25
|
-
readonly #stateEngine: StateEngine = StateEngine.instance;
|
|
26
|
-
readonly #uuidGenerator: UuidGenerator = UuidGenerator.instance;
|
|
27
|
-
|
|
28
|
-
private static _instance: CreationControlCenterSession;
|
|
29
|
-
|
|
30
|
-
#firstSessionEngine?: SessionEngine;
|
|
31
|
-
|
|
32
|
-
public readonly sessionEngines: { [key: string]: SessionEngine } = {};
|
|
33
|
-
|
|
34
|
-
public updateSessions?: (
|
|
35
|
-
sessionEngines: { [key: string]: SessionEngine; },
|
|
36
|
-
) => void;
|
|
37
|
-
|
|
38
|
-
// #endregion Properties (8)
|
|
39
|
-
|
|
40
|
-
// #region Public Static Getters And Setters (1)
|
|
41
|
-
|
|
42
|
-
public static get instance() {
|
|
43
|
-
return this._instance || (this._instance = new this());
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// #endregion Public Static Getters And Setters (1)
|
|
47
|
-
|
|
48
|
-
// #region Public Methods (5)
|
|
49
|
-
|
|
50
|
-
public applySettings(sessionId: string, response: ShapeDiverResponseDto, sections?: ISettingsSections): Promise<void> {
|
|
51
|
-
sections = sections || {};
|
|
52
|
-
this.sessionEngines[sessionId].applySettings(response, sections);
|
|
53
|
-
|
|
54
|
-
const promises: Promise<unknown>[] = [];
|
|
55
|
-
|
|
56
|
-
if (sections.session && sections.session.parameter && sections.session.parameter.value)
|
|
57
|
-
promises.push(this.sessionEngines[sessionId].customize());
|
|
58
|
-
|
|
59
|
-
for (const r in this.#stateEngine.viewportEngines) {
|
|
60
|
-
const viewportEngineState = this.#stateEngine.viewportEngines[r];
|
|
61
|
-
if ((viewportEngineState && viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine && sessionId === this.#firstSessionEngine.id) ||
|
|
62
|
-
(viewportEngineState && viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngineState.sessionSettingsId)) {
|
|
63
|
-
viewportEngineState.settingsAssigned.reset();
|
|
64
|
-
promises.push(new Promise<void>(resolve => {
|
|
65
|
-
this.#stateEngine.viewportEngines[r]?.settingsAssigned.then(() => {
|
|
66
|
-
resolve();
|
|
67
|
-
});
|
|
68
|
-
}));
|
|
69
|
-
|
|
70
|
-
viewportEngineState.applySettings(sections.viewport);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return new Promise(resolve => Promise.all(promises).then(() => resolve()));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
public async closeSessionEngine(id: string): Promise<void> {
|
|
77
|
-
if (!this.sessionEngines[id]) return;
|
|
78
|
-
|
|
79
|
-
this.#logger.debugLow(`CreationControlCenter.closeSession: Closing session ${id}.`);
|
|
80
|
-
|
|
81
|
-
if (this.#stateEngine.sessionEngines[id]?.initialized.resolved === false)
|
|
82
|
-
await new Promise<void>(resolve => { this.#stateEngine.sessionEngines[id]?.initialized.then(() => resolve()); });
|
|
83
|
-
|
|
84
|
-
await this.sessionEngines[id].close();
|
|
85
|
-
|
|
86
|
-
// remove from rendering engines (also directly assigned)
|
|
87
|
-
for (const r in this.#stateEngine.viewportEngines) {
|
|
88
|
-
const viewportEngineState = this.#stateEngine.viewportEngines[r];
|
|
89
|
-
if (viewportEngineState && (viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && viewportEngineState.sessionSettingsId === id) ||
|
|
90
|
-
(viewportEngineState && viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine === this.sessionEngines[id])) {
|
|
91
|
-
viewportEngineState.reset();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (this.#firstSessionEngine === this.sessionEngines[id]) {
|
|
96
|
-
const engines = Object.values(this.sessionEngines).filter(s => s.id !== id);
|
|
97
|
-
this.#firstSessionEngine = engines.length === 0 ? undefined : engines[0];
|
|
98
|
-
if (this.#firstSessionEngine) {
|
|
99
|
-
if (!this.#stateEngine.sessionEngines[this.#firstSessionEngine.id]) return;
|
|
100
|
-
Object.values(this.#stateEngine.sessionEngines).forEach(s => { if (s) s.isFirstSession = false; });
|
|
101
|
-
this.#stateEngine.sessionEngines[this.#firstSessionEngine.id]!.isFirstSession = true;
|
|
102
|
-
|
|
103
|
-
const promises: StatePromise<boolean>[] = [];
|
|
104
|
-
|
|
105
|
-
for (const r in this.#stateEngine.viewportEngines) {
|
|
106
|
-
const viewportEngineState = this.#stateEngine.viewportEngines[r];
|
|
107
|
-
if (this.#stateEngine.viewportEngines[r]?.settingsAssigned.resolved === false) {
|
|
108
|
-
if (viewportEngineState && viewportEngineState.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST) {
|
|
109
|
-
promises.push(viewportEngineState.settingsAssigned);
|
|
110
|
-
this.assignSettings(viewportEngineState.id, this.#firstSessionEngine?.id);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
await Promise.all(promises);
|
|
116
|
-
|
|
117
|
-
if (this.updateSessions) this.updateSessions(this.sessionEngines);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
this.#stateEngine.sessionEngines[id]?.settingsRegistered.reset();
|
|
122
|
-
|
|
123
|
-
(<unknown>this.sessionEngines[id]) = undefined;
|
|
124
|
-
delete this.sessionEngines[id];
|
|
125
|
-
delete this.#stateEngine.sessionEngines[id];
|
|
126
|
-
|
|
127
|
-
this.#logger.debug('CreationControlCenter.closeSessionEngine: Session closed.');
|
|
128
|
-
for (const r in this.#stateEngine.viewportEngines)
|
|
129
|
-
this.#stateEngine.viewportEngines[r]?.update('CreationControlCenter.closeSessionEngine');
|
|
130
|
-
if (this.updateSessions) this.updateSessions(this.sessionEngines);
|
|
131
|
-
this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_CLOSED, { sessionId: id });
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
public async createSessionEngine(properties: SessionCreationDefinition): Promise<SessionEngine> {
|
|
135
|
-
const eventId = this.#uuidGenerator.create();
|
|
136
|
-
const sessionEngineId = properties.id || this.#uuidGenerator.create();
|
|
137
|
-
properties.id = sessionEngineId;
|
|
138
|
-
properties.loadOutputs = properties.allowOutputLoading === false ? false : properties.loadOutputs;
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
const eventStart: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0, status: 'Creating session', data: { sessionId: sessionEngineId } };
|
|
142
|
-
this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_START, eventStart);
|
|
143
|
-
|
|
144
|
-
// check if the given id is valid
|
|
145
|
-
if (this.sessionEngines[sessionEngineId]) {
|
|
146
|
-
const eventClose: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.1, status: 'Closing session with same id', data: { sessionId: sessionEngineId } };
|
|
147
|
-
this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_PROCESS, eventClose);
|
|
148
|
-
|
|
149
|
-
this.#logger.warn(`CreationControlCenter.createSession: Session with this id (${sessionEngineId}) already exists. Closing initial instance.`);
|
|
150
|
-
await this.closeSessionEngine(sessionEngineId);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// create the actual session
|
|
154
|
-
const sessionEngine = new SessionEngine({
|
|
155
|
-
id: sessionEngineId,
|
|
156
|
-
guid: properties.guid,
|
|
157
|
-
ticket: properties.ticket,
|
|
158
|
-
modelViewUrl: properties.modelViewUrl,
|
|
159
|
-
excludeViewports: properties.excludeViewports,
|
|
160
|
-
buildVersion: build_data.build_version,
|
|
161
|
-
buildDate: build_data.build_date,
|
|
162
|
-
jwtToken: properties.jwtToken,
|
|
163
|
-
allowOutputLoading: properties.allowOutputLoading === undefined ? true : properties.allowOutputLoading,
|
|
164
|
-
loadSdtf: properties.loadSdtf === undefined ? false : properties.loadSdtf,
|
|
165
|
-
modelStateId: properties.modelStateId
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
this.#stateEngine.sessionEngines[sessionEngineId] = new SessionGlobalAccessObject(sessionEngine);
|
|
169
|
-
|
|
170
|
-
const eventInit: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.25, status: 'Initializing session.', data: { sessionId: sessionEngineId } };
|
|
171
|
-
this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_PROCESS, eventInit);
|
|
172
|
-
|
|
173
|
-
await sessionEngine.init(properties.initialParameterValues);
|
|
174
|
-
|
|
175
|
-
if (properties.loadOutputs !== false) {
|
|
176
|
-
if (properties.waitForOutputs !== false) {
|
|
177
|
-
await sessionEngine.updateOutputs({
|
|
178
|
-
eventId,
|
|
179
|
-
type: TASK_TYPE.SESSION_CREATION,
|
|
180
|
-
progressRange: {
|
|
181
|
-
min: 0.25,
|
|
182
|
-
max: 0.9
|
|
183
|
-
},
|
|
184
|
-
data: { sessionId: sessionEngineId }
|
|
185
|
-
});
|
|
186
|
-
this.#stateEngine.sessionEngines[sessionEngineId]?.initialOutputsLoaded.resolve(true);
|
|
187
|
-
this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_INITIAL_OUTPUTS_LOADED, { sessionId: sessionEngineId });
|
|
188
|
-
} else {
|
|
189
|
-
sessionEngine.updateOutputs({
|
|
190
|
-
eventId,
|
|
191
|
-
type: TASK_TYPE.SESSION_CREATION,
|
|
192
|
-
progressRange: {
|
|
193
|
-
min: 0.25,
|
|
194
|
-
max: 0.9
|
|
195
|
-
},
|
|
196
|
-
data: { sessionId: sessionEngineId }
|
|
197
|
-
}).then(() => {
|
|
198
|
-
this.#stateEngine.sessionEngines[sessionEngineId]?.initialOutputsLoaded.resolve(true);
|
|
199
|
-
this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_INITIAL_OUTPUTS_LOADED, { sessionId: sessionEngineId });
|
|
200
|
-
|
|
201
|
-
for (const r in this.#stateEngine.viewportEngines)
|
|
202
|
-
this.#stateEngine.viewportEngines[r]?.update('CreationControlCenter.createSessionEngine.waitForOutputs=false');
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// save the session
|
|
208
|
-
this.sessionEngines[sessionEngineId] = sessionEngine;
|
|
209
|
-
|
|
210
|
-
this.#stateEngine.sessionEngines[sessionEngineId]?.initialized.resolve(true);
|
|
211
|
-
this.#logger.debug(`CreationControlCenter.createSession: Session(${sessionEngine.id}) created.`);
|
|
212
|
-
|
|
213
|
-
if (!this.#firstSessionEngine) {
|
|
214
|
-
if (this.#stateEngine.sessionEngines[sessionEngine.id]) {
|
|
215
|
-
this.#firstSessionEngine = sessionEngine;
|
|
216
|
-
Object.values(this.#stateEngine.sessionEngines).forEach(s => { if (s) s.isFirstSession = false; });
|
|
217
|
-
this.#stateEngine.sessionEngines[this.#firstSessionEngine.id]!.isFirstSession = true;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
const promises: StatePromise<boolean>[] = [];
|
|
222
|
-
|
|
223
|
-
for (const r in this.#stateEngine.viewportEngines) {
|
|
224
|
-
const viewportEngine = this.#stateEngine.viewportEngines[r];
|
|
225
|
-
if (this.#stateEngine.viewportEngines[r]?.settingsAssigned.resolved === false) {
|
|
226
|
-
if (viewportEngine && viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST || (viewportEngine && viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && viewportEngine.sessionSettingsId === sessionEngineId)) {
|
|
227
|
-
promises.push(viewportEngine.settingsAssigned);
|
|
228
|
-
this.assignSettings(viewportEngine.id, sessionEngineId);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
await Promise.all(promises);
|
|
234
|
-
|
|
235
|
-
for (const r in this.#stateEngine.viewportEngines)
|
|
236
|
-
this.#stateEngine.viewportEngines[r]?.update('CreationControlCenter.createSessionEngine');
|
|
237
|
-
|
|
238
|
-
if (this.updateSessions) this.updateSessions(this.sessionEngines);
|
|
239
|
-
|
|
240
|
-
const eventEnd: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 1, status: 'Session created', data: { sessionId: sessionEngineId } };
|
|
241
|
-
this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_END, eventEnd);
|
|
242
|
-
this.#eventEngine.emitEvent(EVENTTYPE.SESSION.SESSION_CREATED, { sessionId: sessionEngineId });
|
|
243
|
-
return sessionEngine;
|
|
244
|
-
} catch (e) {
|
|
245
|
-
// special behavior, if this was the only session, display the error on the logo screen
|
|
246
|
-
if (isViewerError(e)) {
|
|
247
|
-
if ((this.sessionEngines[sessionEngineId] && Object.values(this.sessionEngines).length === 1) || (!this.sessionEngines[sessionEngineId] && Object.values(this.sessionEngines).length === 0)) {
|
|
248
|
-
for (const r in this.#stateEngine.viewportEngines)
|
|
249
|
-
this.#stateEngine.viewportEngines[r]?.displayErrorMessage((e as Error).message);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
const eventCancel1: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 0.9, status: 'Session created failed, closing session', data: { sessionId: sessionEngineId } };
|
|
254
|
-
this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_PROCESS, eventCancel1);
|
|
255
|
-
|
|
256
|
-
await this.closeSessionEngine(sessionEngineId);
|
|
257
|
-
|
|
258
|
-
const eventCancel2: ITaskEvent = { type: TASK_TYPE.SESSION_CREATION, id: eventId, progress: 1, status: 'Session created failed', data: { sessionId: sessionEngineId } };
|
|
259
|
-
this.#eventEngine.emitEvent(EVENTTYPE.TASK.TASK_CANCEL, eventCancel2);
|
|
260
|
-
|
|
261
|
-
throw e;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
public resetSettings(sessionId: string, sections?: ISettingsSections): Promise<void> {
|
|
266
|
-
sections = sections || {};
|
|
267
|
-
this.sessionEngines[sessionId].resetSettings(sections);
|
|
268
|
-
|
|
269
|
-
const promises: Promise<unknown>[] = [];
|
|
270
|
-
|
|
271
|
-
if (sections.session && sections.session.parameter && sections.session.parameter.value)
|
|
272
|
-
promises.push(this.sessionEngines[sessionId].customize());
|
|
273
|
-
|
|
274
|
-
for (const r in this.#stateEngine.viewportEngines) {
|
|
275
|
-
const viewportEngine = this.#stateEngine.viewportEngines[r];
|
|
276
|
-
if ((viewportEngine && viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine && sessionId === this.#firstSessionEngine.id) ||
|
|
277
|
-
(viewportEngine && viewportEngine.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngine.sessionSettingsId)) {
|
|
278
|
-
this.#stateEngine.viewportEngines[r]?.settingsAssigned.reset();
|
|
279
|
-
promises.push(new Promise<void>(resolve => {
|
|
280
|
-
this.#stateEngine.viewportEngines[r]?.settingsAssigned.then(() => {
|
|
281
|
-
resolve();
|
|
282
|
-
});
|
|
283
|
-
}));
|
|
284
|
-
|
|
285
|
-
viewportEngine.applySettings(sections.viewport);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
return new Promise(resolve => Promise.all(promises).then(() => resolve()));
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
public async saveSettings(sessionId: string, viewportId?: string): Promise<boolean> {
|
|
292
|
-
const session = this.sessionEngines[sessionId];
|
|
293
|
-
await session.saveUiProperties(false);
|
|
294
|
-
|
|
295
|
-
const settingsObject = this.createSettingsObject(sessionId, viewportId);
|
|
296
|
-
const response = await session.saveSettings(settingsObject);
|
|
297
|
-
if (response) {
|
|
298
|
-
this.#logger.debug(`Session(${sessionId}).saveSettings: Saved settings.`);
|
|
299
|
-
} else {
|
|
300
|
-
throw new ShapeDiverViewerSessionError(`Session(${sessionId}).saveSettings: Could not save settings.`);
|
|
301
|
-
}
|
|
302
|
-
return response;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// #endregion Public Methods (5)
|
|
306
|
-
|
|
307
|
-
// #region Private Methods (2)
|
|
308
|
-
|
|
309
|
-
private async assignSettings(viewportEngineId: string, sessionId: string, updateViewport: boolean = false) {
|
|
310
|
-
const viewportEngine = this.#stateEngine.viewportEngines[viewportEngineId];
|
|
311
|
-
if (!viewportEngine) return;
|
|
312
|
-
|
|
313
|
-
if (this.#stateEngine.sessionEngines[sessionId]?.initialized.resolved === true) {
|
|
314
|
-
// immediate
|
|
315
|
-
viewportEngine.assignSettingsEngine(this.sessionEngines[sessionId].settingsEngine);
|
|
316
|
-
await viewportEngine.applySettings(undefined, undefined, updateViewport);
|
|
317
|
-
} else {
|
|
318
|
-
await new Promise<void>(resolve => {
|
|
319
|
-
this.#stateEngine.sessionEngines[sessionId]?.initialized.then(async () => {
|
|
320
|
-
viewportEngine.assignSettingsEngine(this.sessionEngines[sessionId].settingsEngine);
|
|
321
|
-
await viewportEngine.applySettings(undefined, undefined, updateViewport);
|
|
322
|
-
resolve();
|
|
323
|
-
});
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
private createSettingsObject(sessionId: string, viewportId?: string): ISettings {
|
|
329
|
-
const session = this.sessionEngines[sessionId];
|
|
330
|
-
|
|
331
|
-
session.settingsEngine.settings.build_version = build_data.build_version;
|
|
332
|
-
session.settingsEngine.settings.build_date = build_data.build_date;
|
|
333
|
-
session.settingsEngine.settings.settings_version = latestVersion;
|
|
334
|
-
|
|
335
|
-
let viewportEngine;
|
|
336
|
-
if (viewportId && this.#stateEngine.viewportEngines[viewportId]) {
|
|
337
|
-
viewportEngine = this.#stateEngine.viewportEngines[viewportId];
|
|
338
|
-
} else {
|
|
339
|
-
for (const r in this.#stateEngine.viewportEngines) {
|
|
340
|
-
const viewportEngineToCheck = this.#stateEngine.viewportEngines[r];
|
|
341
|
-
if ((viewportEngineToCheck && viewportEngineToCheck.sessionSettingsMode === SESSION_SETTINGS_MODE.FIRST && this.#firstSessionEngine && sessionId === this.#firstSessionEngine.id) ||
|
|
342
|
-
(viewportEngineToCheck && viewportEngineToCheck.sessionSettingsMode === SESSION_SETTINGS_MODE.MANUAL && sessionId === viewportEngineToCheck.sessionSettingsId)) {
|
|
343
|
-
viewportEngine = viewportEngineToCheck;
|
|
344
|
-
continue;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
if (viewportEngine)
|
|
350
|
-
viewportEngine.saveSettings();
|
|
351
|
-
|
|
352
|
-
return session.settingsEngine.settings;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// #endregion Private Methods (2)
|
|
356
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
|
|
2
|
-
import { ISessionGlobalAccessObjectDefinition, SettingsEngine, StatePromise } from '@shapediver/viewer.shared.services';
|
|
3
|
-
import { ShapeDiverRequestGltfUploadQueryConversion, ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
|
|
4
|
-
|
|
5
|
-
export class SessionGlobalAccessObject implements ISessionGlobalAccessObjectDefinition {
|
|
6
|
-
// #region Properties (5)
|
|
7
|
-
|
|
8
|
-
readonly #sessionEngine: SessionEngine;
|
|
9
|
-
|
|
10
|
-
#initialOutputsLoaded: StatePromise<boolean> = new StatePromise();
|
|
11
|
-
#initialized: StatePromise<boolean> = new StatePromise();
|
|
12
|
-
#isFirstSession: boolean = false;
|
|
13
|
-
#settingsRegistered: StatePromise<boolean> = new StatePromise();
|
|
14
|
-
|
|
15
|
-
// #endregion Properties (5)
|
|
16
|
-
|
|
17
|
-
// #region Constructors (1)
|
|
18
|
-
|
|
19
|
-
constructor(sessionEngine: SessionEngine) {
|
|
20
|
-
this.#sessionEngine = sessionEngine;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// #endregion Constructors (1)
|
|
24
|
-
|
|
25
|
-
// #region Public Getters And Setters (9)
|
|
26
|
-
|
|
27
|
-
public get canUploadGLTF(): boolean {
|
|
28
|
-
return this.#sessionEngine.canUploadGLTF;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public get id(): string {
|
|
32
|
-
return this.#sessionEngine.id;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public get initialOutputsLoaded(): StatePromise<boolean> {
|
|
36
|
-
return this.#initialOutputsLoaded;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public get initialized(): StatePromise<boolean> {
|
|
40
|
-
return this.#initialized;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public get isFirstSession(): boolean {
|
|
44
|
-
return this.#isFirstSession;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public set isFirstSession(value: boolean) {
|
|
48
|
-
this.#isFirstSession = value;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
public get modelViewUrl(): string {
|
|
52
|
-
return this.#sessionEngine.modelViewUrl;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public get settingsEngine(): SettingsEngine {
|
|
56
|
-
return this.#sessionEngine.settingsEngine;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public get settingsRegistered(): StatePromise<boolean> {
|
|
60
|
-
return this.#settingsRegistered;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// #endregion Public Getters And Setters (9)
|
|
64
|
-
|
|
65
|
-
// #region Public Methods (1)
|
|
66
|
-
|
|
67
|
-
public uploadGLTF(gltf: Blob, name: ShapeDiverRequestGltfUploadQueryConversion | undefined): Promise<ShapeDiverResponseDto> {
|
|
68
|
-
return this.#sessionEngine.uploadGLTF(gltf, name);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// #endregion Public Methods (1)
|
|
72
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { CreationControlCenterSession } from './implementation/CreationControlCenterSession';
|
|
2
|
-
import { ICreationControlCenterSession, SessionCreationDefinition } from './interfaces/ICreationControlCenterSession';
|
|
3
|
-
|
|
4
|
-
export {
|
|
5
|
-
ICreationControlCenterSession, CreationControlCenterSession,
|
|
6
|
-
SessionCreationDefinition
|
|
7
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { ISettingsSections } from '@shapediver/viewer.shared.types';
|
|
2
|
-
import { SessionEngine } from '@shapediver/viewer.session-engine.session-engine';
|
|
3
|
-
import { ShapeDiverResponseDto } from '@shapediver/sdk.geometry-api-sdk-v2';
|
|
4
|
-
|
|
5
|
-
// #region Type aliases (1)
|
|
6
|
-
|
|
7
|
-
export type SessionCreationDefinition = {
|
|
8
|
-
/** The ticket for direct embedding of the model represented by the session. This identifies the model on the Geometry Backend. If no ticket was provided, a {@link guid} has to be provided instead. */
|
|
9
|
-
ticket?: string,
|
|
10
|
-
/** The geometry backend model id (guid). This identifies the model on the Geometry Backend. A {@link jwtToken} is needed for authentication. If no guid was provided, a {@link ticket} has to be provided instead. */
|
|
11
|
-
guid?: string,
|
|
12
|
-
/** The modelViewUrl of the {@link https://help.shapediver.com/doc/Geometry-Backend.1863942173.html|ShapeDiver Geometry Backend} hosting the model. */
|
|
13
|
-
modelViewUrl: string,
|
|
14
|
-
/** The JWT used for authorizing API calls to the Geometry Backend. */
|
|
15
|
-
jwtToken?: string,
|
|
16
|
-
/** The unique identifier of the session that was specified or automatically chosen on creation of the session. */
|
|
17
|
-
id?: string,
|
|
18
|
-
/** Option to wait for the outputs to be loaded, or return immediately after creation of the session. (default: true) */
|
|
19
|
-
waitForOutputs?: boolean,
|
|
20
|
-
/** Option to allow the outputs to be loaded, or to prevent them from being loaded. (default: true) */
|
|
21
|
-
allowOutputLoading?: boolean,
|
|
22
|
-
/** Option to load the outputs, or not load them until the first call of {@link ISession.customize}. (default: true) */
|
|
23
|
-
loadOutputs?: boolean,
|
|
24
|
-
/** Option to load the SDTF data. The data is not loaded by default as it can be quite large. (default: false) */
|
|
25
|
-
loadSdtf?: boolean,
|
|
26
|
-
/** Option to exclude some viewports from the start. Can be accessed via {@link ISession.excludeViewports}. */
|
|
27
|
-
excludeViewports?: string[],
|
|
28
|
-
/** The initial set of parameter values to use. Map from parameter id to parameter value. The default value will be used for any parameter not specified. */
|
|
29
|
-
initialParameterValues?: { [key: string]: string },
|
|
30
|
-
/** The optional model state id to use for the session. If not provided, no model state will be loaded. */
|
|
31
|
-
modelStateId?: string,
|
|
32
|
-
/** The optional model state validation mode to use for the session. If not provided, the default validation mode of the Geometry SDK will be used. */
|
|
33
|
-
modelStateValidationMode?: string
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
// #endregion Type aliases (1)
|
|
37
|
-
|
|
38
|
-
// #region Interfaces (1)
|
|
39
|
-
|
|
40
|
-
export interface ICreationControlCenterSession {
|
|
41
|
-
// #region Properties (2)
|
|
42
|
-
|
|
43
|
-
sessionEngines: { [key: string]: SessionEngine; };
|
|
44
|
-
updateSessions?: (sessionEngines: { [key: string]: SessionEngine; }) => void;
|
|
45
|
-
|
|
46
|
-
// #endregion Properties (2)
|
|
47
|
-
|
|
48
|
-
// #region Public Methods (5)
|
|
49
|
-
|
|
50
|
-
applySettings(sessionId: string, response: ShapeDiverResponseDto, sections?: ISettingsSections): Promise<void>;
|
|
51
|
-
closeSessionEngine(id: string): Promise<void>;
|
|
52
|
-
createSessionEngine(properties: SessionCreationDefinition): Promise<SessionEngine>;
|
|
53
|
-
resetSettings(sessionId: string, sections?: ISettingsSections): Promise<void>;
|
|
54
|
-
saveSettings(sessionId: string, viewportId?: string): Promise<boolean>;
|
|
55
|
-
|
|
56
|
-
// #endregion Public Methods (5)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// #endregion Interfaces (1)
|
package/tsconfig.json
DELETED