Tue, 04/11/2017 - 11:15
Hi,
I have this piece of code to create 3D version of trapezoid (a cuboid with two different heights).
TopoDS_Compound aRes;
BRep_Builder aBuilder;
aBuilder.MakeCompound (aRes);
// Face 1 (Pointing towards negative x-axis)
gp_Pnt p1(-2.5, -2.5, -2.5);
gp_Pnt p2(-2.5, -2.5, 2.5);
gp_Pnt p3(-2.5, 2.5, 2.5);
gp_Pnt p4(-2.5, 2.5, -2.5);
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(p1, p2);
Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(p2, p3);
Handle(Geom_TrimmedCurve) aSegment3 = GC_MakeSegment(p3, p4);
Handle(Geom_TrimmedCurve) aSegment4 = GC_MakeSegment(p4, p1);
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(aSegment2);
TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(aSegment3);
TopoDS_Edge anEdge4 = BRepBuilderAPI_MakeEdge(aSegment4);
TopoDS_Wire aWire1 = BRepBuilderAPI_MakeWire(anEdge1, anEdge2, anEdge3, anEdge4);
TopoDS_Face face1 = BRepBuilderAPI_MakeFace(aWire1);
aBuilder.Add (aRes, aWire1);
aBuilder.Add (aRes, face1);
// Face 2 (Pointing towards positive x-axis)
gp_Pnt p5(2.5, -5, -2.5);
gp_Pnt p6(2.5, 5, -2.5);
gp_Pnt p7(2.5, 5, 2.5);
gp_Pnt p8(2.5, -5, 2.5);
Handle(Geom_TrimmedCurve) aSegment5 = GC_MakeSegment(p5, p6);
Handle(Geom_TrimmedCurve) aSegment6 = GC_MakeSegment(p6, p7);
Handle(Geom_TrimmedCurve) aSegment7 = GC_MakeSegment(p7, p8);
Handle(Geom_TrimmedCurve) aSegment8 = GC_MakeSegment(p8, p5);
TopoDS_Edge anEdge5 = BRepBuilderAPI_MakeEdge(aSegment5);
TopoDS_Edge anEdge6 = BRepBuilderAPI_MakeEdge(aSegment6);
TopoDS_Edge anEdge7 = BRepBuilderAPI_MakeEdge(aSegment7);
TopoDS_Edge anEdge8 = BRepBuilderAPI_MakeEdge(aSegment8);
TopoDS_Wire aWire2 = BRepBuilderAPI_MakeWire(anEdge5, anEdge6, anEdge7, anEdge8);
TopoDS_Face face2 = BRepBuilderAPI_MakeFace(aWire2);
aBuilder.Add (aRes, aWire2);
aBuilder.Add (aRes, face2);
// Face 3 (Pointing towards negative y-axis)
gp_Pnt p9(-2.5, -2.5, -2.5);
gp_Pnt p10(2.5, -5, -2.5);
gp_Pnt p11(2.5, -5, 2.5);
gp_Pnt p12(-2.5, -2.5, 2.5);
Handle(Geom_TrimmedCurve) aSegment9 = GC_MakeSegment(p9, p10);
Handle(Geom_TrimmedCurve) aSegment10 = GC_MakeSegment(p10, p11);
Handle(Geom_TrimmedCurve) aSegment11 = GC_MakeSegment(p11, p12);
Handle(Geom_TrimmedCurve) aSegment12 = GC_MakeSegment(p12, p9);
TopoDS_Edge anEdge9 = BRepBuilderAPI_MakeEdge(aSegment9);
TopoDS_Edge anEdge10 = BRepBuilderAPI_MakeEdge(aSegment10);
TopoDS_Edge anEdge11 = BRepBuilderAPI_MakeEdge(aSegment11);
TopoDS_Edge anEdge12 = BRepBuilderAPI_MakeEdge(aSegment12);
TopoDS_Wire aWire3 = BRepBuilderAPI_MakeWire(anEdge9, anEdge10, anEdge11, anEdge12);
TopoDS_Face face3 = BRepBuilderAPI_MakeFace(aWire3);
aBuilder.Add (aRes, aWire3);
aBuilder.Add (aRes, face3);
// Face 4 (Pointing towards positive y-axis)
gp_Pnt p13(-2.5, 2.5, -2.5);
gp_Pnt p14(2.5, 5, -2.5);
gp_Pnt p15(2.5, 5, 2.5);
gp_Pnt p16(-2.5, 2.5, 2.5);
Handle(Geom_TrimmedCurve) aSegment13 = GC_MakeSegment(p13, p14);
Handle(Geom_TrimmedCurve) aSegment14 = GC_MakeSegment(p14, p15);
Handle(Geom_TrimmedCurve) aSegment15 = GC_MakeSegment(p15, p16);
Handle(Geom_TrimmedCurve) aSegment16 = GC_MakeSegment(p16, p13);
TopoDS_Edge anEdge13 = BRepBuilderAPI_MakeEdge(aSegment13);
TopoDS_Edge anEdge14 = BRepBuilderAPI_MakeEdge(aSegment14);
TopoDS_Edge anEdge15 = BRepBuilderAPI_MakeEdge(aSegment15);
TopoDS_Edge anEdge16 = BRepBuilderAPI_MakeEdge(aSegment16);
TopoDS_Wire aWire4 = BRepBuilderAPI_MakeWire(anEdge13, anEdge14, anEdge15, anEdge16);
TopoDS_Face face4 = BRepBuilderAPI_MakeFace(aWire4);
aBuilder.Add (aRes, aWire4);
aBuilder.Add (aRes, face4);
// Face 5 (Pointing towards negative z-axis)
gp_Pnt p17(-2.5, -2.5, -2.5);
gp_Pnt p18(-2.5, 2.5, -2.5);
gp_Pnt p19(2.5, 5, -2.5);
gp_Pnt p20(2.5, -5, -2.5);
Handle(Geom_TrimmedCurve) aSegment17 = GC_MakeSegment(p17, p18);
Handle(Geom_TrimmedCurve) aSegment18 = GC_MakeSegment(p18, p19);
Handle(Geom_TrimmedCurve) aSegment19 = GC_MakeSegment(p19, p20);
Handle(Geom_TrimmedCurve) aSegment20 = GC_MakeSegment(p20, p17);
TopoDS_Edge anEdge17 = BRepBuilderAPI_MakeEdge(aSegment17);
TopoDS_Edge anEdge18 = BRepBuilderAPI_MakeEdge(aSegment18);
TopoDS_Edge anEdge19 = BRepBuilderAPI_MakeEdge(aSegment19);
TopoDS_Edge anEdge20 = BRepBuilderAPI_MakeEdge(aSegment20);
TopoDS_Wire aWire5 = BRepBuilderAPI_MakeWire(anEdge17, anEdge18, anEdge19, anEdge20);
TopoDS_Face face5 = BRepBuilderAPI_MakeFace(aWire5);
aBuilder.Add (aRes, aWire5);
aBuilder.Add (aRes, face5);
// Face 6 (Pointing towards positive z-axis)
gp_Pnt p21(-2.5, -2.5, 2.5);
gp_Pnt p22(-2.5, 2.5, 2.5);
gp_Pnt p23(2.5, 5, 2.5);
gp_Pnt p24(2.5, -5, 2.5);
Handle(Geom_TrimmedCurve) aSegment21 = GC_MakeSegment(p21, p22);
Handle(Geom_TrimmedCurve) aSegment22 = GC_MakeSegment(p22, p23);
Handle(Geom_TrimmedCurve) aSegment23 = GC_MakeSegment(p23, p24);
Handle(Geom_TrimmedCurve) aSegment24 = GC_MakeSegment(p24, p21);
TopoDS_Edge anEdge21 = BRepBuilderAPI_MakeEdge(aSegment21);
TopoDS_Edge anEdge22 = BRepBuilderAPI_MakeEdge(aSegment22);
TopoDS_Edge anEdge23 = BRepBuilderAPI_MakeEdge(aSegment23);
TopoDS_Edge anEdge24 = BRepBuilderAPI_MakeEdge(aSegment24);
TopoDS_Wire aWire6 = BRepBuilderAPI_MakeWire(anEdge21, anEdge22, anEdge23, anEdge24);
TopoDS_Face face6 = BRepBuilderAPI_MakeFace(aWire6);
aBuilder.Add (aRes, aWire6);
aBuilder.Add (aRes, face6);
I also have a box/cuboid object
gp_Pnt b2p1(0, 0, -1);
gp_Pnt b2p2(2, 2, 1);
TopoDS_Shape S1 = BRepPrimAPI_MakeBox(b2p1, b2p2);
This code crashes when it executes this statement
TopoDS_Shape fusedObject = BRepAlgoAPI_Fuse(S1, aRes);
What is it that I am doing wrong? Can experts help me out to perform Fuse operation of these two different versions of 3D objects?
Thanks
Tue, 04/11/2017 - 11:20
Hi,
It is crashing in Initialize function:
0 libTKBRep.7.0.0.dylib 0x0000000109ccb8fc TopoDS_Iterator::Initialize(TopoDS_Shape const&, unsigned int, unsigned int) + 92
1 fff.OccTest 0x000000010992fb0e TopoDS_Iterator::TopoDS_Iterator(TopoDS_Shape const&, unsigned int, unsigned int) + 110 (TopoDS_Iterator.lxx:36)
2 fff.OccTest 0x000000010992c509 TopoDS_Iterator::TopoDS_Iterator(TopoDS_Shape const&, unsigned int, unsigned int) + 41 (TopoDS_Iterator.lxx:37)
3 fff.OccTest 0x0000000109928180 MainWindow::MakeBottle() + 9088 (mainwindow.cpp:241)
4 fff.OccTest 0x0000000109925db7 MainWindow::MainWindow(QWidget*) + 167 (mainwindow.cpp:49)
5 fff.OccTest 0x000000010992a81d MainWindow::MainWindow(QWidget*) + 29 (mainwindow.cpp:50)
6 fff.OccTest 0x0000000109925c43 main + 67 (main.cpp:7)
7 fff.OccTest 0x0000000109925bf4 start + 52
Thanks
Tue, 04/11/2017 - 17:52
Hi,
What might have gone wrong? I changed the orientation of the faces by inserting points in counter clock wise across all faces. Hoping this would solve, but it did not.
Please guide with some references/pointers.
Thanks