@kitware/vtk.js
Version:
Visualization Toolkit for the Web
132 lines (121 loc) • 4.15 kB
JavaScript
import { m as macro } from '../../macros2.js';
// ----------------------------------------------------------------------------
// vtkTimeStepBasedAnimationHandler methods
// ----------------------------------------------------------------------------
function vtkTimeStepBasedAnimationHandler(publicAPI, model) {
publicAPI.setCurrentTimeStep = time => {
if (!model.timeSteps || model.timeSteps.length === 0) {
return;
}
if (model.timeSteps.includes(time)) {
model.currentTimeStep = time;
} else if (time <= model.timeSteps[0]) {
model.currentTimeStep = model.timeSteps[0];
} else {
model.currentTimeStep = model.timeSteps.find((prevTime, index, array) => {
if (index === array.length - 1) {
return true;
}
return time >= prevTime && time < array[index + 1];
});
}
publicAPI.update();
};
publicAPI.setData = data => {
model.data = data;
// Refresh timesteps
if (data.timeSteps) {
model.timeSteps = data.timeSteps.map(timeStep => timeStep.time);
model.timeRange = [model.timeSteps[0], model.timeSteps[model.timeSteps.length - 1]];
model.currentTimeStep = model.timeSteps[0];
}
};
publicAPI.setScene = (scene, originalMetadata, applySettings, renderer) => {
model.scene = scene;
model.originalMetadata = originalMetadata;
model.applySettings = applySettings;
model.renderer = renderer;
};
publicAPI.setCameraParameters = params => {
if (model.renderers) {
model.renderers.forEach(renderer => {
const camera = renderer.getActiveCamera();
if (camera) {
camera.set(params);
}
});
}
};
publicAPI.setBackground = color => {
if (model.renderers) {
model.renderers.forEach(renderer => {
renderer.setBackground(color);
});
}
};
publicAPI.update = () => {
if (!model.data || !model.scene) {
return;
}
const currentScene = model.data.timeSteps.find(scene => scene.time === model.currentTimeStep);
if (currentScene.camera) {
const camera = {
...model.originalMetadata.camera
};
Object.assign(camera, currentScene.camera);
publicAPI.setCameraParameters(camera);
}
if (currentScene.background) {
publicAPI.setBackground(currentScene.background);
}
if (model.scene) {
model.scene.forEach(sceneItem => {
if (sceneItem.source.setUpdateTimeStep && sceneItem.source.getTimeSteps().includes(model.currentTimeStep)) {
sceneItem.source.setUpdateTimeStep(model.currentTimeStep);
}
const id = sceneItem.id;
if (currentScene[id]) {
const settings = {
...sceneItem.defaultSettings
};
Object.assign(settings, currentScene[id]);
model.applySettings(sceneItem, settings);
}
});
}
};
publicAPI.addRenderer = renderer => {
if (renderer && !model.renderers.includes(renderer)) {
model.renderers.push(renderer);
}
};
}
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
const DEFAULT_VALUES = {
timeSteps: [0.0],
timeRange: [0.0, 0.0],
currentTimeStep: 0.0,
scene: null,
data: null,
renderers: [],
applySettings: null,
originalMetadata: null
};
function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);
// Build VTK API
macro.obj(publicAPI, model);
macro.get(publicAPI, model, ['applySettings', 'currentTimeStep', 'data', 'originalMetada', 'scene', 'timeRange', 'timeSteps']);
macro.setGet(publicAPI, model, ['renderers']);
// Object methods
vtkTimeStepBasedAnimationHandler(publicAPI, model);
}
const newInstance = macro.newInstance(extend, 'vtkTimeStepBasedAnimationHandler');
// ----------------------------------------------------------------------------
var vtkTimeStepBasedAnimationHandler$1 = {
newInstance,
extend
};
export { vtkTimeStepBasedAnimationHandler$1 as default, extend, newInstance };