@thewtex/vtk.js-esm
Version:
Visualization Toolkit for the Web
93 lines (73 loc) • 3.98 kB
JavaScript
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
import macro from '../../macro.js';
import vtkActor from '../../Rendering/Core/Actor.js';
import vtkContextRepresentation from './ContextRepresentation.js';
import vtkMapper from '../../Rendering/Core/Mapper.js';
import vtkPolyData from '../../Common/DataModel/PolyData.js';
var vtkErrorMacro = macro.vtkErrorMacro; // prettier-ignore
var OUTLINE_ARRAY = [2, 0, 1, 2, 0, 2, 2, 0, 4, 2, 1, 3, 2, 1, 5, 2, 2, 3, 2, 2, 6, 2, 3, 7, 2, 4, 5, 2, 4, 6, 2, 5, 7, 2, 6, 7]; // ----------------------------------------------------------------------------
// vtkCroppingOutlineRepresentation 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 vtkCroppingOutlineRepresentation(publicAPI, model) {
var _model$actor$getPrope;
// Set our className
model.classHierarchy.push('vtkCroppingOutlineRepresentation'); // --------------------------------------------------------------------------
// 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(OUTLINE_ARRAY)); // --------------------------------------------------------------------------
// Generic rendering pipeline
// --------------------------------------------------------------------------
model.mapper = vtkMapper.newInstance({
scalarVisibility: false
});
model.actor = vtkActor.newInstance();
(_model$actor$getPrope = model.actor.getProperty()).setEdgeColor.apply(_model$actor$getPrope, _toConsumableArray(model.edgeColor));
model.mapper.setInputConnection(publicAPI.getOutputPort());
model.actor.setMapper(model.mapper);
publicAPI.addActor(model.actor); // --------------------------------------------------------------------------
publicAPI.requestData = function (inData, outData) {
var list = publicAPI.getRepresentationStates(inData[0]);
if (list.length === 8) {
var pi = 0;
for (var i = 0; i < list.length; i++) {
var pt = list[i].getOrigin();
model.points[pi++] = pt[0];
model.points[pi++] = pt[1];
model.points[pi++] = pt[2];
}
model.internalPolyData.getPoints().modified();
model.internalPolyData.modified();
outData[0] = model.internalPolyData;
} else {
vtkErrorMacro('CroppingOutlineRepresentation did not get 8 states');
}
};
} // ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
var DEFAULT_VALUES = {
edgeColor: [1, 1, 1]
}; // ----------------------------------------------------------------------------
function extend(publicAPI, model) {
var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
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
vtkCroppingOutlineRepresentation(publicAPI, model);
} // ----------------------------------------------------------------------------
var newInstance = macro.newInstance(extend, 'vtkCroppingOutlineRepresentation'); // ----------------------------------------------------------------------------
var vtkCroppingOutlineRepresentation$1 = {
newInstance: newInstance,
extend: extend
};
export default vtkCroppingOutlineRepresentation$1;
export { extend, newInstance };