UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

53 lines (45 loc) 1.78 kB
const flatten = require('../../utils/flatten') const areAllShapesTheSameType = require('../../utils/areAllShapesTheSameType') const geom2 = require('../../geometries/geom2') const geom3 = require('../../geometries/geom3') const path2 = require('../../geometries/path2') const hullPath2 = require('./hullPath2') const hullGeom2 = require('./hullGeom2') const hullGeom3 = require('./hullGeom3') /** * Create a convex hull of the given geometries. * The given geometries should be of the same type, either geom2 or geom3 or path2. * @param {...Objects} geometries - list of geometries from which to create a hull * @returns {geom2|geom3} new geometry * @alias module:modeling/hulls.hull * * @example * let myshape = hull(rectangle({center: [-5,-5]}), ellipse({center: [5,5]})) * * @example * +-------+ +-------+ * | | | \ * | A | | \ * | | | \ * +-------+ + \ * = \ \ * +-------+ \ + * | | \ | * | B | \ | * | | \ | * +-------+ +-------+ */ const hull = (...geometries) => { geometries = flatten(geometries) if (geometries.length === 0) throw new Error('wrong number of arguments') if (!areAllShapesTheSameType(geometries)) { throw new Error('only hulls of the same type are supported') } const geometry = geometries[0] if (path2.isA(geometry)) return hullPath2(geometries) if (geom2.isA(geometry)) return hullGeom2(geometries) if (geom3.isA(geometry)) return hullGeom3(geometries) // FIXME should this throw an error for unknown geometries? return geometry } module.exports = hull