@kitware/vtk.js
Version:
Visualization Toolkit for the Web
85 lines (71 loc) • 2.99 kB
JavaScript
import { m as macro } from '../../../macros2.js';
import vtkMatrixBuilder from '../../../Common/Core/MatrixBuilder.js';
import vtkAppendPolyData from '../../../Filters/General/AppendPolyData.js';
import vtkCylinderSource from '../../../Filters/Sources/CylinderSource.js';
function rotatePolyData(pd, direction) {
const points = pd.getPoints().getData();
vtkMatrixBuilder.buildFromRadian().rotateFromDirections([0, 1, 0], direction).apply(points);
pd.getPoints().modified();
pd.modified();
}
function translatePolyData(pd, translation) {
const points = pd.getPoints().getData();
vtkMatrixBuilder.buildFromRadian().translate(...translation).apply(points);
pd.modified();
}
function vtkTransformHandleSource(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkTransformHandleSource');
function requestData(inData, outData) {
const cylinderSource = vtkCylinderSource.newInstance({
height: model.height,
initAngle: model.initAngle,
radius: model.radius,
resolution: model.resolution,
capping: model.capping,
pointType: model.pointType,
center: [0, 0, 0],
direction: [0, 1, 0]
});
const appendFilter = vtkAppendPolyData.newInstance();
appendFilter.setInputConnection(cylinderSource.getOutputPort(), 0);
if (inData[0]) {
translatePolyData(inData[0], [0, model.height / 2, 0]);
appendFilter.addInputData(inData[0]);
}
if (inData[1]) {
rotatePolyData(inData[1], [0, -1, 0]);
translatePolyData(inData[1], [0, -model.height / 2, 0]);
appendFilter.addInputData(inData[1]);
}
const poly = appendFilter.getOutputData();
const points = poly.getPoints().getData();
// Apply transformation to the points coordinates
vtkMatrixBuilder.buildFromRadian().translate(...model.center).rotateFromDirections([0, 1, 0], model.direction).translate(...model.center.map(c => c * -1)).apply(points);
// Update output
outData[0] = poly;
}
// Expose methods
publicAPI.requestData = requestData;
}
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
const DEFAULT_VALUES = {
capPolyData: null
};
// ----------------------------------------------------------------------------
function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);
vtkCylinderSource.extend(publicAPI, model, initialValues);
macro.algo(publicAPI, model, 2, 1);
vtkTransformHandleSource(publicAPI, model);
}
// ----------------------------------------------------------------------------
const newInstance = macro.newInstance(extend, 'vtkTransformHandleSource');
// ----------------------------------------------------------------------------
var vtkTransformHandleSource$1 = {
newInstance,
extend
};
export { vtkTransformHandleSource$1 as default, extend, newInstance };