UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

83 lines (67 loc) 2.82 kB
import { m as macro } from '../../macros2.js'; import vtkImageData from '../../Common/DataModel/ImageData.js'; import vtkDataArray from '../../Common/Core/DataArray.js'; const { vtkErrorMacro } = macro; // ---------------------------------------------------------------------------- // vtkImageSliceFilter methods // ---------------------------------------------------------------------------- function vtkImageSliceFilter(publicAPI, model) { // Set our className model.classHierarchy.push('vtkImageSliceFilter'); publicAPI.requestData = (inData, outData) => { // implement requestData const input = inData[0]; if (!input) { vtkErrorMacro('Invalid or missing input'); return; } const scalars = input.getPointData().getScalars(); if (!scalars) { vtkErrorMacro('No scalars from input'); return; } const datasetDefinition = input.get('extent', 'spacing', 'origin'); datasetDefinition.extent[4] = model.sliceIndex; datasetDefinition.extent[5] = datasetDefinition.extent[4]; const numberOfComponents = scalars.getNumberOfComponents(); const sliceSize = (datasetDefinition.extent[1] - datasetDefinition.extent[0] + 1) * (datasetDefinition.extent[3] - datasetDefinition.extent[2] + 1) * numberOfComponents; const offset = sliceSize * model.sliceIndex; const sliceRawArray = scalars.getData().slice(offset, offset + sliceSize); const sliceArray = vtkDataArray.newInstance({ name: scalars.getName(), numberOfComponents, values: sliceRawArray }); const output = outData[0]?.initialize() || vtkImageData.newInstance(); output.set(datasetDefinition); output.getPointData().setScalars(sliceArray); outData[0] = output; }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const DEFAULT_VALUES = { sliceIndex: 0 }; // ---------------------------------------------------------------------------- function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); // Make this a VTK object macro.obj(publicAPI, model); // Also make it an algorithm with one input and one output macro.algo(publicAPI, model, 1, 1); macro.setGet(publicAPI, model, ['sliceIndex', 'orientation']); // Object specific methods vtkImageSliceFilter(publicAPI, model); } // ---------------------------------------------------------------------------- const newInstance = macro.newInstance(extend, 'vtkImageSliceFilter'); // ---------------------------------------------------------------------------- var vtkImageSliceFilter$1 = { newInstance, extend }; export { vtkImageSliceFilter$1 as default, extend, newInstance };