UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

28 lines (20 loc) 912 B
const flatten = require('../../utils/flatten') const geom3 = require('../../geometries/geom3') const measureEpsilon = require('../../measurements/measureEpsilon') const fromFakePolygons = require('./fromFakePolygons') const to3DWalls = require('./to3DWalls') const subtractGeom3 = require('./subtractGeom3') /* * Return a new 2D geometry representing space in the first geometry but * not in the subsequent geometries. None of the given geometries are modified. * @param {...geom2} geometries - list of geometries * @returns {geom2} new 2D geometry */ const subtract = (...geometries) => { geometries = flatten(geometries) const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry)) const newgeom3 = subtractGeom3(newgeometries) const epsilon = measureEpsilon(newgeom3) return fromFakePolygons(epsilon, geom3.toPolygons(newgeom3)) } module.exports = subtract