UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

32 lines (25 loc) 845 B
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