@inweb/viewer-visualize 26.7.0 → 26.7.2

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.
@@ -42,5 +42,4 @@ import { IDraggersRegistry } from "@inweb/viewer-core";
42
42
  * viewer.setActiveDragger("MyDragger");
43
43
  * ```
44
44
  */
45
- declare const draggers: IDraggersRegistry;
46
- export { draggers };
45
+ export declare const draggers: IDraggersRegistry;
@@ -0,0 +1,10 @@
1
+ export declare class FileLoader {
2
+ private requestHeader;
3
+ private withCredentials;
4
+ private abortSignal;
5
+ constructor();
6
+ setRequestHeader(requestHeader: HeadersInit): void;
7
+ setWithCredentials(withCredentials: boolean): void;
8
+ setAbortSignal(abortSignal: AbortSignal): void;
9
+ load(file: any, onProgress?: (event: any) => void): Promise<ArrayBuffer>;
10
+ }
@@ -0,0 +1,8 @@
1
+ import { Loader, LoadParams } from "@inweb/viewer-core";
2
+ import { Viewer } from "../Viewer";
3
+ export declare class VSFFileLoader extends Loader {
4
+ viewer: Viewer;
5
+ constructor(viewer: Viewer);
6
+ isSupport(file: any, format?: string): boolean;
7
+ load(file: any, format?: string, params?: LoadParams): Promise<this>;
8
+ }
@@ -0,0 +1,8 @@
1
+ import { Loader, LoadParams } from "@inweb/viewer-core";
2
+ import { Viewer } from "../Viewer";
3
+ export declare class VSFXFileLoader extends Loader {
4
+ viewer: Viewer;
5
+ constructor(viewer: Viewer);
6
+ isSupport(file: any, format?: string): boolean;
7
+ load(file: any, format?: string, params?: LoadParams): Promise<this>;
8
+ }
@@ -27,8 +27,7 @@ import { ILoadersRegistry } from "@inweb/viewer-core";
27
27
  * @example Implementing a custom loader.
28
28
  *
29
29
  * ```javascript
30
- * import { Loader } from "@inweb/viewer-core";
31
- * import { loaders, Viewer } from "@inweb/viewer-visualize";
30
+ * import { Loader, loaders, Viewer } from "@inweb/viewer-visualize";
32
31
  *
33
32
  * class MyLoader extends Loader {
34
33
  * public viewer: Viewer;
@@ -55,7 +54,7 @@ import { ILoadersRegistry } from "@inweb/viewer-core";
55
54
  * this.viewer.syncOverlay();
56
55
  * this.viewer.resize();
57
56
  *
58
- * this.viewer.emitEvent({ type: "databasechunk", data: model, file });
57
+ * this.viewer.emitEvent({ type: "databasechunk", data, file });
59
58
  *
60
59
  * return Promise.resove(this);
61
60
  * };
@@ -199,33 +199,84 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
199
199
  loadReferences(model: Model | File | Assembly): Promise<this>;
200
200
  applyModelTransformMatrix(model: Model | Assembly): void;
201
201
  applySceneGraphSettings(options?: IOptions): void;
202
- open(file: FileSource, params?: {
203
- format?: string;
204
- mode?: string;
205
- }): Promise<this>;
206
- /**
207
- * Deprecated since `26.4`. Use {@link open | open()} instead.
208
- */
209
- openVsfFile(buffer: Uint8Array | ArrayBuffer): this;
210
202
  /**
211
- * Loads a `VSFX` file into the viewer.
203
+ * Loads a file into the viewer.
204
+ *
205
+ * The viewer must be {@link initialize | initialized} before opening the file. Otherwise, `open()` does
206
+ * nothing.
207
+ *
208
+ * This method requires a `Client` instance to be specified to load file from the Open Cloud Server.
209
+ * The file geometry data on the Open Cloud Server must be converted into a `vsfx` format, otherwise an
210
+ * exception will be thrown.
211
+ *
212
+ * For files from Open Cloud Server, the default model will be loaded. If there is no default model,
213
+ * first availiable model will be loaded. If no models are found in the file, an exception will be
214
+ * thrown.
212
215
  *
213
- * This method does not support {@link IOptions.enableStreamingMode | streaming} or
214
- * {@link IOptions.enablePartialMode | partial streaming} mode.
216
+ * For URLs, the file extension is used to determine the file format. For a `ArrayBuffer` and `Data
217
+ * URL`, a file format must be specified using `params.format` parameter (see below). If no appropriate
218
+ * loader is found for the specified format, an exception will be thrown.
215
219
  *
216
220
  * If there was an active dragger before opening the file, it will be deactivated. After opening the
217
221
  * file, you must manually activate the required dragger.
218
222
  *
223
+ * To open a large files, enable {@link IOptions.enablePartialMode | partial streaming} mode before
224
+ * opening. Partial streaming is only supported when opening files from an Open Cloud Server, but not
225
+ * local files and URLs. Example:
226
+ *
227
+ * ```javascript
228
+ * viewer.options.enableStreamingMode = true;
229
+ * viewer.options.enablePartialMode = true;
230
+ * await viewer.open(file);
231
+ * ```
232
+ *
219
233
  * Fires:
220
234
  *
221
235
  * - {@link OpenEvent | open}
222
236
  * - {@link GeometryStartEvent | geometrystart}
223
237
  * - {@link GeometryProgressEvent | geometryprogress}
224
238
  * - {@link DatabaseChunkEvent | databasechunk}
239
+ * - {@link GeometryChunkEvent | geometrychunk}
225
240
  * - {@link GeometryEndEvent | geometryend}
226
241
  * - {@link GeometryErrorEvent | geometryerror}
227
242
  *
228
- * @param buffer - Binary data buffer to load.
243
+ * @param file - File to load. Can be one of:
244
+ *
245
+ * - `File`, `Assembly` or `Model` instance from the Open Cloud Server
246
+ * - File `URL` string
247
+ * - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string
248
+ * - {@link https://developer.mozilla.org/docs/Web/API/File | Web API File} object
249
+ * - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}
250
+ * object
251
+ *
252
+ * @param params - Loading parameters.
253
+ * @param params.format - File format string. Required when loading a file as `ArrayBuffer` or `Data
254
+ * URL`.
255
+ * @param params.mode - Reserved for future use.
256
+ * @param params.requestHeader - The
257
+ * {@link https://developer.mozilla.org/docs/Glossary/Request_header | request header} used in HTTP
258
+ * request.
259
+ * @param params.withCredentials - Whether the HTTP request uses credentials such as cookies,
260
+ * authorization headers or TLS client certificates. See
261
+ * {@link https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/withCredentials | XMLHttpRequest.withCredentials}
262
+ * for more details.
263
+ */
264
+ open(file: FileSource, params?: {
265
+ format?: string;
266
+ mode?: string;
267
+ requestHeader?: HeadersInit;
268
+ withCredentials?: boolean;
269
+ }): Promise<this>;
270
+ /**
271
+ * Deprecated since `26.4`. Use {@link open | open()} instead.
272
+ *
273
+ * @deprecated
274
+ */
275
+ openVsfFile(buffer: Uint8Array | ArrayBuffer): this;
276
+ /**
277
+ * Deprecated since `26.4`. Use {@link open | open()} instead.
278
+ *
279
+ * @deprecated
229
280
  */
230
281
  openVsfxFile(buffer: Uint8Array | ArrayBuffer): this;
231
282
  cancel(): this;
package/lib/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- export { draggers } from "./Viewer/Draggers";
2
- export { commands } from "./Viewer/Commands";
3
- export { components } from "./Viewer/Components";
4
- export { loaders } from "./Viewer/Loaders";
5
- export { Viewer } from "./Viewer/Viewer";
1
+ export * from "./Viewer/Draggers";
2
+ export * from "./Viewer/Commands";
3
+ export * from "./Viewer/Components";
4
+ export * from "./Viewer/Loaders";
5
+ export * from "./Viewer/Loaders/FileLoader";
6
+ export * from "./Viewer/Viewer";
6
7
  export { OdBaseDragger } from "./Viewer/Draggers/Common/OdBaseDragger";
7
8
  export { MarkupType } from "./Viewer/Markup/MarkupFactory";
8
9
  export * from "@inweb/viewer-core";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inweb/viewer-visualize",
3
- "version": "26.7.0",
3
+ "version": "26.7.2",
4
4
  "description": "JavaScript library for rendering CAD and BIM files in a browser using VisualizeJS",
5
5
  "homepage": "https://cloud.opendesign.com/docs/index.html",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -29,10 +29,10 @@
29
29
  "docs": "typedoc"
30
30
  },
31
31
  "dependencies": {
32
- "@inweb/client": "~26.7.0",
33
- "@inweb/eventemitter2": "~26.7.0",
34
- "@inweb/markup": "~26.7.0",
35
- "@inweb/viewer-core": "~26.7.0"
32
+ "@inweb/client": "~26.7.2",
33
+ "@inweb/eventemitter2": "~26.7.2",
34
+ "@inweb/markup": "~26.7.2",
35
+ "@inweb/viewer-core": "~26.7.2"
36
36
  },
37
37
  "visualizeJS": "https://public-fhemb7e3embacwec.z02.azurefd.net/libs/visualizejs/master/Visualize.js"
38
38
  }
@@ -78,7 +78,7 @@ import { OrbitAroundBuildingDragger } from "./OrbitAroundBuildingDragger";
78
78
  * viewer.setActiveDragger("MyDragger");
79
79
  * ```
80
80
  */
81
- const draggers: IDraggersRegistry = draggersRegistry("visualizejs");
81
+ export const draggers: IDraggersRegistry = draggersRegistry("visualizejs");
82
82
 
83
83
  // build-in draggers
84
84
 
@@ -93,5 +93,3 @@ draggers.registerDragger("CuttingPlaneXAxis", (viewer) => new OdCuttingPlaneXAxi
93
93
  draggers.registerDragger("CuttingPlaneYAxis", (viewer) => new OdCuttingPlaneYAxisDragger(viewer));
94
94
  draggers.registerDragger("CuttingPlaneZAxis", (viewer) => new OdCuttingPlaneZAxisDragger(viewer));
95
95
  draggers.registerDragger("Walk", (viewer) => new OdaWalkDragger(viewer));
96
-
97
- export { draggers };
@@ -0,0 +1,108 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance").
3
+ // All rights reserved.
4
+ //
5
+ // This software and its documentation and related materials are owned by
6
+ // the Alliance. The software may only be incorporated into application
7
+ // programs owned by members of the Alliance, subject to a signed
8
+ // Membership Agreement and Supplemental Software License Agreement with the
9
+ // Alliance. The structure and organization of this software are the valuable
10
+ // trade secrets of the Alliance and its suppliers. The software is also
11
+ // protected by copyright law and international treaty provisions. Application
12
+ // programs incorporating this software must include the following statement
13
+ // with their copyright notices:
14
+ //
15
+ // This application incorporates Open Design Alliance software pursuant to a
16
+ // license agreement with Open Design Alliance.
17
+ // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.
18
+ // All rights reserved.
19
+ //
20
+ // By use of this software, its documentation or related materials, you
21
+ // acknowledge and accept the above terms.
22
+ ///////////////////////////////////////////////////////////////////////////////
23
+
24
+ export class FileLoader {
25
+ private requestHeader: HeadersInit;
26
+ private withCredentials: boolean;
27
+ private abortSignal: AbortSignal;
28
+
29
+ constructor() {
30
+ this.requestHeader = {};
31
+ this.withCredentials = false;
32
+ this.abortSignal = undefined;
33
+ }
34
+
35
+ setRequestHeader(requestHeader: HeadersInit) {
36
+ this.requestHeader = requestHeader;
37
+ }
38
+
39
+ setWithCredentials(withCredentials: boolean) {
40
+ this.withCredentials = withCredentials;
41
+ }
42
+
43
+ setAbortSignal(abortSignal: AbortSignal) {
44
+ this.abortSignal = abortSignal;
45
+ }
46
+
47
+ load(file: any, onProgress?: (event) => void): Promise<ArrayBuffer> {
48
+ if (typeof file === "string") {
49
+ const request = new Request(file, {
50
+ headers: new Headers(this.requestHeader),
51
+ credentials: this.withCredentials ? "include" : "same-origin",
52
+ signal: this.abortSignal,
53
+ });
54
+
55
+ return fetch(request)
56
+ .then((response) => {
57
+ if (!response.ok) throw new Error(`Failed to fetch "${response.url}", status ${response.status}`);
58
+
59
+ const contentLength = response.headers.get("X-File-Size") || response.headers.get("Content-Length");
60
+ const total = parseInt(contentLength || "", 10) || 0;
61
+ const lengthComputable = total > 0;
62
+
63
+ const stream = new ReadableStream({
64
+ async start(controller) {
65
+ const reader = response.body.getReader();
66
+ let loaded = 0;
67
+ try {
68
+ while (true) {
69
+ const { done, value } = await reader.read();
70
+ if (done) break;
71
+ if (onProgress) {
72
+ loaded += value.byteLength;
73
+ onProgress(new ProgressEvent("progress", { lengthComputable, loaded, total }));
74
+ }
75
+ controller.enqueue(value);
76
+ }
77
+ controller.close();
78
+ } catch (e) {
79
+ controller.error(e);
80
+ }
81
+ },
82
+ });
83
+
84
+ return new Response(stream);
85
+ })
86
+ .then((response) => response.arrayBuffer());
87
+ }
88
+
89
+ if (file instanceof globalThis.File) {
90
+ return new Promise((resolve, reject) => {
91
+ const reader = new FileReader();
92
+ reader.onload = () => resolve(reader.result as any);
93
+ reader.onerror = () => reject(reader.error);
94
+ reader.onprogress = onProgress;
95
+ reader.readAsArrayBuffer(new Blob([file]));
96
+ });
97
+ }
98
+
99
+ if (onProgress) {
100
+ const total = (file as ArrayBuffer).byteLength;
101
+ const lengthComputable = total > 0;
102
+ const loaded = total;
103
+ onProgress(new ProgressEvent("progress", { lengthComputable, loaded, total }));
104
+ }
105
+
106
+ return Promise.resolve(file);
107
+ }
108
+ }
@@ -21,10 +21,11 @@
21
21
  // acknowledge and accept the above terms.
22
22
  ///////////////////////////////////////////////////////////////////////////////
23
23
 
24
- import { Loader } from "@inweb/viewer-core";
24
+ import { Loader, LoadParams } from "@inweb/viewer-core";
25
25
  import { Viewer } from "../Viewer";
26
+ import { FileLoader } from "./FileLoader";
26
27
 
27
- export class VSFBufferLoader extends Loader {
28
+ export class VSFFileLoader extends Loader {
28
29
  public viewer: Viewer;
29
30
 
30
31
  constructor(viewer: Viewer) {
@@ -33,16 +34,32 @@ export class VSFBufferLoader extends Loader {
33
34
  }
34
35
 
35
36
  override isSupport(file: any, format?: string): boolean {
36
- return file instanceof ArrayBuffer && /vsf$/i.test(format);
37
+ return (
38
+ (typeof file === "string" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&
39
+ /vsf$/i.test(format)
40
+ );
37
41
  }
38
42
 
39
- override load(buffer: any, format?: string): Promise<this> {
40
- if (!this.viewer.visualizeJs) return Promise.resolve(this);
43
+ override async load(file: any, format?: string, params?: LoadParams): Promise<this> {
44
+ if (!this.viewer.visualizeJs) return this;
45
+
46
+ const progress = (event: ProgressEvent) => {
47
+ const { lengthComputable, loaded, total } = event;
48
+ const progress = lengthComputable ? loaded / total : 1;
49
+ this.viewer.emitEvent({ type: "geometryprogress", data: progress, file });
50
+ };
51
+
52
+ const loader = new FileLoader();
53
+ loader.setRequestHeader(params.requestHeader);
54
+ loader.setWithCredentials(params.withCredentials);
55
+ loader.setAbortSignal(this.abortController.signal);
56
+
57
+ const buffer = await loader.load(file, progress);
58
+ const data = new Uint8Array(buffer);
41
59
 
42
60
  const visLib = this.viewer.visLib();
43
61
  const visViewer = visLib.getViewer();
44
62
 
45
- const data = new Uint8Array(buffer);
46
63
  visViewer.parseFile(data);
47
64
 
48
65
  this.viewer.syncOpenCloudVisualStyle(false);
@@ -50,9 +67,8 @@ export class VSFBufferLoader extends Loader {
50
67
  this.viewer.syncOverlay();
51
68
  this.viewer.resize();
52
69
 
53
- this.viewer.emitEvent({ type: "geometryprogress", data: 1, file: buffer });
54
- this.viewer.emitEvent({ type: "databasechunk", data, file: buffer });
70
+ this.viewer.emitEvent({ type: "databasechunk", data, file });
55
71
 
56
- return Promise.resolve(this);
72
+ return this;
57
73
  }
58
74
  }
@@ -21,10 +21,11 @@
21
21
  // acknowledge and accept the above terms.
22
22
  ///////////////////////////////////////////////////////////////////////////////
23
23
 
24
- import { Loader } from "@inweb/viewer-core";
24
+ import { Loader, LoadParams } from "@inweb/viewer-core";
25
25
  import { Viewer } from "../Viewer";
26
+ import { FileLoader } from "./FileLoader";
26
27
 
27
- export class VSFXBufferLoader extends Loader {
28
+ export class VSFXFileLoader extends Loader {
28
29
  public viewer: Viewer;
29
30
 
30
31
  constructor(viewer: Viewer) {
@@ -33,16 +34,32 @@ export class VSFXBufferLoader extends Loader {
33
34
  }
34
35
 
35
36
  override isSupport(file: any, format?: string): boolean {
36
- return file instanceof ArrayBuffer && /vsfx$/i.test(format);
37
+ return (
38
+ (typeof file === "string" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&
39
+ /vsfx$/i.test(format)
40
+ );
37
41
  }
38
42
 
39
- override load(buffer: any, format?: string): Promise<this> {
40
- if (!this.viewer.visualizeJs) return Promise.resolve(this);
43
+ override async load(file: any, format?: string, params?: LoadParams): Promise<this> {
44
+ if (!this.viewer.visualizeJs) return this;
45
+
46
+ const progress = (event: ProgressEvent) => {
47
+ const { lengthComputable, loaded, total } = event;
48
+ const progress = lengthComputable ? loaded / total : 1;
49
+ this.viewer.emitEvent({ type: "geometryprogress", data: progress, file });
50
+ };
51
+
52
+ const loader = new FileLoader();
53
+ loader.setRequestHeader(params.requestHeader);
54
+ loader.setWithCredentials(params.withCredentials);
55
+ loader.setAbortSignal(this.abortController.signal);
56
+
57
+ const buffer = await loader.load(file, progress);
58
+ const data = new Uint8Array(buffer);
41
59
 
42
60
  const visLib = this.viewer.visLib();
43
61
  const visViewer = visLib.getViewer();
44
62
 
45
- const data = new Uint8Array(buffer);
46
63
  visViewer.parseVsfx(data);
47
64
 
48
65
  this.viewer.syncOpenCloudVisualStyle(false);
@@ -50,9 +67,8 @@ export class VSFXBufferLoader extends Loader {
50
67
  this.viewer.syncOverlay();
51
68
  this.viewer.resize();
52
69
 
53
- this.viewer.emitEvent({ type: "geometryprogress", data: 1, file: buffer });
54
- this.viewer.emitEvent({ type: "databasechunk", data, file: buffer });
70
+ this.viewer.emitEvent({ type: "databasechunk", data, file });
55
71
 
56
- return Promise.resolve(this);
72
+ return this;
57
73
  }
58
74
  }
@@ -23,10 +23,10 @@
23
23
 
24
24
  import { ILoadersRegistry, loadersRegistry } from "@inweb/viewer-core";
25
25
 
26
- import { VSFBufferLoader } from "./VSFBufferLoader";
26
+ import { VSFFileLoader } from "./VSFFileLoader";
27
27
  import { VSFCloudLoader } from "./VSFCloudLoader";
28
28
 
29
- import { VSFXBufferLoader } from "./VSFXBufferLoader";
29
+ import { VSFXFileLoader } from "./VSFXFileLoader";
30
30
  import { VSFXCloudLoader } from "./VSFXCloudLoader";
31
31
  import { VSFXCloudStreamingLoader } from "./VSFXCloudStreamingLoader";
32
32
  import { VSFXCloudPartialLoader } from "./VSFXCloudPartialLoader";
@@ -59,8 +59,7 @@ import { VSFXCloudPartialLoader } from "./VSFXCloudPartialLoader";
59
59
  * @example Implementing a custom loader.
60
60
  *
61
61
  * ```javascript
62
- * import { Loader } from "@inweb/viewer-core";
63
- * import { loaders, Viewer } from "@inweb/viewer-visualize";
62
+ * import { Loader, loaders, Viewer } from "@inweb/viewer-visualize";
64
63
  *
65
64
  * class MyLoader extends Loader {
66
65
  * public viewer: Viewer;
@@ -87,7 +86,7 @@ import { VSFXCloudPartialLoader } from "./VSFXCloudPartialLoader";
87
86
  * this.viewer.syncOverlay();
88
87
  * this.viewer.resize();
89
88
  *
90
- * this.viewer.emitEvent({ type: "databasechunk", data: model, file });
89
+ * this.viewer.emitEvent({ type: "databasechunk", data, file });
91
90
  *
92
91
  * return Promise.resove(this);
93
92
  * };
@@ -100,10 +99,10 @@ export const loaders: ILoadersRegistry = loadersRegistry("visualizejs");
100
99
 
101
100
  // build-in loaders
102
101
 
103
- loaders.registerLoader("vsf-buffer", (viewer: any) => new VSFBufferLoader(viewer));
102
+ loaders.registerLoader("vsf-file", (viewer: any) => new VSFFileLoader(viewer));
104
103
  loaders.registerLoader("vsf-cloud", (viewer: any) => new VSFCloudLoader(viewer));
105
104
 
106
- loaders.registerLoader("vsfx-buffer", (viewer: any) => new VSFXBufferLoader(viewer));
105
+ loaders.registerLoader("vsfx-file", (viewer: any) => new VSFXFileLoader(viewer));
107
106
  loaders.registerLoader("vsfx-cloud", (viewer: any) => new VSFXCloudLoader(viewer));
108
107
  loaders.registerLoader("vsfx-cloud-streaming", (viewer: any) => new VSFXCloudStreamingLoader(viewer));
109
108
  loaders.registerLoader("vsfx-cloud-partial", (viewer: any) => new VSFXCloudPartialLoader(viewer));
@@ -851,7 +851,77 @@ export class Viewer
851
851
  this.update();
852
852
  }
853
853
 
854
- async open(file: FileSource, params: { format?: string; mode?: string } = {}): Promise<this> {
854
+ /**
855
+ * Loads a file into the viewer.
856
+ *
857
+ * The viewer must be {@link initialize | initialized} before opening the file. Otherwise, `open()` does
858
+ * nothing.
859
+ *
860
+ * This method requires a `Client` instance to be specified to load file from the Open Cloud Server.
861
+ * The file geometry data on the Open Cloud Server must be converted into a `vsfx` format, otherwise an
862
+ * exception will be thrown.
863
+ *
864
+ * For files from Open Cloud Server, the default model will be loaded. If there is no default model,
865
+ * first availiable model will be loaded. If no models are found in the file, an exception will be
866
+ * thrown.
867
+ *
868
+ * For URLs, the file extension is used to determine the file format. For a `ArrayBuffer` and `Data
869
+ * URL`, a file format must be specified using `params.format` parameter (see below). If no appropriate
870
+ * loader is found for the specified format, an exception will be thrown.
871
+ *
872
+ * If there was an active dragger before opening the file, it will be deactivated. After opening the
873
+ * file, you must manually activate the required dragger.
874
+ *
875
+ * To open a large files, enable {@link IOptions.enablePartialMode | partial streaming} mode before
876
+ * opening. Partial streaming is only supported when opening files from an Open Cloud Server, but not
877
+ * local files and URLs. Example:
878
+ *
879
+ * ```javascript
880
+ * viewer.options.enableStreamingMode = true;
881
+ * viewer.options.enablePartialMode = true;
882
+ * await viewer.open(file);
883
+ * ```
884
+ *
885
+ * Fires:
886
+ *
887
+ * - {@link OpenEvent | open}
888
+ * - {@link GeometryStartEvent | geometrystart}
889
+ * - {@link GeometryProgressEvent | geometryprogress}
890
+ * - {@link DatabaseChunkEvent | databasechunk}
891
+ * - {@link GeometryChunkEvent | geometrychunk}
892
+ * - {@link GeometryEndEvent | geometryend}
893
+ * - {@link GeometryErrorEvent | geometryerror}
894
+ *
895
+ * @param file - File to load. Can be one of:
896
+ *
897
+ * - `File`, `Assembly` or `Model` instance from the Open Cloud Server
898
+ * - File `URL` string
899
+ * - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string
900
+ * - {@link https://developer.mozilla.org/docs/Web/API/File | Web API File} object
901
+ * - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}
902
+ * object
903
+ *
904
+ * @param params - Loading parameters.
905
+ * @param params.format - File format string. Required when loading a file as `ArrayBuffer` or `Data
906
+ * URL`.
907
+ * @param params.mode - Reserved for future use.
908
+ * @param params.requestHeader - The
909
+ * {@link https://developer.mozilla.org/docs/Glossary/Request_header | request header} used in HTTP
910
+ * request.
911
+ * @param params.withCredentials - Whether the HTTP request uses credentials such as cookies,
912
+ * authorization headers or TLS client certificates. See
913
+ * {@link https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/withCredentials | XMLHttpRequest.withCredentials}
914
+ * for more details.
915
+ */
916
+ async open(
917
+ file: FileSource,
918
+ params: {
919
+ format?: string;
920
+ mode?: string;
921
+ requestHeader?: HeadersInit;
922
+ withCredentials?: boolean;
923
+ } = {}
924
+ ): Promise<this> {
855
925
  if (!this.visualizeJs) return this;
856
926
 
857
927
  this.cancel();
@@ -895,8 +965,14 @@ export class Viewer
895
965
 
896
966
  /**
897
967
  * Deprecated since `26.4`. Use {@link open | open()} instead.
968
+ *
969
+ * @deprecated
898
970
  */
899
971
  openVsfFile(buffer: Uint8Array | ArrayBuffer): this {
972
+ console.warn(
973
+ "Viewer.openVsfFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead."
974
+ );
975
+
900
976
  if (!this.visualizeJs) return this;
901
977
 
902
978
  this.cancel();
@@ -929,26 +1005,15 @@ export class Viewer
929
1005
  }
930
1006
 
931
1007
  /**
932
- * Loads a `VSFX` file into the viewer.
933
- *
934
- * This method does not support {@link IOptions.enableStreamingMode | streaming} or
935
- * {@link IOptions.enablePartialMode | partial streaming} mode.
936
- *
937
- * If there was an active dragger before opening the file, it will be deactivated. After opening the
938
- * file, you must manually activate the required dragger.
939
- *
940
- * Fires:
941
- *
942
- * - {@link OpenEvent | open}
943
- * - {@link GeometryStartEvent | geometrystart}
944
- * - {@link GeometryProgressEvent | geometryprogress}
945
- * - {@link DatabaseChunkEvent | databasechunk}
946
- * - {@link GeometryEndEvent | geometryend}
947
- * - {@link GeometryErrorEvent | geometryerror}
1008
+ * Deprecated since `26.4`. Use {@link open | open()} instead.
948
1009
  *
949
- * @param buffer - Binary data buffer to load.
1010
+ * @deprecated
950
1011
  */
951
1012
  openVsfxFile(buffer: Uint8Array | ArrayBuffer): this {
1013
+ console.warn(
1014
+ "Viewer.openVsfxFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead."
1015
+ );
1016
+
952
1017
  if (!this.visualizeJs) return this;
953
1018
 
954
1019
  this.cancel();
package/src/index.ts CHANGED
@@ -21,11 +21,12 @@
21
21
  // acknowledge and accept the above terms.
22
22
  ///////////////////////////////////////////////////////////////////////////////
23
23
 
24
- export { draggers } from "./Viewer/Draggers";
25
- export { commands } from "./Viewer/Commands";
26
- export { components } from "./Viewer/Components";
27
- export { loaders } from "./Viewer/Loaders";
28
- export { Viewer } from "./Viewer/Viewer";
24
+ export * from "./Viewer/Draggers";
25
+ export * from "./Viewer/Commands";
26
+ export * from "./Viewer/Components";
27
+ export * from "./Viewer/Loaders";
28
+ export * from "./Viewer/Loaders/FileLoader";
29
+ export * from "./Viewer/Viewer";
29
30
 
30
31
  export { OdBaseDragger } from "./Viewer/Draggers/Common/OdBaseDragger";
31
32
  export { MarkupType } from "./Viewer/Markup/MarkupFactory";
@@ -1,8 +0,0 @@
1
- import { Loader } from "@inweb/viewer-core";
2
- import { Viewer } from "../Viewer";
3
- export declare class VSFBufferLoader extends Loader {
4
- viewer: Viewer;
5
- constructor(viewer: Viewer);
6
- isSupport(file: any, format?: string): boolean;
7
- load(buffer: any, format?: string): Promise<this>;
8
- }
@@ -1,8 +0,0 @@
1
- import { Loader } from "@inweb/viewer-core";
2
- import { Viewer } from "../Viewer";
3
- export declare class VSFXBufferLoader extends Loader {
4
- viewer: Viewer;
5
- constructor(viewer: Viewer);
6
- isSupport(file: any, format?: string): boolean;
7
- load(buffer: any, format?: string): Promise<this>;
8
- }