UNPKG

@bitbybit-dev/manifold

Version:

Bit By Bit Developers Manifold based CAD Library to Program Geometry

83 lines (82 loc) 2.82 kB
export class ManifoldBooleans { constructor(wasm) { this.manifold = wasm; } split(inputs) { return inputs.manifoldToSplit.split(inputs.manifoldCutter); } splitByPlane(inputs) { return inputs.manifold.splitByPlane(inputs.normal, inputs.originOffset); } splitByPlaneOnOffsets(inputs) { const pieces = []; const clone = inputs.manifold.asOriginal(); const remainders = [clone]; const junk = []; inputs.originOffsets.forEach((s, i) => { if (remainders[i]) { const halfs = remainders[i].splitByPlane(inputs.normal, s); if (!halfs[1].isEmpty() && !halfs[0].isEmpty()) { pieces.push(halfs[1]); remainders.push(halfs[0]); } else if (halfs[1].isEmpty() && !halfs[0].isEmpty()) { remainders.push(halfs[0]); junk.push(halfs[1]); } else if (!halfs[1].isEmpty() && halfs[0].isEmpty()) { pieces.push(halfs[1]); junk.push(halfs[0]); } else if (halfs[0].isEmpty() && halfs[1].isEmpty()) { junk.push(...halfs); } } }); remainders.forEach(r => r.delete()); junk.forEach(j => j.delete()); return pieces; } trimByPlane(inputs) { return inputs.manifold.asOriginal().trimByPlane(inputs.normal, inputs.originOffset); } subtract(inputs) { return inputs.manifold1.subtract(inputs.manifold2); } add(inputs) { return inputs.manifold1.add(inputs.manifold2); } intersect(inputs) { return inputs.manifold1.intersect(inputs.manifold2); } differenceTwo(inputs) { const { Manifold } = this.manifold; const { difference } = Manifold; return difference(inputs.manifold1, inputs.manifold2); } difference(inputs) { const { Manifold } = this.manifold; const { difference } = Manifold; return difference(inputs.manifolds); } unionTwo(inputs) { const { Manifold } = this.manifold; const { union } = Manifold; return union(inputs.manifold1, inputs.manifold2); } union(inputs) { const { Manifold } = this.manifold; const { union } = Manifold; return union(inputs.manifolds); } intersectionTwo(inputs) { const { Manifold } = this.manifold; const { intersection } = Manifold; return intersection(inputs.manifold1, inputs.manifold2); } intersection(inputs) { const { Manifold } = this.manifold; const { intersection } = Manifold; return intersection(inputs.manifolds); } }