import macro from 'vtk.js/Sources/macros';
const { vtkErrorMacro } = macro;
function vtkImageDataToCornerstoneImage(publicAPI, model) { model.classHierarchy.push('vtkImageDataToCornerstoneImage');
publicAPI.requestData = (inData, outData) => { const input = inData[0];
if (!input) { vtkErrorMacro('Invalid or missing input'); return; }
const spacing = input.getSpacing(); const dims = input.getDimensions(); const scalars = input.getPointData().getScalars(); const dataRange = scalars.getRange(0); const rawData = scalars.getData();
let pixelData = null; if (dims[2] === 1) { pixelData = !scalars.data ? rawData : scalars.data; } else { const offset = model.sliceIndex * dims[0] * dims[1] * rawData.BYTES_PER_ELEMENT; pixelData = macro.newTypedArray( scalars.getDataType(), rawData.buffer, offset, dims[0] * dims[1] ); }
const cornerstoneImage = { imageId: model.imageId, color: scalars.getNumberOfComponents() > 1,
columnPixelSpacing: spacing[0], columns: dims[0], width: dims[0],
rowPixelSpacing: spacing[1], rows: dims[1], height: dims[1],
intercept: 0, invert: false, minPixelValue: dataRange[0], maxPixelValue: dataRange[1],
sizeInBytes: pixelData.length * pixelData.BYTES_PER_ELEMENT, slope: 1,
windowCenter: Math.round((dataRange[0] + dataRange[1]) / 2), windowWidth: dataRange[1] - dataRange[0], decodeTimeInMS: 0,
getPixelData() { return pixelData; }, };
outData[0] = cornerstoneImage; }; }
const DEFAULT_VALUES = { imageId: 'default-image-id', sliceIndex: 0, };
export function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues);
macro.obj(publicAPI, model);
macro.algo(publicAPI, model, 1, 1);
macro.setGet(publicAPI, model, ['imageId', 'sliceIndex']);
macro.algo(publicAPI, model, 1, 1); vtkImageDataToCornerstoneImage(publicAPI, model); }
export const newInstance = macro.newInstance( extend, 'vtkImageDataToCornerstoneImage' );
export default { newInstance, extend };
|