UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

44 lines (38 loc) 1.51 kB
const flatten = require('../../utils/flatten') const union = require('../booleans/union') const hull = require('./hull') /** * Create a chain of hulled geometries from the given geometries. * Essentially hull A+B, B+C, C+D, etc., then union the results. * 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.hullChain * * @example * let newshape = hullChain(rectangle({center: [-5,-5]}), circle({center: [0,0]}), rectangle({center: [5,5]})) * * @example * +-------+ +-------+ +-------+ +------+ * | | | | | \ / | * | A | | C | | | | * | | | | | | * +-------+ +-------+ + + * = \ / * +-------+ \ / * | | \ / * | B | \ / * | | \ / * +-------+ +-------+ */ const hullChain = (...geometries) => { geometries = flatten(geometries) if (geometries.length < 2) throw new Error('wrong number of arguments') const hulls = [] for (let i = 1; i < geometries.length; i++) { hulls.push(hull(geometries[i - 1], geometries[i])) } return union(hulls) } module.exports = hullChain