@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
103 lines (102 loc) • 3.67 kB
JavaScript
;
export var CadGeometryType = /* @__PURE__ */ ((CadGeometryType2) => {
CadGeometryType2["POINT_2D"] = "CADPoint2D";
CadGeometryType2["CURVE_2D"] = "CADCurve2D";
CadGeometryType2["VERTEX"] = "CADVertex";
CadGeometryType2["EDGE"] = "CADEdge";
CadGeometryType2["WIRE"] = "CADWire";
CadGeometryType2["FACE"] = "CADFace";
CadGeometryType2["SHELL"] = "CADShell";
CadGeometryType2["SOLID"] = "CADSolid";
CadGeometryType2["COMPSOLID"] = "CADCompsolid";
CadGeometryType2["COMPOUND"] = "CADCompound";
return CadGeometryType2;
})(CadGeometryType || {});
const CAD_GEOMETRY_TYPES = [
"CADPoint2D" /* POINT_2D */,
"CADCurve2D" /* CURVE_2D */,
"CADVertex" /* VERTEX */,
"CADEdge" /* EDGE */,
"CADWire" /* WIRE */,
"CADFace" /* FACE */,
"CADShell" /* SHELL */,
"CADSolid" /* SOLID */,
"CADCompsolid" /* COMPSOLID */,
"CADCompound" /* COMPOUND */
];
export const CAD_GEOMETRY_TYPES_SET = new Set(CAD_GEOMETRY_TYPES);
export const CAD_GEOMETRY_TYPES_SHAPE = [
"CADVertex" /* VERTEX */,
"CADEdge" /* EDGE */,
"CADWire" /* WIRE */,
"CADFace" /* FACE */,
"CADShell" /* SHELL */,
"CADSolid" /* SOLID */,
"CADCompsolid" /* COMPSOLID */,
"CADCompound" /* COMPOUND */
];
export const CAD_GEOMETRY_TYPES_SET_SHAPE = new Set(CAD_GEOMETRY_TYPES_SHAPE);
function _createShapeTypeToCadGeometryTypeMap(oc) {
const shapeEnum = oc.TopAbs_ShapeEnum;
const map = /* @__PURE__ */ new Map([
[shapeEnum.TopAbs_VERTEX, "CADVertex" /* VERTEX */],
[shapeEnum.TopAbs_EDGE, "CADEdge" /* EDGE */],
[shapeEnum.TopAbs_WIRE, "CADWire" /* WIRE */],
[shapeEnum.TopAbs_FACE, "CADFace" /* FACE */],
[shapeEnum.TopAbs_SHELL, "CADShell" /* SHELL */],
[shapeEnum.TopAbs_SOLID, "CADSolid" /* SOLID */],
[shapeEnum.TopAbs_COMPSOLID, "CADCompsolid" /* COMPSOLID */],
[shapeEnum.TopAbs_COMPOUND, "CADCompound" /* COMPOUND */]
]);
return map;
}
function _createCastMapFromCadGeometryTypeMap(oc) {
const shapeEnum = oc.TopAbs_ShapeEnum;
const map = /* @__PURE__ */ new Map([
[shapeEnum.TopAbs_VERTEX, oc.TopoDS.Vertex_1],
[shapeEnum.TopAbs_EDGE, oc.TopoDS.Edge_1],
[shapeEnum.TopAbs_WIRE, oc.TopoDS.Wire_1],
[shapeEnum.TopAbs_FACE, oc.TopoDS.Face_1],
[shapeEnum.TopAbs_SHELL, oc.TopoDS.Shell_1],
[shapeEnum.TopAbs_SOLID, oc.TopoDS.Solid_1],
[shapeEnum.TopAbs_COMPSOLID, oc.TopoDS.CompSolid_1],
[shapeEnum.TopAbs_COMPOUND, oc.TopoDS.Compound_1]
]);
return map;
}
let shapeTypeToCadGeometryTypeMap;
let shapeCasterByCadGeometryTypeMap;
export function cadGeometryTypeFromShape(oc, shape) {
shapeTypeToCadGeometryTypeMap = shapeTypeToCadGeometryTypeMap || _createShapeTypeToCadGeometryTypeMap(oc);
return shapeTypeToCadGeometryTypeMap.get(shape.ShapeType());
}
export function cadDowncast(oc, shape) {
shapeCasterByCadGeometryTypeMap = shapeCasterByCadGeometryTypeMap || _createCastMapFromCadGeometryTypeMap(oc);
const caster = shapeCasterByCadGeometryTypeMap.get(shape.ShapeType());
return caster(shape);
}
export const _createCadNumberHandle = () => ({ current: 0 });
export const _createCadVector3Handle = () => ({
x: _createCadNumberHandle(),
y: _createCadNumberHandle(),
z: _createCadNumberHandle()
});
export const _createCadBox3Handle = () => ({
min: _createCadVector3Handle(),
max: _createCadVector3Handle()
});
export class CadGC {
static withGC(callback) {
const deletables = /* @__PURE__ */ new Set();
function r(deletable) {
deletables.add(deletable);
return deletable;
}
const result = callback(r);
deletables.forEach((deletable) => {
deletable.delete();
});
deletables.clear();
return result;
}
}