@kitware/vtk.js
Version:
Visualization Toolkit for the Web
105 lines (93 loc) • 3.67 kB
JavaScript
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 };