modeling/src/operations/booleans/intersect.js

  1. const flatten = require('../../utils/flatten')
  2. const areAllShapesTheSameType = require('../../utils/areAllShapesTheSameType')
  3. const geom2 = require('../../geometries/geom2')
  4. const geom3 = require('../../geometries/geom3')
  5. const intersectGeom2 = require('./intersectGeom2')
  6. const intersectGeom3 = require('./intersectGeom3')
  7. /**
  8. * Return a new geometry representing space in both the first geometry and
  9. * all subsequent geometries.
  10. * The given geometries should be of the same type, either geom2 or geom3.
  11. *
  12. * @param {...Object} geometries - list of geometries
  13. * @returns {geom2|geom3} a new geometry
  14. * @alias module:modeling/booleans.intersect
  15. *
  16. * @example
  17. * let myshape = intersect(cube({size: 5}), cube({size: 5, center: [3,3,3]}))
  18. *
  19. * @example
  20. * +-------+
  21. * | |
  22. * | A |
  23. * | +--+----+ = +--+
  24. * +----+--+ | +--+
  25. * | B |
  26. * | |
  27. * +-------+
  28. */
  29. const intersect = (...geometries) => {
  30. geometries = flatten(geometries)
  31. if (geometries.length === 0) throw new Error('wrong number of arguments')
  32. if (!areAllShapesTheSameType(geometries)) {
  33. throw new Error('only intersect of the types are supported')
  34. }
  35. const geometry = geometries[0]
  36. // if (path.isA(geometry)) return pathintersect(matrix, geometries)
  37. if (geom2.isA(geometry)) return intersectGeom2(geometries)
  38. if (geom3.isA(geometry)) return intersectGeom3(geometries)
  39. return geometry
  40. }
  41. module.exports = intersect