
Tue, 08/05/2025 - 20:40
Forums:
I have the following C++ code. It generates with three of the four side faces and no top or bottom. Any thoughts on what is wrong here?
TopoDS_Shape MakeShape();
int main() {
const char * filename = "/home/mwu/src/occtest_native/build/myshape.stl";
TopoDS_Shape shape = MakeShape();
StlAPI_Writer stlWriter;
BRepMesh_IncrementalMesh mesh = BRepMesh_IncrementalMesh(shape, 0.01, false, 0.1);
Standard_Boolean success = stlWriter.Write(shape, filename);
STEPControl_Writer writer;
writer.Transfer(shape, STEPControl_ManifoldSolidBrep);
writer.Write("/home/mwu/src/occtest_native/build/myshape.step");
if (success) {
printf("success\n");
} else {
printf("error\n");
}
return 0;
}
TopoDS_Shape MakeShape() {
gp_Pnt aPnt1(10.5, 14, 0);
gp_Pnt aPnt2(-10.5, 14., 0);
gp_Pnt aPnt3(-12.737739, 12, 0);
gp_Pnt aPnt4(12.737739, 12, 0);
gp_Pnt origin(0, 0, 0);
gp_Dir normal(0, 0, 1);
gp_Dir xDir(1, 0, 0);
gp_Ax2 circleOrigin(origin, normal, xDir);
gp_Circ circle(circleOrigin, 17.5);
Handle(Geom_TrimmedCurve) line1 = GC_MakeSegment(aPnt2, aPnt1);
Handle(Geom_TrimmedCurve) line2 = GC_MakeSegment(aPnt4, aPnt3);
// Handle(Geom_TrimmedCurve) line3 = GC_MakeSegment(aPnt3, aPnt2);
// Handle(Geom_TrimmedCurve) line4 = GC_MakeSegment(aPnt1, aPnt4);
Handle(Geom_TrimmedCurve) arc1 = GC_MakeArcOfCircle(circle, aPnt2, aPnt3, true);
Handle(Geom_TrimmedCurve) arc2 = GC_MakeArcOfCircle(circle, aPnt4, aPnt1, true);
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(line1);
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(line2);
TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(arc1);
TopoDS_Edge anEdge4 = BRepBuilderAPI_MakeEdge(arc2);
// TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(line3);
// TopoDS_Edge anEdge4 = BRepBuilderAPI_MakeEdge(line4);
TopoDS_Wire wire1 = BRepBuilderAPI_MakeWire(anEdge1).Wire();
TopoDS_Wire wire2 = BRepBuilderAPI_MakeWire(anEdge2).Wire();
TopoDS_Wire wire3 = BRepBuilderAPI_MakeWire(anEdge3).Wire();
TopoDS_Wire wire4 = BRepBuilderAPI_MakeWire(anEdge4).Wire();
BRepBuilderAPI_MakeWire mkWire;
mkWire.Add(wire1);
mkWire.Add(wire2);
mkWire.Add(wire3);
mkWire.Add(wire4);
TopoDS_Wire profile = mkWire.Wire();
// Body : Prism the Profile
TopoDS_Face face = BRepBuilderAPI_MakeFace(profile);
gp_Vec aPrismVec(0, 0, 2);
TopoDS_Shape myBody = BRepPrimAPI_MakePrism(profile, aPrismVec);
return myBody;
}
Attachments:
Wed, 08/06/2025 - 04:00
Turns out this is related to some inaccuracy in the edges.