@bitbybit-dev/manifold
Version:
Bit By Bit Developers Manifold based CAD Library to Program Geometry
83 lines (82 loc) • 2.82 kB
JavaScript
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);
}
}