Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import macro from 'vtk.js/Sources/macros'; import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor'; import vtkContextRepresentation from 'vtk.js/Sources/Widgets/Representations/ContextRepresentation'; import vtkMapper from 'vtk.js/Sources/Rendering/Core/Mapper'; import vtkPolyData from 'vtk.js/Sources/Common/DataModel/PolyData'; import vtkBoundingBox from 'vtk.js/Sources/Common/DataModel/BoundingBox'; import { BOUNDS_MAP, LINE_ARRAY, } from 'vtk.js/Sources/Filters/General/OutlineFilter'; // ---------------------------------------------------------------------------- // vtkOutlineContextRepresentation methods // ---------------------------------------------------------------------------- // Represents a box outline given 8 points as corners. // Does not work with an arbitrary set of points. An oriented bounding box // algorithm may be implemented in the future. function vtkOutlineContextRepresentation(publicAPI, model) { // Set our className model.classHierarchy.push('vtkOutlineContextRepresentation'); // internal bounding box model.bbox = [...vtkBoundingBox.INIT_BOUNDS]; // -------------------------------------------------------------------------- // Internal polydata dataset // -------------------------------------------------------------------------- model.internalPolyData = vtkPolyData.newInstance({ mtime: 0 }); model.points = new Float32Array(8 * 3); model.internalPolyData.getPoints().setData(model.points, 3); model.internalPolyData.getLines().setData(Uint16Array.from(LINE_ARRAY)); // -------------------------------------------------------------------------- // Generic rendering pipeline // -------------------------------------------------------------------------- model.mapper = vtkMapper.newInstance({ scalarVisibility: false, }); model.actor = vtkActor.newInstance({ parentProp: publicAPI }); model.actor.getProperty().setEdgeColor(...model.edgeColor); model.mapper.setInputConnection(publicAPI.getOutputPort()); model.actor.setMapper(model.mapper); publicAPI.addActor(model.actor); // -------------------------------------------------------------------------- publicAPI.requestData = (inData, outData) => { const list = publicAPI .getRepresentationStates(inData[0]) .filter((state) => state.getOrigin && state.getOrigin()); vtkBoundingBox.reset(model.bbox); for (let i = 0; i < list.length; i++) { const pt = list[i].getOrigin(); if (pt) { vtkBoundingBox.addPoint(model.bbox, ...pt); } } // BOUNDS_MAP.length should equal model.points.length for (let i = 0; i < BOUNDS_MAP.length; i++) { model.points[i] = model.bbox[BOUNDS_MAP[i]]; } model.internalPolyData.getPoints().modified(); model.internalPolyData.modified(); outData[0] = model.internalPolyData; }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const DEFAULT_VALUES = { edgeColor: [1, 1, 1], }; // ---------------------------------------------------------------------------- export function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); vtkContextRepresentation.extend(publicAPI, model, initialValues); macro.setGetArray(publicAPI, model, ['edgeColor'], 3); macro.get(publicAPI, model, ['mapper', 'actor']); // Object specific methods vtkOutlineContextRepresentation(publicAPI, model); } // ---------------------------------------------------------------------------- export const newInstance = macro.newInstance( extend, 'vtkOutlineContextRepresentation' ); // ---------------------------------------------------------------------------- export default { newInstance, extend }; |