@acransac/vtk.js
Version:
Visualization Toolkit for the Web
101 lines (85 loc) • 3.23 kB
JavaScript
import 'vtk.js/Sources/favicon';
import vtkFullScreenRenderWindow from 'vtk.js/Sources/Rendering/Misc/FullScreenRenderWindow';
import vtkHttpSceneLoader from 'vtk.js/Sources/IO/Core/HttpSceneLoader';
import DataAccessHelper from 'vtk.js/Sources/IO/Core/DataAccessHelper';
import controlPanel from './controller.html';
// ----------------------------------------------------------------------------
// Standard rendering code setup
// ----------------------------------------------------------------------------
const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
const renderer = fullScreenRenderer.getRenderer();
const renderWindow = fullScreenRenderer.getRenderWindow();
// ----------------------------------------------------------------------------
// Example code
// ----------------------------------------------------------------------------
function initialiseSelector(steps, applyStep) {
const select = document.querySelector('#timeselect');
select.addEventListener('change', () => {
applyStep(select.selectedIndex);
});
select.innerHTML = '';
steps.forEach((time) => {
const option = document.createElement('option');
option.setAttribute('value', time);
option.innerText = `${time}`;
select.appendChild(option);
});
}
function downloadZipFile(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = (e) => {
if (xhr.readyState === 4) {
if (xhr.status === 200 || xhr.status === 0) {
resolve(xhr.response);
} else {
reject(xhr, e);
}
}
};
// Make request
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.send();
});
}
downloadZipFile(
'https://kitware.github.io/vtk-js-datasets/data/vtkjs/timesteps.vtkjs'
).then((zipContent) => {
const dataAccessHelper = DataAccessHelper.get('zip', {
zipContent,
callback() {
const sceneImporter = vtkHttpSceneLoader.newInstance({
dataAccessHelper,
renderer,
});
global.sceneImporter = sceneImporter;
sceneImporter.setUrl('index.json');
sceneImporter.onReady(() => {
const animationHandler = sceneImporter.getAnimationHandler();
global.animationHandler = animationHandler;
if (animationHandler && animationHandler.getTimeSteps().length > 1) {
const steps = animationHandler.getTimeSteps();
const applyStep = (stepIdx) => {
const step = steps[stepIdx];
if (
step >= animationHandler.getTimeRange()[0] &&
step <= animationHandler.getTimeRange()[1]
) {
animationHandler.setCurrentTimeStep(step);
renderer.resetCameraClippingRange();
renderWindow.render();
}
};
initialiseSelector(steps, applyStep);
}
renderWindow.render();
});
},
});
});
// ----------------------------------------------------------------------------
// UI control handling
// ----------------------------------------------------------------------------
fullScreenRenderer.addController(controlPanel);
global.renderWindow = renderWindow;