UNPKG

@bitbybit-dev/occt

Version:

Bit By Bit Developers CAD algorithms using OpenCascade Technology kernel. Run in Node and in Browser.

111 lines (110 loc) 4.27 kB
export class ConverterService { constructor(occ) { this.occ = occ; } getActualTypeOfShape(shape) { let result = shape; if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_EDGE) { result = this.occ.TopoDS.Edge_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_WIRE) { result = this.occ.TopoDS.Wire_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_VERTEX) { result = this.occ.TopoDS.Vertex_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_SOLID) { result = this.occ.TopoDS.Solid_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_SHELL) { result = this.occ.TopoDS.Shell_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_FACE) { result = this.occ.TopoDS.Face_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_COMPSOLID) { result = this.occ.TopoDS.CompSolid_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_COMPOUND) { result = this.occ.TopoDS.Compound_1(shape); } else { result = shape; } return result; } combineEdgesAndWiresIntoAWire(inputs) { if (inputs.shapes === undefined) { throw (Error(("Shapes are not defined"))); } const makeWire = new this.occ.BRepBuilderAPI_MakeWire_1(); inputs.shapes.forEach((shape) => { if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_EDGE) { makeWire.Add_1(shape); } else if (shape.ShapeType() === this.occ.TopAbs_ShapeEnum.TopAbs_WIRE) { makeWire.Add_2(shape); } }); if (makeWire.IsDone()) { this.occ.BRepLib.BuildCurves3d_1(makeWire.Wire(), 1.0e-7, this.occ.GeomAbs_Shape.GeomAbs_C1, 14, 0); const wire = makeWire.Wire(); makeWire.delete(); return wire; } else { let errorMessage; const error = makeWire.Error(); makeWire.delete(); if (error === this.occ.BRepBuilderAPI_WireError.BRepBuilderAPI_DisconnectedWire) { errorMessage = "Wire is disconnected and can not be constructed"; } else if (error === this.occ.BRepBuilderAPI_WireError.BRepBuilderAPI_EmptyWire) { errorMessage = "Wire is empty and can not be constructed"; } else if (error === this.occ.BRepBuilderAPI_WireError.BRepBuilderAPI_NonManifoldWire) { errorMessage = "Wire is non manifold and can not be constructed"; } else if (error === this.occ.BRepBuilderAPI_WireError.BRepBuilderAPI_WireDone) { errorMessage = "Wire is done"; } throw new Error(errorMessage); } } vertexToPoint(inputs) { const pt = this.occ.BRep_Tool.Pnt(inputs.shape); const res = [pt.X(), pt.Y(), pt.Z()]; pt.delete(); return res; } getGeomCurveFromEdge(edge, uMin, uMax) { const loc = edge.Location_1(); const crvHandle = this.occ.BRep_Tool.Curve_1(edge, loc, uMin, uMax); const curve = crvHandle.get(); return curve; } makeCompound(inputs) { const resCompound = new this.occ.TopoDS_Compound(); const builder = new this.occ.BRep_Builder(); builder.MakeCompound(resCompound); inputs.shapes.forEach(shape => { const cp = new this.occ.BRepBuilderAPI_Copy_2(shape, true, false); const s = cp.Shape(); builder.Add(resCompound, s); cp.delete(); s.delete(); }); builder.delete(); return resCompound; } makeCompoundIfNeeded(shapes, returnCompound) { if (returnCompound) { const compound = this.makeCompound({ shapes }); shapes.forEach(w => w.delete()); return compound; } else { return shapes; } } }