UNPKG

@acransac/vtk.js

Version:

Visualization Toolkit for the Web

124 lines (98 loc) 3.42 kB
import macro from 'vtk.js/Sources/macro'; function notImplemented(method) { return () => macro.vtkErrorMacro(`vtkProp::${method} - NOT IMPLEMENTED`); } // ---------------------------------------------------------------------------- // vtkProp methods // ---------------------------------------------------------------------------- function vtkProp(publicAPI, model) { // Set our className model.classHierarchy.push('vtkProp'); publicAPI.getMTime = () => { let m1 = model.mtime; for (let index = 0; index < model.textures.length; ++index) { const m2 = model.textures[index].getMTime(); if (m2 > m1) { m1 = m2; } } return m1; }; publicAPI.getNestedProps = () => null; publicAPI.getActors = () => []; publicAPI.getActors2D = () => []; publicAPI.getVolumes = () => []; publicAPI.pick = notImplemented('pick'); publicAPI.hasKey = notImplemented('hasKey'); publicAPI.getRedrawMTime = () => model.mtime; publicAPI.setEstimatedRenderTime = (t) => { model.estimatedRenderTime = t; model.savedEstimatedRenderTime = t; }; publicAPI.restoreEstimatedRenderTime = () => { model.estimatedRenderTime = model.savedEstimatedRenderTime; }; publicAPI.addEstimatedRenderTime = (t) => { model.estimatedRenderTime += t; }; publicAPI.setAllocatedRenderTime = (t) => { model.allocatedRenderTime = t; model.savedEstimatedRenderTime = model.estimatedRenderTime; model.estimatedRenderTime = 0; }; publicAPI.getSupportsSelection = () => false; publicAPI.getTextures = () => model.textures; publicAPI.hasTexture = (texture) => model.textures.indexOf(texture) !== -1; publicAPI.addTexture = (texture) => { if (texture && !publicAPI.hasTexture(texture)) { model.textures = model.textures.concat(texture); publicAPI.modified(); } }; publicAPI.removeTexture = (texture) => { const newTextureList = model.textures.filter((item) => item !== texture); if (model.textures.length !== newTextureList.length) { model.textures = newTextureList; publicAPI.modified(); } }; publicAPI.removeAllTextures = () => { model.textures = []; publicAPI.modified(); }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const DEFAULT_VALUES = { visibility: true, pickable: true, dragable: true, useBounds: true, allocatedRenderTime: 10, estimatedRenderTime: 0, savedEstimatedRenderTime: 0, renderTimeMultiplier: 1, paths: null, textures: [], }; // ---------------------------------------------------------------------------- export function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API macro.obj(publicAPI, model); macro.get(publicAPI, model, ['estimatedRenderTime', 'allocatedRenderTime']); macro.setGet(publicAPI, model, [ 'visibility', 'pickable', 'dragable', 'useBounds', 'renderTimeMultiplier', ]); // Object methods vtkProp(publicAPI, model); } // ---------------------------------------------------------------------------- export const newInstance = macro.newInstance(extend, 'vtkProp'); // ---------------------------------------------------------------------------- export default { newInstance, extend };