@inweb/viewer-visualize 25.3.19 → 25.3.20

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.
@@ -693,27 +693,24 @@ commands("VisualizeJS").registerCommand("zoomToSelected", zoomToSelected);
693
693
 
694
694
  class EventEmitter2 {
695
695
  constructor() {
696
- this._listeners = undefined;
696
+ this._listeners = {};
697
697
  }
698
698
  addEventListener(type, listener) {
699
- if (this._listeners === undefined) this._listeners = {};
700
699
  if (this._listeners[type] === undefined) this._listeners[type] = [];
701
700
  this._listeners[type].push(listener);
702
701
  return this;
703
702
  }
704
703
  removeEventListener(type, listener) {
705
- if (this._listeners === undefined) return this;
706
704
  if (this._listeners[type] === undefined) return this;
707
705
  const listeners = this._listeners[type].filter((x => x !== listener));
708
- this._listeners[type] = listeners.length === 0 ? undefined : listeners;
706
+ if (listeners.length !== 0) this._listeners[type] = listeners; else delete this._listeners[type];
709
707
  return this;
710
708
  }
711
709
  removeAllListeners(type) {
712
- if (type) this._listeners[type] = undefined; else this._listeners = undefined;
710
+ if (type) delete this._listeners[type]; else this._listeners = {};
713
711
  return this;
714
712
  }
715
713
  emitEvent(event) {
716
- if (this._listeners === undefined) return false;
717
714
  if (this._listeners[event.type] === undefined) return false;
718
715
  const invoke = this._listeners[event.type].slice();
719
716
  invoke.forEach((listener => listener.call(this, event)));
@@ -2583,27 +2580,25 @@ class TCSLoader extends BaseLoader {
2583
2580
  const visLib = this.viewer.visLib();
2584
2581
  const visViewer = visLib.getViewer();
2585
2582
  const abortController = new AbortController;
2586
- const listFileForDownload = [ this.model.database, ...this.model.geometry ];
2587
- const chunksProgress = listFileForDownload.map((() => 0));
2588
- const calcProgress = (index, progress) => {
2589
- chunksProgress[index] = progress;
2590
- const fileProgress = chunksProgress.reduce(((acc, progress) => acc += progress)) / (chunksProgress.length || 1);
2591
- this.viewer.emitEvent({
2592
- type: "geometryprogress",
2593
- data: fileProgress,
2594
- model: this.model
2595
- });
2596
- };
2583
+ const filesToDownload = [ this.model.database, ...this.model.geometry ];
2597
2584
  this.viewer._abortController = abortController;
2585
+ console.time("File load time");
2598
2586
  try {
2599
2587
  this.viewer.emitEvent({
2600
2588
  type: "geometrystart",
2601
2589
  model: this.model
2602
2590
  });
2603
- for (let i = 0; i < listFileForDownload.length; i++) {
2604
- const chunk = listFileForDownload[i];
2605
- const progressCb = progress => calcProgress(i, progress);
2606
- const arrayBuffer = await this.model.downloadResource(chunk, progressCb, abortController.signal);
2591
+ for (let i = 0; i < filesToDownload.length; i++) {
2592
+ const dataId = filesToDownload[i];
2593
+ const chunkLoadHandler = progress => {
2594
+ const data = (i + progress) / filesToDownload.length;
2595
+ this.viewer.emitEvent({
2596
+ type: "geometryprogress",
2597
+ data: data,
2598
+ model: this.model
2599
+ });
2600
+ };
2601
+ const arrayBuffer = await this.model.downloadResource(dataId, chunkLoadHandler, abortController.signal);
2607
2602
  if (abortController.signal.aborted) {
2608
2603
  await Promise.reject(new Error(`Open model aborted ${this.model.name}`));
2609
2604
  }
@@ -2628,6 +2623,59 @@ class TCSLoader extends BaseLoader {
2628
2623
  });
2629
2624
  }
2630
2625
  }
2626
+ console.timeEnd("File load time");
2627
+ this.viewer.emitEvent({
2628
+ type: "geometryend",
2629
+ model: this.model
2630
+ });
2631
+ } catch (error) {
2632
+ this.viewer.emitEvent({
2633
+ type: "geometryerror",
2634
+ data: error,
2635
+ model: this.model
2636
+ });
2637
+ throw error;
2638
+ }
2639
+ }
2640
+ }
2641
+
2642
+ class VsfXLoader extends BaseLoader {
2643
+ async load() {
2644
+ if (!this.viewer.visualizeJs) return;
2645
+ const visLib = this.viewer.visLib();
2646
+ const visViewer = visLib.getViewer();
2647
+ const abortController = new AbortController;
2648
+ this.viewer._abortController = abortController;
2649
+ const chunkLoadHandler = progress => {
2650
+ this.viewer.emitEvent({
2651
+ type: "geometryprogress",
2652
+ data: progress,
2653
+ model: this.model
2654
+ });
2655
+ };
2656
+ console.time("File load time");
2657
+ try {
2658
+ this.viewer.emitEvent({
2659
+ type: "geometrystart",
2660
+ model: this.model
2661
+ });
2662
+ const arrayBuffer = await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal);
2663
+ if (abortController.signal.aborted) {
2664
+ await Promise.reject(new Error(`Open model aborted ${this.model.name}`));
2665
+ }
2666
+ const data = new Uint8Array(arrayBuffer);
2667
+ if (this.viewer.visualizeJs) {
2668
+ visViewer.parseVsfx(data);
2669
+ this.viewer.syncOpenCloudVisualStyle(false);
2670
+ this.viewer.syncOptions();
2671
+ this.viewer.resize();
2672
+ }
2673
+ console.timeEnd("File load time");
2674
+ this.viewer.emitEvent({
2675
+ type: "databasechunk",
2676
+ data: data,
2677
+ model: this.model
2678
+ });
2631
2679
  this.viewer.emitEvent({
2632
2680
  type: "geometryend",
2633
2681
  model: this.model
@@ -2657,6 +2705,7 @@ var UpdateType;
2657
2705
 
2658
2706
  class UpdaterController {
2659
2707
  constructor() {
2708
+ this.lastUpdate = 0;
2660
2709
  this.delayUpdateTime = START_UPDATE_TIME;
2661
2710
  }
2662
2711
  initialize(viewer) {
@@ -2793,7 +2842,7 @@ class VsfXPartialLoader extends BaseLoader {
2793
2842
  const abortCtrl = new AbortController;
2794
2843
  abortControllerForRequestMap.set(requestId, abortCtrl);
2795
2844
  try {
2796
- await this.model.downloadResourceRange(dataId, ranges, requestId, chunkLoadHandler, abortCtrl.signal);
2845
+ await this.model.downloadResourceRange(dataId, requestId, ranges, chunkLoadHandler, abortCtrl.signal);
2797
2846
  } catch (error) {
2798
2847
  this.viewer.emitEvent({
2799
2848
  type: "geometryerror",
@@ -2924,58 +2973,6 @@ class VsfXPartialLoader extends BaseLoader {
2924
2973
  }
2925
2974
  }
2926
2975
 
2927
- class VsfXLoader extends BaseLoader {
2928
- async load() {
2929
- if (!this.viewer.visualizeJs) return;
2930
- const visLib = this.viewer.visLib();
2931
- const visViewer = visLib.getViewer();
2932
- const abortController = new AbortController;
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
- };
2941
- console.time("File load time");
2942
- try {
2943
- this.viewer.emitEvent({
2944
- type: "geometrystart",
2945
- model: this.model
2946
- });
2947
- const arrayBuffer = await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal);
2948
- if (abortController.signal.aborted) {
2949
- await Promise.reject(new Error(`Open model aborted ${this.model.name}`));
2950
- }
2951
- const data = new Uint8Array(arrayBuffer);
2952
- if (this.viewer.visualizeJs) {
2953
- visViewer.parseVsfx(data);
2954
- this.viewer.syncOpenCloudVisualStyle(false);
2955
- this.viewer.syncOptions();
2956
- this.viewer.resize();
2957
- }
2958
- console.timeEnd("File load time");
2959
- this.viewer.emitEvent({
2960
- type: "databasechunk",
2961
- data: data,
2962
- model: this.model
2963
- });
2964
- this.viewer.emitEvent({
2965
- type: "geometryend",
2966
- model: this.model
2967
- });
2968
- } catch (error) {
2969
- this.viewer.emitEvent({
2970
- type: "geometryerror",
2971
- data: error,
2972
- model: this.model
2973
- });
2974
- throw error;
2975
- }
2976
- }
2977
- }
2978
-
2979
2976
  class LoaderFactory {
2980
2977
  create(viewer, model, options) {
2981
2978
  const geometryType = model.database.split(".").pop();
@@ -4918,15 +4915,17 @@ const OVERLAY_VIEW_NAME = "$OVERLAY_VIEW_NAME";
4918
4915
  const isExist = value => value !== undefined && value !== null;
4919
4916
 
4920
4917
  class Viewer extends EventEmitter2 {
4921
- constructor(client, params = {
4922
- markupType: MarkupType.Konva
4923
- }) {
4918
+ constructor(client, params = {}) {
4924
4919
  var _a, _b;
4925
4920
  super();
4921
+ this._visualizeJsUrl = "";
4922
+ this.frameId = 0;
4926
4923
  this.configure(params);
4927
4924
  this._options = new Options(this);
4928
4925
  this.client = client;
4929
4926
  this._activeDragger = null;
4927
+ this._zoomWheelDragger = null;
4928
+ this._gestureManager = null;
4930
4929
  this._renderTime = 0;
4931
4930
  this.markup = MarkupFactory.createMarkup((_a = params.markupType) !== null && _a !== void 0 ? _a : MarkupType.Konva);
4932
4931
  this.draggerFactory = new Map;
@@ -5064,7 +5063,7 @@ class Viewer extends EventEmitter2 {
5064
5063
  });
5065
5064
  return this;
5066
5065
  }
5067
- update(force) {
5066
+ update(force = false) {
5068
5067
  var _a, _b;
5069
5068
  if (this._enableAutoUpdate) {
5070
5069
  if (force) {
@@ -5328,6 +5327,7 @@ class Viewer extends EventEmitter2 {
5328
5327
  async loadReferences(model) {
5329
5328
  var _a;
5330
5329
  if (!this.visualizeJs) return this;
5330
+ if (!this.client) return this;
5331
5331
  const abortController = new AbortController;
5332
5332
  (_a = this._abortControllerForReferences) === null || _a === void 0 ? void 0 : _a.abort();
5333
5333
  this._abortControllerForReferences = abortController;
@@ -5364,7 +5364,7 @@ class Viewer extends EventEmitter2 {
5364
5364
  file: file,
5365
5365
  model: file
5366
5366
  });
5367
- let model;
5367
+ let model = undefined;
5368
5368
  if (file) {
5369
5369
  const models = await file.getModels() || [];
5370
5370
  model = models.find((model => model.default)) || models[0];