UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

173 lines (152 loc) 5.74 kB
import { m as macro } from '../../macros2.js'; import Constants from './ImageProperty/Constants.js'; const { InterpolationType } = Constants; const { vtkErrorMacro } = macro; const VTK_MAX_VRCOMP = 4; // ---------------------------------------------------------------------------- // vtkImageProperty methods // ---------------------------------------------------------------------------- function vtkImageProperty(publicAPI, model) { // Set our className model.classHierarchy.push('vtkImageProperty'); publicAPI.getMTime = () => { let mTime = model.mtime; let time; for (let index = 0; index < VTK_MAX_VRCOMP; index++) { // Color MTimes if (model.componentData[index].rGBTransferFunction) { // time that RGB transfer function was last modified time = model.componentData[index].rGBTransferFunction.getMTime(); mTime = mTime > time ? mTime : time; } // Piecewise function MTimes if (model.componentData[index].piecewiseFunction) { // time that weighting function was last modified time = model.componentData[index].piecewiseFunction.getMTime(); mTime = mTime > time ? mTime : time; } } return mTime; }; // Set the color of a volume to an RGB transfer function publicAPI.setRGBTransferFunction = (index = 0, func = null) => { // backwards compatible call without the component index let idx = index; let transferFunc = func; if (!Number.isInteger(index)) { transferFunc = index; idx = 0; } if (model.componentData[idx].rGBTransferFunction !== transferFunc) { model.componentData[idx].rGBTransferFunction = transferFunc; publicAPI.modified(); return true; } return false; }; // Get the currently set RGB transfer function. publicAPI.getRGBTransferFunction = (idx = 0) => model.componentData[idx].rGBTransferFunction; // Set the piecewise function publicAPI.setPiecewiseFunction = (index = 0, func = null) => { let idx = index; let transferFunc = func; if (!Number.isInteger(index)) { transferFunc = index; idx = 0; } if (model.componentData[idx].piecewiseFunction !== transferFunc) { model.componentData[idx].piecewiseFunction = transferFunc; publicAPI.modified(); return true; } return false; }; // Get the component weighting function. publicAPI.getPiecewiseFunction = (idx = 0) => model.componentData[idx].piecewiseFunction; // Alias to set the piecewise function publicAPI.setScalarOpacity = (index = 0, func = null) => { // backwards compatible call without the component index let idx = index; let transferFunc = func; if (!Number.isInteger(index)) { transferFunc = index; idx = 0; } return publicAPI.setPiecewiseFunction(idx, transferFunc); }; // Alias to get the piecewise function (backwards compatibility) publicAPI.getScalarOpacity = (idx = 0) => publicAPI.getPiecewiseFunction(idx); publicAPI.setComponentWeight = (index = 0, value = 1) => { if (index < 0 || index >= VTK_MAX_VRCOMP) { vtkErrorMacro('Invalid index'); return false; } const val = Math.min(1, Math.max(0, value)); if (model.componentData[index].componentWeight !== val) { model.componentData[index].componentWeight = val; publicAPI.modified(); return true; } return false; }; publicAPI.getComponentWeight = (index = 0) => { if (index < 0 || index >= VTK_MAX_VRCOMP) { vtkErrorMacro('Invalid index'); return 0.0; } return model.componentData[index].componentWeight; }; publicAPI.setInterpolationTypeToNearest = () => publicAPI.setInterpolationType(InterpolationType.NEAREST); publicAPI.setInterpolationTypeToLinear = () => publicAPI.setInterpolationType(InterpolationType.LINEAR); publicAPI.getInterpolationTypeAsString = () => macro.enumToString(InterpolationType, model.interpolationType); } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const defaultValues = initialValues => ({ independentComponents: false, interpolationType: InterpolationType.LINEAR, colorWindow: 255, colorLevel: 127.5, ambient: 1.0, diffuse: 0.0, opacity: 1.0, useLookupTableScalarRange: false, useLabelOutline: false, labelOutlineThickness: [1], labelOutlineOpacity: 1.0, updatedExtents: [], ...initialValues }); // ---------------------------------------------------------------------------- function extend(publicAPI, model, initialValues = {}) { Object.assign(model, defaultValues(initialValues)); // Build VTK API macro.obj(publicAPI, model); if (!model.componentData) { model.componentData = []; for (let i = 0; i < VTK_MAX_VRCOMP; i++) { model.componentData.push({ rGBTransferFunction: null, piecewiseFunction: null, componentWeight: 1.0 }); } } macro.setGet(publicAPI, model, ['independentComponents', 'interpolationType', 'colorWindow', 'colorLevel', 'ambient', 'diffuse', 'opacity', 'useLookupTableScalarRange', 'useLabelOutline', 'labelOutlineOpacity', 'updatedExtents']); macro.setGetArray(publicAPI, model, ['labelOutlineThickness']); // Object methods vtkImageProperty(publicAPI, model); } // ---------------------------------------------------------------------------- const newInstance = macro.newInstance(extend, 'vtkImageProperty'); // ---------------------------------------------------------------------------- var vtkImageProperty$1 = { newInstance, extend }; export { vtkImageProperty$1 as default, extend, newInstance };