forked from Kitware/itk-vtk-viewer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
98 lines (86 loc) · 2.79 KB
/
index.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
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import '@babel/polyfill';
import vtkURLExtract from 'vtk.js/Sources/Common/Core/URLExtract';
import fetchBinaryContent from './fetchBinaryContent';
import processFiles from './processFiles';
import userInterface from './userInterface';
import createFileDragAndDrop from './userInterface/createFileDragAndDrop';
import style from './userInterface/ItkVtkViewer.module.css';
let doNotInitViewers = false;
export function createViewerFromLocalFiles(container) {
doNotInitViewers = true;
createFileDragAndDrop(container, processFiles);
}
export function createViewerFromUrl(el, url, use2D = false) {
userInterface.emptyContainer(el);
const progressCallback = userInterface.createLoadingProgress(el);
return fetchBinaryContent(url, progressCallback).then((arrayBuffer) => {
const file = new File(
[new Blob([arrayBuffer])],
url.split('/').slice(-1)[0]
);
return processFiles(el, { files: [file], use2D });
});
}
export function initializeEmbeddedViewers() {
if (doNotInitViewers) {
return;
}
const viewers = document.querySelectorAll('.itk-vtk-viewer');
let count = viewers.length;
while (count--) {
const el = viewers[count];
if (!el.dataset.loaded) {
el.dataset.loaded = true;
// Apply size to conatiner
const [width, height] = (el.dataset.viewport || '500x500').split('x');
el.style.position = 'relative';
el.style.width = Number.isFinite(Number(width)) ? `${width}px` : width;
el.style.height = Number.isFinite(Number(height))
? `${height}px`
: height;
createViewerFromUrl(el, el.dataset.url, !!el.dataset.slice).then(
(viewer) => {
// Background color handling
if (el.dataset.backgroundColor && viewer.renderWindow) {
const color = el.dataset.backgroundColor;
const bgColor = [
color.slice(0, 2),
color.slice(2, 4),
color.slice(4, 6),
].map((v) => parseInt(v, 16) / 255);
viewer.renderer.setBackground(bgColor);
}
// Render
if (viewer.renderWindow && viewer.renderWindow.render) {
viewer.renderWindow.render();
}
}
);
}
}
}
export function processParameters(
container,
addOnParameters = {},
keyName = 'fileToLoad'
) {
const userParams = Object.assign(
{},
vtkURLExtract.extractURLParameters(),
addOnParameters
);
const myContainer = userInterface.getRootContainer(container);
if (userParams.fullscreen) {
myContainer.classList.add(style.fullscreenContainer);
}
if (userParams[keyName]) {
return createViewerFromUrl(
myContainer,
userParams[keyName],
!!userParams.use2D
);
}
return null;
}
// Ensure processing of embedded viewers
setTimeout(initializeEmbeddedViewers, 100);