@thewtex/vtk.js-esm
Version:
Visualization Toolkit for the Web
78 lines (61 loc) • 4 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import macro from '../../macro.js';
import vtkBoundingBox from './BoundingBox.js';
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var VTK_SMALL_NUMBER = 1e-12; // ----------------------------------------------------------------------------
// Global methods
// ----------------------------------------------------------------------------
function evaluate(radius, center, x) {
return (x[0] - center[0]) * (x[0] - center[0]) + (x[1] - center[1]) * (x[1] - center[1]) + (x[2] - center[2]) * (x[2] - center[2]) - radius * radius;
}
function isPointIn3DEllipse(point, bounds) {
var center = vtkBoundingBox.getCenter(bounds);
var scale3 = vtkBoundingBox.computeScale3(bounds);
scale3 = scale3.map(function (x) {
return Math.max(Math.abs(x), VTK_SMALL_NUMBER);
});
var radius = [(point[0] - center[0]) / scale3[0], (point[1] - center[1]) / scale3[1], (point[2] - center[2]) / scale3[2]];
return radius[0] * radius[0] + radius[1] * radius[1] + radius[2] * radius[2] <= 1;
} // ----------------------------------------------------------------------------
// Static API
// ----------------------------------------------------------------------------
var STATIC = {
evaluate: evaluate,
isPointIn3DEllipse: isPointIn3DEllipse
}; // ----------------------------------------------------------------------------
// vtkSphere methods
// ----------------------------------------------------------------------------
function vtkSphere(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkSphere');
publicAPI.evaluateFunction = function (xyz) {
var retVal = (xyz[0] - model.center[0]) * (xyz[0] - model.center[0]) + (xyz[1] - model.center[1]) * (xyz[1] - model.center[1]) + (xyz[2] - model.center[2]) * (xyz[2] - model.center[2]) - model.radius * model.radius;
return retVal;
};
publicAPI.evaluateGradient = function (xyz) {
var retVal = [2.0 - (xyz[0] - model.center[0]), 2.0 - (xyz[1] - model.center[1]), 2.0 - (xyz[2] - model.center[2])];
return retVal;
};
} // ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
var DEFAULT_VALUES = {
radius: 0.5,
center: [0.0, 0.0, 0.0]
}; // ----------------------------------------------------------------------------
function extend(publicAPI, model) {
var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
Object.assign(model, DEFAULT_VALUES, initialValues); // Object methods
macro.obj(publicAPI, model);
macro.setGet(publicAPI, model, ['radius']);
macro.setGetArray(publicAPI, model, ['center'], 3);
vtkSphere(publicAPI, model);
} // ----------------------------------------------------------------------------
var newInstance = macro.newInstance(extend, 'vtkSphere'); // ----------------------------------------------------------------------------
var vtkSphere$1 = _objectSpread({
newInstance: newInstance,
extend: extend
}, STATIC);
export default vtkSphere$1;
export { STATIC, extend, newInstance };