@jscad/modeling
Version:
Constructive Solid Geometry (CSG) Library for JSCAD
37 lines (29 loc) • 1.2 kB
JavaScript
const geom3 = require('../../geometries/geom3')
const union = require('../booleans/union')
const expandShell = require('./expandShell')
/*
* Expand the given geometry (geom3) using the given options (if any).
* @param {Object} options - options for expand
* @param {Number} [options.delta=1] - delta (+/-) of expansion
* @param {String} [options.corners='round'] - type corner to create during of expansion; round
* @param {Integer} [options.segments=12] - number of segments when creating round corners
* @param {geom3} geometry - the geometry to expand
* @returns {geom3} expanded geometry
*/
const expandGeom3 = (options, geometry) => {
const defaults = {
delta: 1,
corners: 'round',
segments: 12
}
const { delta, corners, segments } = Object.assign({ }, defaults, options)
if (!(corners === 'round')) {
throw new Error('corners must be "round" for 3D geometries')
}
const polygons = geom3.toPolygons(geometry)
if (polygons.length === 0) throw new Error('the given geometry cannot be empty')
options = { delta, corners, segments }
const expanded = expandShell(options, geometry)
return union(geometry, expanded)
}
module.exports = expandGeom3