@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.
@@ -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 = Options.defaults();
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 sceneGraph = value.enablePartialMode ? false : value.sceneGraph;
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.enableStreamingMode) {
233
- this._data.enablePartialMode = false;
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) this._data.sceneGraph = false;
243
- this.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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.notifierChangeEvent();
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, data) => {
2687
+ const chunkLoadHandler = (progress, chunk) => {
2677
2688
  if (!this.viewer.visualizeJs) return;
2678
- const status = visViewer.parseVsfx(data);
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: 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: 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.partialDownloadResource(this.model.database, chunkLoadHandler, abortController.signal);
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 requestLoadHandler = (progress, data, requestId) => {
2765
+ const chunkLoadHandler = (progress, chunk, requestId = 0) => {
2753
2766
  if (!this.viewer.visualizeJs) return;
2754
- const state = visViewer.parseVsfxInPartialMode(requestId, data);
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: 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: data,
2787
+ data: chunk,
2775
2788
  model: this.model
2776
2789
  });
2777
2790
  }
2778
2791
  };
2779
- const downloadPartOfFile = async (requestId, records, dataId, isMultipleParts = false) => {
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.downloadFileRange(requestId, records, dataId, requestLoadHandler, abortCtrl.signal);
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
- const requests = isMultipleParts ? [ ...new Set(records.map((item => item.reqId))) ] : [ requestId ];
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 recordsToArray = (requestId, records) => {
2798
- const res = [];
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
- res.push({
2802
- reqId: requestId,
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 res;
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
- downloadPartOfFile(requestId, records, this.model.database);
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: async (requestId, _, records) => {
2844
+ onRequestResourceFile: (requestId, _, records) => {
2834
2845
  const dataId = `${this.model.fileId}${this.model.file.type}`;
2835
- let pendingRequests = [];
2836
- let recNumber = 0;
2837
- const pendingRequestsRecord = pendingRequestsMap.get(dataId);
2838
- if (pendingRequestsRecord) {
2839
- pendingRequests = pendingRequestsRecord.array;
2840
- recNumber = pendingRequestsRecord.number;
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 (recNumber < 6) {
2854
+ if (requestNumber <= 5) {
2843
2855
  pendingRequestsMap.set(dataId, {
2844
- array: pendingRequests,
2845
- number: recNumber + 1
2856
+ ranges: [],
2857
+ number: requestNumber + 1
2846
2858
  });
2847
- await downloadPartOfFile(requestId, records, dataId);
2859
+ downloadResourceRange(dataId, requestId, ranges);
2848
2860
  return;
2849
2861
  }
2850
- if (pendingRequests.length >= PENDING_REQUESTS_SIZE) {
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
- downloadPartOfFile(requestId, pendingRequests, dataId, true);
2856
- pendingRequests = [ ...recordsToArray(requestId, records) ];
2857
- } else {
2858
- pendingRequests = [ ...pendingRequests, ...recordsToArray(requestId, records) ];
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
- array: pendingRequests,
2862
- number: recNumber + 1
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(((requestsRecord, keyFileName) => {
2869
- const array = requestsRecord.array;
2870
- if (array.length > 0) {
2871
- downloadPartOfFile(requestId, array, keyFileName, true);
2872
- pendingRequestsMap.set(keyFileName, {
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.downloadFileRange(0, null, this.model.database, requestLoadHandler, abortController.signal).catch((error => {
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 progressCb = progress => this.viewer.emitEvent({
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(new Uint8Array(arrayBuffer));
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.data) {
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.data) {
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.data);
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