3 JSROOT.BIT =
function(n) {
return 1 << (n); }
5 importScripts(
"three.min.js",
"ThreeCSG.js",
"JSRootGeoBase.js");
11 onmessage =
function(e) {
13 if (typeof e.data ==
'string') {
14 console.log(
'Worker get message ' + e.data);
18 if (typeof e.data !=
'object')
return;
20 e.data.tm1 =
new Date().getTime();
25 var nodes = e.data.clones;
28 clones =
new JSROOT.GEO.ClonedNodes(null, nodes);
29 clones.SetVisLevel(e.data.vislevel);
30 clones.SetMaxVisNodes(e.data.maxvisnodes);
32 clones.sortmap = e.data.sortmap;
36 JSROOT.browser = e.data.browser;
38 e.data.tm2 =
new Date().getTime();
40 return postMessage(e.data);
46 var shapes = e.data.shapes, transferables = [];
49 for (var n=0;n<100;++n) {
50 var res = clones.BuildShapes(shapes, e.data.limit, 1000);
52 postMessage({ progress:
"Worker creating: " + res.shapes +
" / " + shapes.length +
" shapes, " + res.faces +
" faces" });
55 for (var n=0;n<shapes.length;++n) {
60 if (item.geom instanceof THREE.BufferGeometry) {
63 var bufgeom =
new THREE.BufferGeometry();
64 bufgeom.fromGeometry(item.geom);
67 item.buf_pos = bufgeom.attributes.position.array;
68 item.buf_norm = bufgeom.attributes.normal.array;
73 transferables.push(item.buf_pos.buffer, item.buf_norm.buffer);
81 e.data.tm2 =
new Date().getTime();
83 return postMessage(e.data, transferables);
86 if (e.data.collect !== undefined) {
90 clones.SetVisibleFlags(e.data.flags);
93 clones.ProduceIdShits();
97 matrix =
new THREE.Matrix4().fromArray(e.data.matrix);
100 var res = clones.CollectVisibles(e.data.collect, JSROOT.GEO.CreateFrustum(matrix));
102 e.data.new_nodes = res.lst;
103 e.data.complete = res.complete;
105 e.data.tm2 =
new Date().getTime();
109 return postMessage(e.data);