#include "occheaders.h"
int main()
{
double x = 0.50;
double y = 1.0 - sqrt(1.0 - x*x);
gp_Pnt circleCenterA(0, 0, 0);
gp_Dir circleNormalA(1, 0, 0);
gp_Ax1 circleAxisA(circleCenterA, circleNormalA);
Standard_Real circleRadiusA = 0.05;
gp_Circ circleA;
circleA.SetLocation(circleCenterA);
circleA.SetRadius(circleRadiusA);
circleA.SetAxis(circleAxisA);
Handle_Geom_Circle geomCircleA = GC_MakeCircle(circleA);
TopoDS_Edge circleEdgeA = BRepBuilderAPI_MakeEdge(geomCircleA);
TopoDS_Wire circleEdgeWireA = BRepBuilderAPI_MakeWire(circleEdgeA);
TopoDS_Face faceA = BRepBuilderAPI_MakeFace(circleEdgeWireA);
gp_Pnt p1A(-x, y, 0);
gp_Pnt p2A( x, y, 0);
Handle(Geom_TrimmedCurve) tcA = GC_MakeArcOfCircle(p1A, circleCenterA, p2A);
TopoDS_Edge tcEdgeA = BRepBuilderAPI_MakeEdge(tcA);
TopoDS_Wire tcEdgeWireA = BRepBuilderAPI_MakeWire(tcEdgeA);
TopoDS_Shape bodyA = BRepOffsetAPI_MakePipe(tcEdgeWireA, faceA);
gp_Pnt circleCenterB(0, 0.06, 0);
gp_Dir circleNormalB(0, 0, 1);
gp_Ax1 circleAxisB(circleCenterB, circleNormalB);
Standard_Real circleRadiusB = 0.05;
gp_Circ circleB;
circleB.SetLocation(circleCenterB);
circleB.SetRadius(circleRadiusB);
circleB.SetAxis(circleAxisB);
Handle_Geom_Circle geomCircleB = GC_MakeCircle(circleB);
TopoDS_Edge circleEdgeB = BRepBuilderAPI_MakeEdge(geomCircleB);
TopoDS_Wire circleEdgeWireB = BRepBuilderAPI_MakeWire(circleEdgeB);
TopoDS_Face faceB = BRepBuilderAPI_MakeFace(circleEdgeWireB);
gp_Pnt p1B(0, 0.06 - y, -x);
gp_Pnt p2B(0, 0.06 - y, x);
Handle(Geom_TrimmedCurve) tcB = GC_MakeArcOfCircle(p1B, circleCenterB, p2B);
TopoDS_Edge tcEdgeB = BRepBuilderAPI_MakeEdge(tcB);
TopoDS_Wire tcEdgeWireB = BRepBuilderAPI_MakeWire(tcEdgeB);
TopoDS_Shape bodyB = BRepOffsetAPI_MakePipe(tcEdgeWireB, faceB);
BRepAlgoAPI_Fuse final(bodyA, bodyB);
TopoDS_Shape result = final.Shape();
BRepTools::Write(result, "crossed_fibers.brep");
return 0;
}