@xeokit/xeokit-sdk 2.6.95 → 2.6.97

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": "@xeokit/xeokit-sdk",
3
- "version": "2.6.95",
3
+ "version": "2.6.97",
4
4
  "description": "3D BIM IFC Viewer SDK for AEC engineering applications. Open Source JavaScript Toolkit based on pure WebGL for top performance, real-world coordinates and full double precision",
5
5
  "module": "./dist/xeokit-sdk.es.js",
6
6
  "main": "./dist/xeokit-sdk.cjs.js",
@@ -0,0 +1,74 @@
1
+
2
+ /**
3
+ * Default data access strategy for {@link IFCOpenShellLoaderPlugin}.
4
+ *
5
+ * This just loads assets using XMLHttpRequest.
6
+ */
7
+ export class IFCOpenShellDefaultDataSource {
8
+
9
+ constructor(cfg = {}) {
10
+ this.cacheBuster = (cfg.cacheBuster !== false);
11
+ }
12
+
13
+ _cacheBusterURL(url) {
14
+ if (!this.cacheBuster) {
15
+ return url;
16
+ }
17
+ const timestamp = new Date().getTime();
18
+ if (url.indexOf('?') > -1) {
19
+ return url + '&_=' + timestamp;
20
+ } else {
21
+ return url + '?_=' + timestamp;
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Gets the contents of the given IFC file in an arraybuffer.
27
+ *
28
+ * @param {String|Number} src Path or ID of an IFC file.
29
+ * @param {Function} ok Callback fired on success, argument is the IFC file in an arraybuffer.
30
+ * @param {Function} error Callback fired on error.
31
+ */
32
+ getIFC(src, ok, error) {
33
+ src = this._cacheBusterURL(src);
34
+
35
+ var defaultCallback = () => {
36
+ };
37
+ ok = ok || defaultCallback;
38
+ error = error || defaultCallback;
39
+ const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
40
+ const dataUriRegexResult = src.match(dataUriRegex);
41
+ if (dataUriRegexResult) { // Safari can't handle data URIs through XMLHttpRequest
42
+ const isBase64 = !!dataUriRegexResult[2];
43
+ var data = dataUriRegexResult[3];
44
+ data = window.decodeURIComponent(data);
45
+ if (isBase64) {
46
+ data = window.atob(data);
47
+ }
48
+ try {
49
+ const buffer = new ArrayBuffer(data.length);
50
+ const view = new Uint8Array(buffer);
51
+ for (var i = 0; i < data.length; i++) {
52
+ view[i] = data.charCodeAt(i);
53
+ }
54
+ ok(buffer);
55
+ } catch (errMsg) {
56
+ error(errMsg);
57
+ }
58
+ } else {
59
+ const request = new XMLHttpRequest();
60
+ request.open('GET', src, true);
61
+ request.responseType = 'text';
62
+ request.onreadystatechange = function () {
63
+ if (request.readyState === 4) {
64
+ if (request.status === 200) {
65
+ ok(request.response);
66
+ } else {
67
+ error('getIFC error : ' + request.response);
68
+ }
69
+ }
70
+ };
71
+ request.send(null);
72
+ }
73
+ }
74
+ }