modeling/src/operations/booleans/scission.js

  1. const flatten = require('../../utils/flatten')
  2. // const geom2 = require('../../geometries/geom2')
  3. const geom3 = require('../../geometries/geom3')
  4. // const scissionGeom2 = require('./scissionGeom2')
  5. const scissionGeom3 = require('./scissionGeom3')
  6. /**
  7. * Scission (divide) the given geometry into the component pieces.
  8. *
  9. * NOTE: Currently only 3D geometries are supported.
  10. *
  11. * @param {...Object} objects - list of geometries
  12. * @returns {Array} list of pieces from each geometry
  13. * @alias module:modeling/booleans.scission
  14. *
  15. * @example
  16. * let figure = require('./my.stl')
  17. * let pieces = scission(figure)
  18. *
  19. * @example
  20. * +-------+ +-------+
  21. * | | | |
  22. * | +---+ | A +---+
  23. * | | +---+ = | | +---+
  24. * +---+ | | +---+ | |
  25. * +---+ | +---+ |
  26. * | | | B |
  27. * +-------+ +-------+
  28. */
  29. const scission = (...objects) => {
  30. objects = flatten(objects)
  31. if (objects.length === 0) throw new Error('wrong number of arguments')
  32. const results = objects.map((object) => {
  33. // if (path2.isA(object)) return path2.transform(matrix, object)
  34. // if (geom2.isA(object)) return geom2.transform(matrix, object)
  35. if (geom3.isA(object)) return scissionGeom3(object)
  36. return object
  37. })
  38. return results.length === 1 ? results[0] : results
  39. }
  40. module.exports = scission