-
Notifications
You must be signed in to change notification settings - Fork 191
/
SurfaceWorker.js
38 lines (33 loc) · 1.68 KB
/
SurfaceWorker.js
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
//Hackish way to create webworker (independent of $3Dmol namespace) within minified file
$3Dmol.workerString = function(){
self.onmessage = function(oEvent) {
var obj = oEvent.data;
var type = obj.type;
if (type < 0) // sending atom data, initialize
{
self.atomData = obj.atoms;
self.volume = obj.volume;
self.ps = new ProteinSurface(); // jshint ignore:line
} else {
var ps = self.ps;
ps.initparm(obj.expandedExtent, (type == 1) ? false : true, self.volume);
ps.fillvoxels(self.atomData, obj.extendedAtoms);
ps.buildboundary();
if (type === 4 || type === 2) {
ps.fastdistancemap();
ps.boundingatom(false);
ps.fillvoxelswaals(self.atomData, obj.extendedAtoms);
}
ps.marchingcube(type);
var VandF = ps.getFacesAndVertices(obj.atomsToShow);
self.postMessage(VandF);
}
};
}.toString().replace(/(^.*?\{|\}$)/g, "");
// NOTE: variable replacement is simplified
// (See: http://stackoverflow.com/questions/1661197/what-characters-are-valid-for-javascript-variable-names)
$3Dmol.workerString += "; var ProteinSurface=" + $3Dmol.ProteinSurface.toString().replace(/[a-zA-Z_$]{1}[0-9a-zA-Z_$]*.MarchingCube./g, "MarchingCube.");
$3Dmol.workerString += ",MarchingCube=("+$3Dmol.MarchingCubeInitializer.toString() +")();";
$3Dmol.SurfaceWorker = window.URL ? window.URL.createObjectURL(new Blob([$3Dmol.workerString],{type: 'text/javascript'})) : {postMessage:function(){}};
$3Dmol.workerString = $3Dmol.workerString;
$3Dmol.SurfaceWorker = $3Dmol.SurfaceWorker;