UNPKG

@thewtex/vtk.js-esm

Version:

Visualization Toolkit for the Web

121 lines (97 loc) 4.5 kB
import macro from '../../macro.js'; import vtkActor from '../../Rendering/Core/Actor.js'; import vtkHandleRepresentation from './HandleRepresentation.js'; import vtkMapper from '../../Rendering/Core/Mapper.js'; import vtkPolyData from '../../Common/DataModel/PolyData.js'; import { a as subtract, d as dot } from '../../vendor/gl-matrix/esm/vec3.js'; // vtkRectangleContextRepresentation methods // ---------------------------------------------------------------------------- function vtkRectangleContextRepresentation(publicAPI, model) { // Set our className model.classHierarchy.push('vtkRectangleContextRepresentation'); // -------------------------------------------------------------------------- // Generic rendering pipeline // -------------------------------------------------------------------------- model.mapper = vtkMapper.newInstance(); model.actor = vtkActor.newInstance(); model.mapper.setInputConnection(publicAPI.getOutputPort()); model.actor.setMapper(model.mapper); model.actor.getProperty().setOpacity(0.2); model.actor.getProperty().setColor(0, 1, 0); publicAPI.addActor(model.actor); // -------------------------------------------------------------------------- publicAPI.setDrawBorder = function (draw) { model.drawBorder = draw; }; // -------------------------------------------------------------------------- publicAPI.setDrawFace = function (draw) { model.drawFace = draw; }; // -------------------------------------------------------------------------- publicAPI.setOpacity = function (opacity) { model.actor.getProperty().setOpacity(opacity); }; // -------------------------------------------------------------------------- publicAPI.requestData = function (inData, outData) { if (model.deleted) { return; } var list = publicAPI.getRepresentationStates(inData[0]); var state = list[0]; var dataset = vtkPolyData.newInstance(); if (state.getVisible()) { var point1 = state.getOrigin(); var point2 = state.getCorner(); var diagonal = [0, 0, 0]; subtract(diagonal, point2, point1); var up = state.getUp(); var upComponent = dot(diagonal, up); var points = new Float32Array(4 * 3); points[0] = point1[0]; points[1] = point1[1]; points[2] = point1[2]; points[3] = point1[0] + upComponent * up[0]; points[4] = point1[1] + upComponent * up[1]; points[5] = point1[2] + upComponent * up[2]; points[6] = point2[0]; points[7] = point2[1]; points[8] = point2[2]; points[9] = point2[0] - upComponent * up[0]; points[10] = point2[1] - upComponent * up[1]; points[11] = point2[2] - upComponent * up[2]; dataset.getPoints().setData(points, 3); if (model.drawFace) { var polys = new Uint32Array([4, 0, 1, 2, 3]); dataset.getPolys().setData(polys, 1); } if (model.drawBorder) { var line = new Uint32Array([5, 0, 1, 2, 3, 0]); dataset.getLines().setData(line, 1); } } else { dataset.getPoints().setData([], 0); dataset.getPolys().setData([], 0); dataset.getLines().setData([], 0); } outData[0] = dataset; }; publicAPI.getSelectedState = function (prop, compositeID) { return model.state; }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- var DEFAULT_VALUES = { drawBorder: false, drawFace: true }; // ---------------------------------------------------------------------------- function extend(publicAPI, model) { var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; Object.assign(model, DEFAULT_VALUES, initialValues); vtkHandleRepresentation.extend(publicAPI, model, initialValues); macro.setGetArray(publicAPI, model, ['color'], 1); macro.get(publicAPI, model, ['mapper', 'actor']); // Object specific methods vtkRectangleContextRepresentation(publicAPI, model); } // ---------------------------------------------------------------------------- var newInstance = macro.newInstance(extend, 'vtkRectangleContextRepresentation'); // ---------------------------------------------------------------------------- var vtkRectangleContextRepresentation$1 = { newInstance: newInstance, extend: extend }; export default vtkRectangleContextRepresentation$1; export { extend, newInstance };