@inweb/viewer-visualize 25.3.17 → 25.3.19
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/dist/viewer-visualize.js +143 -131
- package/dist/viewer-visualize.js.map +1 -1
- package/dist/viewer-visualize.min.js +1 -1
- package/dist/viewer-visualize.module.js +156 -139
- package/dist/viewer-visualize.module.js.map +1 -1
- package/lib/ConvetMath.d.ts +28 -0
- package/lib/Viewer/Loaders/BaseLoader.d.ts +3 -3
- package/lib/Viewer/Loaders/LoaderFactory.d.ts +2 -2
- package/lib/Viewer/Viewer.d.ts +3 -3
- package/lib/index.d.ts +1 -1
- package/package.json +4 -4
- package/src/ConvetMath.ts +372 -0
- package/src/Viewer/Loaders/BaseLoader.ts +3 -3
- package/src/Viewer/Loaders/LoaderFactory.ts +3 -2
- package/src/Viewer/Loaders/TCSLoader.ts +1 -1
- package/src/Viewer/Loaders/VsfXLoader.ts +13 -5
- package/src/Viewer/Loaders/VsfXPartialLoader.ts +47 -48
- package/src/Viewer/Loaders/VsfXStreamingLoader.ts +5 -5
- package/src/Viewer/Viewer.ts +8 -8
- package/src/index.ts +1 -1
|
@@ -61,54 +61,62 @@ commands("VisualizeJS").registerCommand("noop", (() => {}));
|
|
|
61
61
|
|
|
62
62
|
commands("ThreeJS").registerCommand("noop", (() => {}));
|
|
63
63
|
|
|
64
|
+
function defaultOptions() {
|
|
65
|
+
return {
|
|
66
|
+
showWCS: true,
|
|
67
|
+
cameraAnimation: true,
|
|
68
|
+
antialiasing: true,
|
|
69
|
+
groundShadow: false,
|
|
70
|
+
shadows: false,
|
|
71
|
+
cameraAxisXSpeed: 4,
|
|
72
|
+
cameraAxisYSpeed: 1,
|
|
73
|
+
ambientOcclusion: false,
|
|
74
|
+
enableStreamingMode: true,
|
|
75
|
+
enablePartialMode: false,
|
|
76
|
+
memoryLimit: 3294967296,
|
|
77
|
+
cuttingPlaneFillColor: {
|
|
78
|
+
red: 255,
|
|
79
|
+
green: 152,
|
|
80
|
+
blue: 0
|
|
81
|
+
},
|
|
82
|
+
edgesColor: {
|
|
83
|
+
r: 255,
|
|
84
|
+
g: 152,
|
|
85
|
+
b: 0
|
|
86
|
+
},
|
|
87
|
+
facesColor: {
|
|
88
|
+
r: 255,
|
|
89
|
+
g: 152,
|
|
90
|
+
b: 0
|
|
91
|
+
},
|
|
92
|
+
edgesVisibility: true,
|
|
93
|
+
edgesOverlap: true,
|
|
94
|
+
facesOverlap: false,
|
|
95
|
+
facesTransparancy: 200,
|
|
96
|
+
enableCustomHighlight: true,
|
|
97
|
+
sceneGraph: false,
|
|
98
|
+
edgeModel: true,
|
|
99
|
+
reverseZoomWheel: false,
|
|
100
|
+
enableZoomWheel: true,
|
|
101
|
+
enableGestures: true,
|
|
102
|
+
geometryType: "vsfx"
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
64
106
|
class Options {
|
|
65
107
|
constructor(emitter) {
|
|
66
108
|
this._emitter = emitter;
|
|
67
|
-
this._data =
|
|
109
|
+
this._data = defaultOptions();
|
|
68
110
|
this.loadFromStorage();
|
|
69
111
|
}
|
|
70
112
|
static defaults() {
|
|
71
|
-
return
|
|
72
|
-
showWCS: true,
|
|
73
|
-
cameraAnimation: true,
|
|
74
|
-
antialiasing: true,
|
|
75
|
-
groundShadow: false,
|
|
76
|
-
shadows: false,
|
|
77
|
-
cameraAxisXSpeed: 4,
|
|
78
|
-
cameraAxisYSpeed: 1,
|
|
79
|
-
ambientOcclusion: false,
|
|
80
|
-
enableStreamingMode: true,
|
|
81
|
-
enablePartialMode: false,
|
|
82
|
-
memoryLimit: 3294967296,
|
|
83
|
-
cuttingPlaneFillColor: {
|
|
84
|
-
red: 255,
|
|
85
|
-
green: 152,
|
|
86
|
-
blue: 0
|
|
87
|
-
},
|
|
88
|
-
edgesColor: {
|
|
89
|
-
r: 255,
|
|
90
|
-
g: 152,
|
|
91
|
-
b: 0
|
|
92
|
-
},
|
|
93
|
-
facesColor: {
|
|
94
|
-
r: 255,
|
|
95
|
-
g: 152,
|
|
96
|
-
b: 0
|
|
97
|
-
},
|
|
98
|
-
edgesVisibility: true,
|
|
99
|
-
edgesOverlap: true,
|
|
100
|
-
facesOverlap: false,
|
|
101
|
-
facesTransparancy: 200,
|
|
102
|
-
enableCustomHighlight: true,
|
|
103
|
-
sceneGraph: false,
|
|
104
|
-
edgeModel: true,
|
|
105
|
-
reverseZoomWheel: false,
|
|
106
|
-
enableZoomWheel: true,
|
|
107
|
-
enableGestures: true,
|
|
108
|
-
geometryType: "vsfx"
|
|
109
|
-
};
|
|
113
|
+
return defaultOptions();
|
|
110
114
|
}
|
|
111
115
|
notifierChangeEvent() {
|
|
116
|
+
console.warn("Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.");
|
|
117
|
+
this.change();
|
|
118
|
+
}
|
|
119
|
+
change() {
|
|
112
120
|
if (this._emitter !== undefined) {
|
|
113
121
|
this.saveToStorage();
|
|
114
122
|
this._emitter.emit({
|
|
@@ -159,151 +167,154 @@ class Options {
|
|
|
159
167
|
return this._data;
|
|
160
168
|
}
|
|
161
169
|
set data(value) {
|
|
162
|
-
const
|
|
170
|
+
const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;
|
|
171
|
+
const sceneGraph = enablePartialMode ? false : value.sceneGraph;
|
|
163
172
|
this._data = {
|
|
164
173
|
...Options.defaults(),
|
|
165
174
|
...this._data,
|
|
166
175
|
...value,
|
|
176
|
+
enablePartialMode: enablePartialMode,
|
|
167
177
|
sceneGraph: sceneGraph
|
|
168
178
|
};
|
|
169
|
-
this.
|
|
179
|
+
this.change();
|
|
170
180
|
}
|
|
171
181
|
get showWCS() {
|
|
172
182
|
return this._data.showWCS;
|
|
173
183
|
}
|
|
174
184
|
set showWCS(value) {
|
|
175
185
|
this._data.showWCS = value;
|
|
176
|
-
this.
|
|
186
|
+
this.change();
|
|
177
187
|
}
|
|
178
188
|
get cameraAnimation() {
|
|
179
189
|
return this._data.cameraAnimation;
|
|
180
190
|
}
|
|
181
191
|
set cameraAnimation(value) {
|
|
182
192
|
this._data.cameraAnimation = value;
|
|
183
|
-
this.
|
|
193
|
+
this.change();
|
|
184
194
|
}
|
|
185
195
|
get antialiasing() {
|
|
186
196
|
return this._data.antialiasing;
|
|
187
197
|
}
|
|
188
198
|
set antialiasing(value) {
|
|
189
199
|
this._data.antialiasing = value;
|
|
190
|
-
this.
|
|
200
|
+
this.change();
|
|
191
201
|
}
|
|
192
202
|
get groundShadow() {
|
|
193
203
|
return this._data.groundShadow;
|
|
194
204
|
}
|
|
195
205
|
set groundShadow(value) {
|
|
196
206
|
this._data.groundShadow = value;
|
|
197
|
-
this.
|
|
207
|
+
this.change();
|
|
198
208
|
}
|
|
199
209
|
get shadows() {
|
|
200
210
|
return this._data.shadows;
|
|
201
211
|
}
|
|
202
212
|
set shadows(value) {
|
|
203
213
|
this._data.shadows = value;
|
|
204
|
-
this.
|
|
214
|
+
this.change();
|
|
205
215
|
}
|
|
206
216
|
get cameraAxisXSpeed() {
|
|
207
217
|
return this._data.cameraAxisXSpeed;
|
|
208
218
|
}
|
|
209
219
|
set cameraAxisXSpeed(value) {
|
|
210
220
|
this._data.cameraAxisXSpeed = value;
|
|
211
|
-
this.
|
|
221
|
+
this.change();
|
|
212
222
|
}
|
|
213
223
|
get cameraAxisYSpeed() {
|
|
214
224
|
return this._data.cameraAxisYSpeed;
|
|
215
225
|
}
|
|
216
226
|
set cameraAxisYSpeed(value) {
|
|
217
227
|
this.cameraAxisYSpeed = value;
|
|
218
|
-
this.
|
|
228
|
+
this.change();
|
|
219
229
|
}
|
|
220
230
|
get ambientOcclusion() {
|
|
221
231
|
return this._data.ambientOcclusion;
|
|
222
232
|
}
|
|
223
233
|
set ambientOcclusion(value) {
|
|
224
234
|
this._data.ambientOcclusion = value;
|
|
225
|
-
this.
|
|
235
|
+
this.change();
|
|
226
236
|
}
|
|
227
237
|
get enableStreamingMode() {
|
|
228
238
|
return this._data.enableStreamingMode;
|
|
229
239
|
}
|
|
230
240
|
set enableStreamingMode(value) {
|
|
231
241
|
this._data.enableStreamingMode = value;
|
|
232
|
-
if (this._data.
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
this.notifierChangeEvent();
|
|
242
|
+
if (!value) this._data.enablePartialMode = false;
|
|
243
|
+
this.change();
|
|
236
244
|
}
|
|
237
245
|
get enablePartialMode() {
|
|
238
246
|
return this._data.enablePartialMode;
|
|
239
247
|
}
|
|
240
248
|
set enablePartialMode(value) {
|
|
241
249
|
this._data.enablePartialMode = value;
|
|
242
|
-
if (value)
|
|
243
|
-
|
|
250
|
+
if (value) {
|
|
251
|
+
this._data.enableStreamingMode = true;
|
|
252
|
+
this._data.sceneGraph = false;
|
|
253
|
+
}
|
|
254
|
+
this.change();
|
|
244
255
|
}
|
|
245
256
|
get memoryLimit() {
|
|
246
257
|
return this._data.memoryLimit;
|
|
247
258
|
}
|
|
248
259
|
set memoryLimit(value) {
|
|
249
260
|
this._data.memoryLimit = value;
|
|
250
|
-
this.
|
|
261
|
+
this.change();
|
|
251
262
|
}
|
|
252
263
|
get cuttingPlaneFillColor() {
|
|
253
264
|
return this._data.cuttingPlaneFillColor;
|
|
254
265
|
}
|
|
255
266
|
set cuttingPlaneFillColor(value) {
|
|
256
267
|
this._data.cuttingPlaneFillColor = value;
|
|
257
|
-
this.
|
|
268
|
+
this.change();
|
|
258
269
|
}
|
|
259
270
|
get edgesColor() {
|
|
260
271
|
return this._data.edgesColor;
|
|
261
272
|
}
|
|
262
273
|
set edgesColor(value) {
|
|
263
274
|
this._data.edgesColor = value;
|
|
264
|
-
this.
|
|
275
|
+
this.change();
|
|
265
276
|
}
|
|
266
277
|
get facesColor() {
|
|
267
278
|
return this._data.facesColor;
|
|
268
279
|
}
|
|
269
280
|
set facesColor(value) {
|
|
270
281
|
this._data.facesColor = value;
|
|
271
|
-
this.
|
|
282
|
+
this.change();
|
|
272
283
|
}
|
|
273
284
|
get edgesVisibility() {
|
|
274
285
|
return this._data.edgesVisibility;
|
|
275
286
|
}
|
|
276
287
|
set edgesVisibility(value) {
|
|
277
288
|
this._data.edgesVisibility = value;
|
|
278
|
-
this.
|
|
289
|
+
this.change();
|
|
279
290
|
}
|
|
280
291
|
get edgesOverlap() {
|
|
281
292
|
return this._data.edgesOverlap;
|
|
282
293
|
}
|
|
283
294
|
set edgesOverlap(value) {
|
|
284
295
|
this._data.edgesOverlap = value;
|
|
285
|
-
this.
|
|
296
|
+
this.change();
|
|
286
297
|
}
|
|
287
298
|
get facesOverlap() {
|
|
288
299
|
return this._data.facesOverlap;
|
|
289
300
|
}
|
|
290
301
|
set facesOverlap(value) {
|
|
291
302
|
this._data.facesOverlap = value;
|
|
292
|
-
this.
|
|
303
|
+
this.change();
|
|
293
304
|
}
|
|
294
305
|
get facesTransparancy() {
|
|
295
306
|
return this._data.facesTransparancy;
|
|
296
307
|
}
|
|
297
308
|
set facesTransparancy(value) {
|
|
298
309
|
this._data.facesTransparancy = value;
|
|
299
|
-
this.
|
|
310
|
+
this.change();
|
|
300
311
|
}
|
|
301
312
|
get enableCustomHighlight() {
|
|
302
313
|
return this._data.enableCustomHighlight;
|
|
303
314
|
}
|
|
304
315
|
set enableCustomHighlight(value) {
|
|
305
316
|
this._data.enableCustomHighlight = value;
|
|
306
|
-
this.
|
|
317
|
+
this.change();
|
|
307
318
|
}
|
|
308
319
|
get sceneGraph() {
|
|
309
320
|
return this._data.sceneGraph;
|
|
@@ -311,42 +322,42 @@ class Options {
|
|
|
311
322
|
set sceneGraph(value) {
|
|
312
323
|
this._data.sceneGraph = value;
|
|
313
324
|
if (value) this._data.enablePartialMode = false;
|
|
314
|
-
this.
|
|
325
|
+
this.change();
|
|
315
326
|
}
|
|
316
327
|
get edgeModel() {
|
|
317
328
|
return Boolean(this._data.edgeModel);
|
|
318
329
|
}
|
|
319
330
|
set edgeModel(value) {
|
|
320
331
|
this._data.edgeModel = Boolean(value);
|
|
321
|
-
this.
|
|
332
|
+
this.change();
|
|
322
333
|
}
|
|
323
334
|
get reverseZoomWheel() {
|
|
324
335
|
return this._data.reverseZoomWheel;
|
|
325
336
|
}
|
|
326
337
|
set reverseZoomWheel(value) {
|
|
327
338
|
this._data.reverseZoomWheel = !!value;
|
|
328
|
-
this.
|
|
339
|
+
this.change();
|
|
329
340
|
}
|
|
330
341
|
get enableZoomWheel() {
|
|
331
342
|
return this._data.enableZoomWheel;
|
|
332
343
|
}
|
|
333
344
|
set enableZoomWheel(value) {
|
|
334
345
|
this._data.enableZoomWheel = !!value;
|
|
335
|
-
this.
|
|
346
|
+
this.change();
|
|
336
347
|
}
|
|
337
348
|
get enableGestures() {
|
|
338
349
|
return this._data.enableGestures;
|
|
339
350
|
}
|
|
340
351
|
set enableGestures(value) {
|
|
341
352
|
this._data.enableGestures = !!value;
|
|
342
|
-
this.
|
|
353
|
+
this.change();
|
|
343
354
|
}
|
|
344
355
|
get geometryType() {
|
|
345
356
|
return this._data.geometryType;
|
|
346
357
|
}
|
|
347
358
|
set geometryType(value) {
|
|
348
359
|
this._data.geometryType = value;
|
|
349
|
-
this.
|
|
360
|
+
this.change();
|
|
350
361
|
}
|
|
351
362
|
}
|
|
352
363
|
|
|
@@ -2673,9 +2684,9 @@ class VsfXStreamingLoader extends BaseLoader {
|
|
|
2673
2684
|
updaterController.initialize(this.viewer);
|
|
2674
2685
|
this.viewer._abortController = abortController;
|
|
2675
2686
|
let isFireDatabaseChunk = false;
|
|
2676
|
-
const chunkLoadHandler = (progress,
|
|
2687
|
+
const chunkLoadHandler = (progress, chunk) => {
|
|
2677
2688
|
if (!this.viewer.visualizeJs) return;
|
|
2678
|
-
const status = visViewer.parseVsfx(
|
|
2689
|
+
const status = visViewer.parseVsfx(chunk);
|
|
2679
2690
|
updaterController.update(UpdateType.kDelay);
|
|
2680
2691
|
this.viewer.emitEvent({
|
|
2681
2692
|
type: "geometryprogress",
|
|
@@ -2694,13 +2705,13 @@ class VsfXStreamingLoader extends BaseLoader {
|
|
|
2694
2705
|
this.viewer.resize();
|
|
2695
2706
|
this.viewer.emitEvent({
|
|
2696
2707
|
type: "databasechunk",
|
|
2697
|
-
data:
|
|
2708
|
+
data: chunk,
|
|
2698
2709
|
model: this.model
|
|
2699
2710
|
});
|
|
2700
2711
|
} else {
|
|
2701
2712
|
this.viewer.emitEvent({
|
|
2702
2713
|
type: "geometrychunk",
|
|
2703
|
-
data:
|
|
2714
|
+
data: chunk,
|
|
2704
2715
|
model: this.model
|
|
2705
2716
|
});
|
|
2706
2717
|
}
|
|
@@ -2711,7 +2722,7 @@ class VsfXStreamingLoader extends BaseLoader {
|
|
|
2711
2722
|
type: "geometrystart",
|
|
2712
2723
|
model: this.model
|
|
2713
2724
|
});
|
|
2714
|
-
await this.model.
|
|
2725
|
+
await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal);
|
|
2715
2726
|
console.timeEnd("File load time");
|
|
2716
2727
|
updaterController.update(UpdateType.kNormal);
|
|
2717
2728
|
this.viewer.emitEvent({
|
|
@@ -2729,6 +2740,10 @@ class VsfXStreamingLoader extends BaseLoader {
|
|
|
2729
2740
|
}
|
|
2730
2741
|
}
|
|
2731
2742
|
|
|
2743
|
+
const PENDING_REQUESTS_SIZE = 50;
|
|
2744
|
+
|
|
2745
|
+
const PENDING_REQUESTS_TIMEOUT = 250;
|
|
2746
|
+
|
|
2732
2747
|
class VsfXPartialLoader extends BaseLoader {
|
|
2733
2748
|
async load() {
|
|
2734
2749
|
if (!this.viewer.visualizeJs) return;
|
|
@@ -2738,8 +2753,6 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2738
2753
|
const abortControllerForRequestMap = new Map;
|
|
2739
2754
|
let servicePartAborted = false;
|
|
2740
2755
|
const pendingRequestsMap = new Map;
|
|
2741
|
-
const PENDING_REQUESTS_SIZE = 50;
|
|
2742
|
-
const PENDING_REQUESTS_TIMEOUT = 250;
|
|
2743
2756
|
let pendingRequestsTimerId = 0;
|
|
2744
2757
|
const pendingRequestsAbortHandler = () => clearTimeout(pendingRequestsTimerId);
|
|
2745
2758
|
const pendingRequestsAbortController = new AbortController;
|
|
@@ -2749,9 +2762,9 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2749
2762
|
this.viewer._abortController = abortController;
|
|
2750
2763
|
this.viewer._abortControllerForRequestMap = abortControllerForRequestMap;
|
|
2751
2764
|
visViewer.memoryLimit = this.options.memoryLimit;
|
|
2752
|
-
const
|
|
2765
|
+
const chunkLoadHandler = (progress, chunk, requestId = 0) => {
|
|
2753
2766
|
if (!this.viewer.visualizeJs) return;
|
|
2754
|
-
const state = visViewer.parseVsfxInPartialMode(requestId,
|
|
2767
|
+
const state = visViewer.parseVsfxInPartialMode(requestId, chunk);
|
|
2755
2768
|
updaterController.update(UpdateType.kDelay);
|
|
2756
2769
|
this.viewer.emitEvent({
|
|
2757
2770
|
type: "geometryprogress",
|
|
@@ -2765,22 +2778,22 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2765
2778
|
this.viewer.resize();
|
|
2766
2779
|
this.viewer.emitEvent({
|
|
2767
2780
|
type: "databasechunk",
|
|
2768
|
-
data:
|
|
2781
|
+
data: chunk,
|
|
2769
2782
|
model: this.model
|
|
2770
2783
|
});
|
|
2771
2784
|
} else {
|
|
2772
2785
|
this.viewer.emitEvent({
|
|
2773
2786
|
type: "geometrychunk",
|
|
2774
|
-
data:
|
|
2787
|
+
data: chunk,
|
|
2775
2788
|
model: this.model
|
|
2776
2789
|
});
|
|
2777
2790
|
}
|
|
2778
2791
|
};
|
|
2779
|
-
const
|
|
2792
|
+
const downloadResourceRange = async (dataId, requestId, ranges) => {
|
|
2780
2793
|
const abortCtrl = new AbortController;
|
|
2781
2794
|
abortControllerForRequestMap.set(requestId, abortCtrl);
|
|
2782
2795
|
try {
|
|
2783
|
-
await this.model.
|
|
2796
|
+
await this.model.downloadResourceRange(dataId, ranges, requestId, chunkLoadHandler, abortCtrl.signal);
|
|
2784
2797
|
} catch (error) {
|
|
2785
2798
|
this.viewer.emitEvent({
|
|
2786
2799
|
type: "geometryerror",
|
|
@@ -2788,25 +2801,23 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2788
2801
|
model: this.model
|
|
2789
2802
|
});
|
|
2790
2803
|
} finally {
|
|
2791
|
-
|
|
2792
|
-
requests.forEach((requestId => visViewer.onRequestResponseComplete(requestId)));
|
|
2804
|
+
ranges.forEach((range => visViewer.onRequestResponseComplete(range.requestId)));
|
|
2793
2805
|
abortControllerForRequestMap.delete(requestId);
|
|
2794
2806
|
updaterController.update(UpdateType.kNormal);
|
|
2795
2807
|
}
|
|
2796
2808
|
};
|
|
2797
|
-
const
|
|
2798
|
-
const
|
|
2809
|
+
const requestRecordsToRanges = (requestId, records) => {
|
|
2810
|
+
const ranges = [];
|
|
2799
2811
|
for (let i = 0; i < records.size(); i++) {
|
|
2800
2812
|
const record = records.get(i);
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
begin: record.begin,
|
|
2804
|
-
end: record.end
|
|
2805
|
-
size: parseInt(record.end, 10) - parseInt(record.begin, 10)
|
|
2813
|
+
ranges.push({
|
|
2814
|
+
requestId: requestId,
|
|
2815
|
+
begin: Number(record.begin),
|
|
2816
|
+
end: Number(record.end)
|
|
2806
2817
|
});
|
|
2807
2818
|
record.delete();
|
|
2808
2819
|
}
|
|
2809
|
-
return
|
|
2820
|
+
return ranges;
|
|
2810
2821
|
};
|
|
2811
2822
|
const objectHandler = {
|
|
2812
2823
|
onServicePartReceived: bHasIndex => {
|
|
@@ -2816,11 +2827,11 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2816
2827
|
}
|
|
2817
2828
|
},
|
|
2818
2829
|
onRequest: (requestId, records) => {
|
|
2819
|
-
|
|
2830
|
+
const ranges = requestRecordsToRanges(requestId, records);
|
|
2831
|
+
downloadResourceRange(this.model.database, requestId, ranges);
|
|
2820
2832
|
},
|
|
2821
2833
|
onFullLoaded: () => {
|
|
2822
2834
|
updaterController.update(UpdateType.kNormal);
|
|
2823
|
-
console.timeEnd("File load time");
|
|
2824
2835
|
},
|
|
2825
2836
|
onRequestResponseParsed: requestId => {
|
|
2826
2837
|
abortControllerForRequestMap.delete(requestId);
|
|
@@ -2830,49 +2841,52 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2830
2841
|
const abortCtrl = abortControllerForRequestMap.get(requestId);
|
|
2831
2842
|
if (abortCtrl) abortCtrl.abort();
|
|
2832
2843
|
},
|
|
2833
|
-
onRequestResourceFile:
|
|
2844
|
+
onRequestResourceFile: (requestId, _, records) => {
|
|
2834
2845
|
const dataId = `${this.model.fileId}${this.model.file.type}`;
|
|
2835
|
-
|
|
2836
|
-
let
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2846
|
+
const ranges = requestRecordsToRanges(requestId, records);
|
|
2847
|
+
let pendingRanges = [];
|
|
2848
|
+
let requestNumber = 0;
|
|
2849
|
+
const pendingRequest = pendingRequestsMap.get(dataId);
|
|
2850
|
+
if (pendingRequest) {
|
|
2851
|
+
pendingRanges = pendingRequest.ranges;
|
|
2852
|
+
requestNumber = pendingRequest.number;
|
|
2841
2853
|
}
|
|
2842
|
-
if (
|
|
2854
|
+
if (requestNumber <= 5) {
|
|
2843
2855
|
pendingRequestsMap.set(dataId, {
|
|
2844
|
-
|
|
2845
|
-
number:
|
|
2856
|
+
ranges: [],
|
|
2857
|
+
number: requestNumber + 1
|
|
2846
2858
|
});
|
|
2847
|
-
|
|
2859
|
+
downloadResourceRange(dataId, requestId, ranges);
|
|
2848
2860
|
return;
|
|
2849
2861
|
}
|
|
2850
|
-
|
|
2862
|
+
pendingRanges = pendingRanges.concat(ranges);
|
|
2863
|
+
if (pendingRanges.length >= PENDING_REQUESTS_SIZE) {
|
|
2851
2864
|
if (pendingRequestsTimerId) {
|
|
2852
2865
|
window.clearTimeout(pendingRequestsTimerId);
|
|
2853
2866
|
pendingRequestsTimerId = 0;
|
|
2854
2867
|
}
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2868
|
+
pendingRequestsMap.set(dataId, {
|
|
2869
|
+
ranges: [],
|
|
2870
|
+
number: requestNumber + 1
|
|
2871
|
+
});
|
|
2872
|
+
downloadResourceRange(dataId, requestId, pendingRanges);
|
|
2873
|
+
return;
|
|
2859
2874
|
}
|
|
2860
2875
|
pendingRequestsMap.set(dataId, {
|
|
2861
|
-
|
|
2862
|
-
number:
|
|
2876
|
+
ranges: pendingRanges,
|
|
2877
|
+
number: requestNumber + 1
|
|
2863
2878
|
});
|
|
2864
2879
|
if (pendingRequestsTimerId === 0) {
|
|
2865
2880
|
pendingRequestsTimerId = window.setTimeout((() => {
|
|
2866
2881
|
pendingRequestsAbortController.signal.removeEventListener("abort", pendingRequestsAbortHandler);
|
|
2867
2882
|
pendingRequestsTimerId = 0;
|
|
2868
|
-
pendingRequestsMap.forEach(((
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
array: [],
|
|
2874
|
-
number: requestsRecord.number + 1
|
|
2883
|
+
pendingRequestsMap.forEach(((request, dataId) => {
|
|
2884
|
+
if (request.ranges.length > 0) {
|
|
2885
|
+
pendingRequestsMap.set(dataId, {
|
|
2886
|
+
ranges: [],
|
|
2887
|
+
number: request.number + 1
|
|
2875
2888
|
});
|
|
2889
|
+
downloadResourceRange(dataId, requestId, request.ranges);
|
|
2876
2890
|
}
|
|
2877
2891
|
}));
|
|
2878
2892
|
}), PENDING_REQUESTS_TIMEOUT);
|
|
@@ -2883,13 +2897,12 @@ class VsfXPartialLoader extends BaseLoader {
|
|
|
2883
2897
|
}
|
|
2884
2898
|
};
|
|
2885
2899
|
visViewer.attachPartialResolver(objectHandler);
|
|
2886
|
-
console.time("File load time");
|
|
2887
2900
|
try {
|
|
2888
2901
|
this.viewer.emitEvent({
|
|
2889
2902
|
type: "geometrystart",
|
|
2890
2903
|
model: this.model
|
|
2891
2904
|
});
|
|
2892
|
-
await this.model.
|
|
2905
|
+
await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal).catch((error => {
|
|
2893
2906
|
if (!servicePartAborted) throw error;
|
|
2894
2907
|
}));
|
|
2895
2908
|
this.viewer.emitEvent({
|
|
@@ -2918,29 +2931,36 @@ class VsfXLoader extends BaseLoader {
|
|
|
2918
2931
|
const visViewer = visLib.getViewer();
|
|
2919
2932
|
const abortController = new AbortController;
|
|
2920
2933
|
this.viewer._abortController = abortController;
|
|
2934
|
+
const chunkLoadHandler = progress => {
|
|
2935
|
+
this.viewer.emitEvent({
|
|
2936
|
+
type: "geometryprogress",
|
|
2937
|
+
data: progress,
|
|
2938
|
+
model: this.model
|
|
2939
|
+
});
|
|
2940
|
+
};
|
|
2921
2941
|
console.time("File load time");
|
|
2922
2942
|
try {
|
|
2923
2943
|
this.viewer.emitEvent({
|
|
2924
2944
|
type: "geometrystart",
|
|
2925
2945
|
model: this.model
|
|
2926
2946
|
});
|
|
2927
|
-
const
|
|
2928
|
-
type: "geometryprogress",
|
|
2929
|
-
data: progress,
|
|
2930
|
-
model: this.model
|
|
2931
|
-
});
|
|
2932
|
-
const arrayBuffer = await this.model.downloadResource(this.model.database, progressCb, abortController.signal);
|
|
2947
|
+
const arrayBuffer = await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal);
|
|
2933
2948
|
if (abortController.signal.aborted) {
|
|
2934
2949
|
await Promise.reject(new Error(`Open model aborted ${this.model.name}`));
|
|
2935
2950
|
}
|
|
2951
|
+
const data = new Uint8Array(arrayBuffer);
|
|
2936
2952
|
if (this.viewer.visualizeJs) {
|
|
2937
|
-
visViewer.parseVsfx(
|
|
2938
|
-
this.viewer.update(true);
|
|
2953
|
+
visViewer.parseVsfx(data);
|
|
2939
2954
|
this.viewer.syncOpenCloudVisualStyle(false);
|
|
2940
2955
|
this.viewer.syncOptions();
|
|
2941
2956
|
this.viewer.resize();
|
|
2942
2957
|
}
|
|
2943
2958
|
console.timeEnd("File load time");
|
|
2959
|
+
this.viewer.emitEvent({
|
|
2960
|
+
type: "databasechunk",
|
|
2961
|
+
data: data,
|
|
2962
|
+
model: this.model
|
|
2963
|
+
});
|
|
2944
2964
|
this.viewer.emitEvent({
|
|
2945
2965
|
type: "geometryend",
|
|
2946
2966
|
model: this.model
|
|
@@ -5108,9 +5128,6 @@ class Viewer extends EventEmitter2 {
|
|
|
5108
5128
|
try {
|
|
5109
5129
|
visualStyleId = visViewer.findVisualStyle("OpenCloud");
|
|
5110
5130
|
} catch (e) {
|
|
5111
|
-
if (!isInitializing) {
|
|
5112
|
-
console.log("OpenCloud visual style not found, creating it on client side");
|
|
5113
|
-
}
|
|
5114
5131
|
visualStyleId = visViewer.createVisualStyle("OpenCloud");
|
|
5115
5132
|
const colorDef = new visLib.OdTvColorDef(66, 66, 66);
|
|
5116
5133
|
const shadedVsId = visViewer.findVisualStyle("Realistic");
|
|
@@ -5129,7 +5146,7 @@ class Viewer extends EventEmitter2 {
|
|
|
5129
5146
|
device.delete();
|
|
5130
5147
|
return this;
|
|
5131
5148
|
}
|
|
5132
|
-
syncOptions(options = this.options
|
|
5149
|
+
syncOptions(options = this.options) {
|
|
5133
5150
|
if (!this.visualizeJs) return this;
|
|
5134
5151
|
const visLib = this.visLib();
|
|
5135
5152
|
const visViewer = visLib.getViewer();
|
|
@@ -5179,7 +5196,7 @@ class Viewer extends EventEmitter2 {
|
|
|
5179
5196
|
this.update();
|
|
5180
5197
|
return this;
|
|
5181
5198
|
}
|
|
5182
|
-
syncHighlightingOptions(options = this.options
|
|
5199
|
+
syncHighlightingOptions(options = this.options) {
|
|
5183
5200
|
if (!this.visualizeJs) return this;
|
|
5184
5201
|
const params = options.enableCustomHighlight ? options : Options.defaults();
|
|
5185
5202
|
const visLib = this.visLib();
|
|
@@ -5355,12 +5372,12 @@ class Viewer extends EventEmitter2 {
|
|
|
5355
5372
|
if (!model) throw new Error("No default model found");
|
|
5356
5373
|
const overrideOptions = new Options;
|
|
5357
5374
|
overrideOptions.data = this.options.data;
|
|
5358
|
-
if (file.type === ".rcs") {
|
|
5375
|
+
if (file.type === ".rcs" && !overrideOptions.enablePartialMode) {
|
|
5359
5376
|
console.log("Partial load mode is forced for RCS file");
|
|
5360
5377
|
overrideOptions.enablePartialMode = true;
|
|
5361
5378
|
}
|
|
5362
5379
|
const loaderFactory = new LoaderFactory;
|
|
5363
|
-
const loader = loaderFactory.create(this, model, overrideOptions
|
|
5380
|
+
const loader = loaderFactory.create(this, model, overrideOptions);
|
|
5364
5381
|
await this.loadReferences(model);
|
|
5365
5382
|
await loader.load();
|
|
5366
5383
|
if (this.visualizeJs) {
|
|
@@ -5591,5 +5608,5 @@ class Viewer extends EventEmitter2 {
|
|
|
5591
5608
|
}
|
|
5592
5609
|
}
|
|
5593
5610
|
|
|
5594
|
-
export { OdBaseDragger, Options, Viewer, commands };
|
|
5611
|
+
export { CANVAS_EVENTS, OdBaseDragger, Options, Viewer, commands, defaultOptions };
|
|
5595
5612
|
//# sourceMappingURL=viewer-visualize.module.js.map
|