UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

135 lines (110 loc) 4.25 kB
import { m as macro } from '../../macros2.js'; // ---------------------------------------------------------------------------- // vtkSourceProxy methods // ---------------------------------------------------------------------------- function vtkSourceProxy(publicAPI, model) { // Set our className model.classHierarchy.push('vtkSourceProxy'); // API ---------------------------------------------------------------------- publicAPI.setInputProxy = source => { if (model.inputSubscription) { model.inputSubscription(); model.inputSubscription = null; } model.inputProxy = source; if (model.inputProxy) { model.inputSubscription = source.onModified(publicAPI.update, -1).unsubscribe; // Trigger at next cycle } publicAPI.update(); }; // -------------------------------------------------------------------------- publicAPI.setInputData = (ds, type) => { if (model.dataset !== ds) { model.dataset = ds; model.type = type || ds.getClassName(); publicAPI.modified(); publicAPI.invokeDatasetChange(); } }; // -------------------------------------------------------------------------- publicAPI.setInputAlgorithm = (algo, type, autoUpdate = true) => { model.type = type; if (model.algo !== algo) { model.algo = algo; if (model.algoSubscription) { model.algoSubscription(); model.algoSubscription = null; } if (algo && autoUpdate) { model.algoSubscription = algo.onModified(() => { publicAPI.update(); }, -1).unsubscribe; // Trigger at next cycle publicAPI.update(); } } }; // -------------------------------------------------------------------------- publicAPI.update = () => { if (model.algo && model.inputProxy) { model.algo.setInputData(model.inputProxy.getDataset()); } if (model.updateDomain && model.inputProxy) { model.updateDomain(publicAPI, model.inputProxy.getDataset()); } if (model.algo) { publicAPI.setInputData(model.algo.getOutputData(), model.type); } }; publicAPI.getUpdate = () => model.algo.getMTime() > model.dataset.getMTime(); // -------------------------------------------------------------------------- publicAPI.delete = macro.chain(() => { if (model.algoSubscription) { model.algoSubscription(); model.algoSubscription = null; } if (model.inputSubscription) { model.inputSubscription(); model.inputSubscription = null; } }, publicAPI.delete); // -------------------------------------------------------------------------- // Initialisation // -------------------------------------------------------------------------- if (model.inputProxy) { model.inputSubscription = model.inputProxy.onModified(() => { publicAPI.update(); }, -1).unsubscribe; // Trigger at next cycle } if (model.algoFactory) { publicAPI.setInputAlgorithm(model.algoFactory.newInstance(), null, model.autoUpdate); } publicAPI.update(); } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const DEFAULT_VALUES = { name: 'Default source' }; // ---------------------------------------------------------------------------- function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); macro.obj(publicAPI, model); macro.get(publicAPI, model, ['name', 'type', 'dataset', 'algo', 'inputProxy']); macro.set(publicAPI, model, ['name']); macro.event(publicAPI, model, 'DatasetChange'); macro.proxy(publicAPI, model); // Object specific methods vtkSourceProxy(publicAPI, model); if (model.proxyPropertyMapping) { macro.proxyPropertyMapping(publicAPI, model, model.proxyPropertyMapping); } } // ---------------------------------------------------------------------------- const newInstance = macro.newInstance(extend, 'vtkSourceProxy'); // ---------------------------------------------------------------------------- var vtkSourceProxy$1 = { newInstance, extend }; export { vtkSourceProxy$1 as default, extend, newInstance };