@cornerstonejs/core
Version:
Cornerstone3D Core
92 lines (91 loc) • 5.09 kB
JavaScript
import macro from '@kitware/vtk.js/macros.js';
import vtkOpenGLActor from '@kitware/vtk.js/Rendering/OpenGL/Actor.js';
import vtkOpenGLActor2D from '@kitware/vtk.js/Rendering/OpenGL/Actor2D.js';
import vtkOpenGLCamera from '@kitware/vtk.js/Rendering/OpenGL/Camera.js';
import vtkOpenGLGlyph3DMapper from '@kitware/vtk.js/Rendering/OpenGL/Glyph3DMapper.js';
import vtkOpenGLImageMapper from '@kitware/vtk.js/Rendering/OpenGL/ImageMapper.js';
import vtkOpenGLImageCPRMapper from '@kitware/vtk.js/Rendering/OpenGL/ImageCPRMapper.js';
import vtkOpenGLImageSlice from '@kitware/vtk.js/Rendering/OpenGL/ImageSlice.js';
import vtkOpenGLImageResliceMapper from '@kitware/vtk.js/Rendering/OpenGL/ImageResliceMapper.js';
import vtkOpenGLPixelSpaceCallbackMapper from '@kitware/vtk.js/Rendering/OpenGL/PixelSpaceCallbackMapper.js';
import vtkOpenGLPolyDataMapper from '@kitware/vtk.js/Rendering/OpenGL/PolyDataMapper.js';
import vtkOpenGLRenderer from '@kitware/vtk.js/Rendering/OpenGL/Renderer.js';
import vtkOpenGLSkybox from '@kitware/vtk.js/Rendering/OpenGL/Skybox.js';
import vtkOpenGLSphereMapper from '@kitware/vtk.js/Rendering/OpenGL/SphereMapper.js';
import vtkOpenGLStickMapper from '@kitware/vtk.js/Rendering/OpenGL/StickMapper.js';
import vtkOpenGLTexture from '@kitware/vtk.js/Rendering/OpenGL/Texture.js';
import vtkOpenGLVolume from '@kitware/vtk.js/Rendering/OpenGL/Volume.js';
import vtkOpenGLVolumeMapper from '@kitware/vtk.js/Rendering/OpenGL/VolumeMapper.js';
import vtkViewNodeFactory from '@kitware/vtk.js/Rendering/SceneGraph/ViewNodeFactory.js';
import vtkStreamingOpenGLImageResliceMapper from './vtkStreamingOpenGLImageResliceMapper.js';
import vtkStreamingOpenGLVolumeMapper from './vtkStreamingOpenGLVolumeMapper.js';
const CLASS_MAPPING = Object.create(null);
export function registerOverride(className, fn) {
CLASS_MAPPING[className] = fn;
}
function vtkStreamingOpenGLViewNodeFactory(publicAPI, model) {
model.classHierarchy.push('vtkStreamingOpenGLViewNodeFactory');
publicAPI.createNode = (dataObject) => {
if (dataObject.isDeleted()) {
return null;
}
let cpt = 0;
let className = dataObject.getClassName(cpt++);
let isObject = false;
const keys = Object.keys(model.overrides);
while (className && !isObject) {
if (keys.includes(className)) {
isObject = true;
}
else {
className = dataObject.getClassName(cpt++);
}
}
if (!isObject) {
return null;
}
const initialValues = model.getModelInitialValues(dataObject);
const vn = model.overrides[className](initialValues);
vn.setMyFactory(publicAPI);
return vn;
};
model.overrides = CLASS_MAPPING;
model.getModelInitialValues = (dataObject) => {
const initialValues = {};
const className = dataObject.getClassName();
if (className === 'vtkSharedVolumeMapper') {
initialValues.scalarTexture = dataObject.getScalarTexture();
}
if (className === 'vtkSharedImageResliceMapper') {
initialValues.scalarTexture = dataObject.getScalarTexture();
}
return initialValues;
};
}
const DEFAULT_VALUES = {};
export function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);
vtkViewNodeFactory.extend(publicAPI, model, initialValues);
vtkStreamingOpenGLViewNodeFactory(publicAPI, model);
registerOverride('vtkActor', vtkOpenGLActor.newInstance);
registerOverride('vtkActor2D', vtkOpenGLActor2D.newInstance);
registerOverride('vtkCamera', vtkOpenGLCamera.newInstance);
registerOverride('vtkGlyph3DMapper', vtkOpenGLGlyph3DMapper.newInstance);
registerOverride('vtkImageMapper', vtkOpenGLImageMapper.newInstance);
registerOverride('vtkImageCPRMapper', vtkOpenGLImageCPRMapper.newInstance);
registerOverride('vtkImageResliceMapper', vtkOpenGLImageResliceMapper.newInstance);
registerOverride('vtkImageSlice', vtkOpenGLImageSlice.newInstance);
registerOverride('vtkMapper', vtkOpenGLPolyDataMapper.newInstance);
registerOverride('vtkPixelSpaceCallbackMapper', vtkOpenGLPixelSpaceCallbackMapper.newInstance);
registerOverride('vtkRenderer', vtkOpenGLRenderer.newInstance);
registerOverride('vtkSkybox', vtkOpenGLSkybox.newInstance);
registerOverride('vtkSphereMapper', vtkOpenGLSphereMapper.newInstance);
registerOverride('vtkStickMapper', vtkOpenGLStickMapper.newInstance);
registerOverride('vtkTexture', vtkOpenGLTexture.newInstance);
registerOverride('vtkVolume', vtkOpenGLVolume.newInstance);
registerOverride('vtkVolumeMapper', vtkOpenGLVolumeMapper.newInstance);
registerOverride('vtkSharedVolumeMapper', vtkStreamingOpenGLVolumeMapper.newInstance);
registerOverride('vtkSharedImageResliceMapper', vtkStreamingOpenGLImageResliceMapper.newInstance);
}
export const newInstance = macro.newInstance(extend, 'vtkStreamingOpenGLViewNodeFactory');
export default { newInstance, extend };