-
Notifications
You must be signed in to change notification settings - Fork 1
/
ThreeBCF.ts
81 lines (71 loc) · 2.24 KB
/
ThreeBCF.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import * as THREE from 'three';
import { WorkerEventOnMessageParams, WorkerEventPostMessageData, EXTENSION } from './types';
import saveAs from 'file-saver';
import { VERSION } from './version';
/**
* The parameters for the ThreeBCF class.
*/
export type ThreeBCFParams = {
/**
* The URL of the worker script.
*
* ```ts
* new Worker(workerURL)
* ```
*/
workerURL?: string;
/**
* The worker instance.
*/
worker?: new () => Worker;
};
/**
* Manager for converting three.js data to BCF data.
*
* The topics should be created and stored in three.js space first.
* This class helps with the conversion to a BCF file format
*/
class ThreeBCF extends THREE.EventDispatcher {
/**
* The worker instance.
*/
private worker: Worker;
/**
* The version of the library.
*/
public version: string = VERSION;
constructor({ workerURL, worker: _Worker }: ThreeBCFParams) {
super();
if (workerURL === undefined && _Worker === undefined)
throw new Error('Either workerURL or worker must be provided');
this.worker = _Worker ? new _Worker() : new Worker(workerURL!);
this.worker.onmessage = (event: { data: WorkerEventOnMessageParams }) => {
switch (event.data.type) {
case 'test':
console.log("THREE.BCF: Got message from worker thread. Everything's fine!");
break;
case 'begin':
console.log('Got message from worker thread. Saving ZIP');
saveAs(event.data.data, `presentation.${EXTENSION}`);
break;
}
};
this.testWorker();
}
/**
* Test the worker thread.
*/
private testWorker(): void {
console.log("THREE.BCF: Sending 'test' message to worker thread");
this.worker.postMessage({ type: 'test' });
}
/**
* From the current state, create a BCF file.
* This will be done in a Web Worker and the resulting file will be downloaded.
* @param params {@link WorkerEventPostMessageData}
*/
public createBCF(params: WorkerEventPostMessageData): void {
this.worker.postMessage(params);
}
}
export default ThreeBCF;