UNPKG

@thewtex/vtk.js-esm

Version:

Visualization Toolkit for the Web

78 lines (61 loc) 4 kB
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 };