@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
51 lines (50 loc) • 1.54 kB
JavaScript
;
import { CadGeometryType } from "../CadCommon";
import { CadLoaderSync } from "../CadLoaderSync";
import { pushOnArrayAtEntry } from "../../../../MapUtils";
import { CadObject } from "../CadObject";
const objectsByType = /* @__PURE__ */ new Map();
export function cadMergeCompact(inputObjects) {
objectsByType.clear();
for (const inputObject of inputObjects) {
pushOnArrayAtEntry(objectsByType, inputObject.type, inputObject);
}
const oc = CadLoaderSync.oc();
const newObjects = [];
objectsByType.forEach((objects, type) => {
switch (type) {
case CadGeometryType.EDGE: {
return cadMergeCompactEdges(oc, objects, newObjects);
}
case CadGeometryType.WIRE: {
return cadMergeCompactWires(oc, objects, newObjects);
}
default: {
for (const object of objects) {
newObjects.push(object);
}
}
}
});
return newObjects;
}
export function cadMergeCompactEdges(oc, objects, newObjects) {
const api = new oc.BRepBuilderAPI_MakeWire_1();
for (const object of objects) {
api.Add_1(object.cadGeometry());
}
const wire = api.Wire();
api.delete();
newObjects.push(new CadObject(wire, CadGeometryType.WIRE));
return;
}
export function cadMergeCompactWires(oc, objects, newObjects) {
const api = new oc.BRepBuilderAPI_MakeWire_1();
for (const object of objects) {
api.Add_2(object.cadGeometry());
}
const wire = api.Wire();
api.delete();
newObjects.push(new CadObject(wire, CadGeometryType.WIRE));
return;
}