@jscad/modeling
Version:
Constructive Solid Geometry (CSG) Library for JSCAD
32 lines (25 loc) • 845 B
JavaScript
const geom3 = require('../../geometries/geom3')
const mayOverlap = require('./mayOverlap')
const { Tree } = require('./trees')
/*
* Return a new 3D geometry representing the space in the first geometry but not
* in the second geometry. None of the given geometries are modified.
* @param {geom3} geometry1 - a geometry
* @param {geom3} geometry2 - a geometry
* @returns {geom3} new 3D geometry
*/
const subtractGeom3Sub = (geometry1, geometry2) => {
if (!mayOverlap(geometry1, geometry2)) {
return geom3.clone(geometry1)
}
const a = new Tree(geom3.toPolygons(geometry1))
const b = new Tree(geom3.toPolygons(geometry2))
a.invert()
a.clipTo(b)
b.clipTo(a, true)
a.addPolygons(b.allPolygons())
a.invert()
const newpolygons = a.allPolygons()
return geom3.create(newpolygons)
}
module.exports = subtractGeom3Sub