Skip to content

Commit a091810

Browse files
committed
feat(createViewer): Add viewer mode observer method
1 parent 4cdf51c commit a091810

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

src/createViewer.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,66 @@ const createViewer = (
251251
}
252252

253253

254+
const xPlaneButton = document.getElementById(`${viewerDOMId}-xPlaneButton`);
255+
const yPlaneButton = document.getElementById(`${viewerDOMId}-yPlaneButton`);
256+
const zPlaneButton = document.getElementById(`${viewerDOMId}-zPlaneButton`);
257+
const volumeRenderingButton = document.getElementById(`${viewerDOMId}-volumeRenderingButton`);
258+
259+
const viewModeChangedHandlers = [];
260+
const xPlaneButtonListener = (event) => {
261+
const enabled = xPlaneButton.checked;
262+
if (enabled) {
263+
viewModeChangedHandlers.forEach((handler) => {
264+
handler.call(null, 'XPlane');
265+
})
266+
}
267+
}
268+
xPlaneButton.addEventListener('click', xPlaneButtonListener)
269+
const yPlaneButtonListener = (event) => {
270+
const enabled = yPlaneButton.checked;
271+
if (enabled) {
272+
viewModeChangedHandlers.forEach((handler) => {
273+
handler.call(null, 'YPlane');
274+
})
275+
}
276+
}
277+
yPlaneButton.addEventListener('click', yPlaneButtonListener)
278+
const zPlaneButtonListener = (event) => {
279+
const enabled = zPlaneButton.checked;
280+
if (enabled) {
281+
viewModeChangedHandlers.forEach((handler) => {
282+
handler.call(null, 'ZPlane');
283+
})
284+
}
285+
}
286+
zPlaneButton.addEventListener('click', zPlaneButtonListener)
287+
const volumeRenderingButtonListener = (event) => {
288+
const enabled = volumeRenderingButton.checked;
289+
if (enabled) {
290+
viewModeChangedHandlers.forEach((handler) => {
291+
handler.call(null, 'VolumeRendering');
292+
})
293+
}
294+
}
295+
volumeRenderingButton.addEventListener('click', volumeRenderingButtonListener)
296+
297+
publicAPI.subscribeViewModeChanged = (handler) => {
298+
const index = viewModeChangedHandlers.length;
299+
viewModeChangedHandlers.push(handler);
300+
function unsubscribe() {
301+
viewModeChangedHandlers[index] = null;
302+
}
303+
return Object.freeze({ unsubscribe });
304+
}
305+
306+
publicAPI.setInterpolationEnabled = (enabled) => {
307+
const interpolation = toggleInterpolationButton.checked;
308+
if (enabled && !interpolation || !enabled && interpolation) {
309+
toggleInterpolationButton.click();
310+
}
311+
}
312+
313+
254314
publicAPI.setViewMode = (mode) => {
255315
switch(mode) {
256316
case 'XPlane':
@@ -274,6 +334,7 @@ const createViewer = (
274334
}
275335
}
276336

337+
277338
let shadowEnabled = true;
278339
publicAPI.setShadowEnabled = (shadow) => {
279340
const toggleShadowButton = document.getElementById(`${viewerDOMId}-toggleShadowButton`);

0 commit comments

Comments
 (0)