UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

105 lines (93 loc) 3.67 kB
import { m as macro } from '../../macros2.js'; import vtkBoundingBox from './BoundingBox.js'; import vtkPoints from '../Core/Points.js'; // ---------------------------------------------------------------------------- // vtkCell methods // ---------------------------------------------------------------------------- function vtkCell(publicAPI, model) { // Set our className model.classHierarchy.push('vtkCell'); publicAPI.initialize = (points, pointIdsList = null) => { if (!pointIdsList) { model.points = points; model.pointsIds = new Array(points.getNumberOfPoints()); for (let i = points.getNumberOfPoints() - 1; i >= 0; --i) { model.pointsIds[i] = i; } } else { model.pointsIds = pointIdsList; let triangleData = model.points.getData(); if (triangleData.length !== 3 * model.pointsIds.length) { triangleData = macro.newTypedArray(points.getDataType(), 3 * model.pointsIds.length); } const pointsData = points.getData(); model.pointsIds.forEach((pointId, index) => { // const start = 3 * pointId; // pointsData.set(p.subarray(start, start + 3), 3 * index); let pointOffset = 3 * pointId; let trianglePointOffset = 3 * index; triangleData[trianglePointOffset] = pointsData[pointOffset]; triangleData[++trianglePointOffset] = pointsData[++pointOffset]; triangleData[++trianglePointOffset] = pointsData[++pointOffset]; }); model.points.setData(triangleData); } }; publicAPI.getBounds = () => model.points.getBounds(); publicAPI.getLength2 = () => { const lengths = vtkBoundingBox.getLengths(publicAPI.getBounds()); return lengths[0] * lengths[0] + lengths[1] * lengths[1] + lengths[2] * lengths[2]; }; publicAPI.getParametricDistance = pcoords => { let pDist; let pDistMax = 0.0; for (let i = 0; i < 3; i++) { if (pcoords[i] < 0.0) { pDist = -pcoords[i]; } else if (pcoords[i] > 1.0) { pDist = pcoords[i] - 1.0; } else { // inside the cell in the parametric direction pDist = 0.0; } if (pDist > pDistMax) { pDistMax = pDist; } } return pDistMax; }; publicAPI.getNumberOfPoints = () => model.points.getNumberOfPoints(); publicAPI.deepCopy = cell => { cell.initialize(model.points, model.pointsIds); }; publicAPI.getCellDimension = () => {}; // virtual publicAPI.intersectWithLine = (p1, p2, tol, t, x, pcoords, subId) => {}; // virtual publicAPI.evaluatePosition = (x, closestPoint, subId, pcoords, dist2, weights) => { macro.vtkErrorMacro('vtkCell.evaluatePosition is not implemented.'); }; // virtual } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- const DEFAULT_VALUES = { bounds: [-1, -1, -1, -1, -1, -1], pointsIds: [] }; // ---------------------------------------------------------------------------- function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); macro.obj(publicAPI, model); if (!model.points) { model.points = vtkPoints.newInstance(); } macro.get(publicAPI, model, ['points', 'pointsIds']); vtkCell(publicAPI, model); } // ---------------------------------------------------------------------------- const newInstance = macro.newInstance(extend, 'vtkCell'); // ---------------------------------------------------------------------------- var vtkCell$1 = { newInstance, extend }; export { vtkCell$1 as default, extend, newInstance };