Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/misc/brepsamples/crossed_fibers.cpp
3196 views
1
// compilation: just include all occ-headers and link against all occ-libs
2
3
#include "occheaders.h"
4
5
int main()
6
{
7
double x = 0.50;
8
double y = 1.0 - sqrt(1.0 - x*x);
9
10
// First body:
11
//=============
12
13
// make a circle:
14
gp_Pnt circleCenterA(0, 0, 0);
15
gp_Dir circleNormalA(1, 0, 0);
16
gp_Ax1 circleAxisA(circleCenterA, circleNormalA);
17
Standard_Real circleRadiusA = 0.05;
18
19
gp_Circ circleA;
20
circleA.SetLocation(circleCenterA);
21
circleA.SetRadius(circleRadiusA);
22
circleA.SetAxis(circleAxisA);
23
24
Handle_Geom_Circle geomCircleA = GC_MakeCircle(circleA);
25
TopoDS_Edge circleEdgeA = BRepBuilderAPI_MakeEdge(geomCircleA);
26
TopoDS_Wire circleEdgeWireA = BRepBuilderAPI_MakeWire(circleEdgeA);
27
TopoDS_Face faceA = BRepBuilderAPI_MakeFace(circleEdgeWireA);
28
29
// make a wire path for sweep:
30
gp_Pnt p1A(-x, y, 0);
31
gp_Pnt p2A( x, y, 0);
32
33
Handle(Geom_TrimmedCurve) tcA = GC_MakeArcOfCircle(p1A, circleCenterA, p2A);
34
TopoDS_Edge tcEdgeA = BRepBuilderAPI_MakeEdge(tcA);
35
TopoDS_Wire tcEdgeWireA = BRepBuilderAPI_MakeWire(tcEdgeA);
36
37
TopoDS_Shape bodyA = BRepOffsetAPI_MakePipe(tcEdgeWireA, faceA);
38
39
// Second body:
40
//==============
41
42
// make a circle:
43
gp_Pnt circleCenterB(0, 0.06, 0);
44
gp_Dir circleNormalB(0, 0, 1);
45
gp_Ax1 circleAxisB(circleCenterB, circleNormalB);
46
Standard_Real circleRadiusB = 0.05;
47
48
gp_Circ circleB;
49
circleB.SetLocation(circleCenterB);
50
circleB.SetRadius(circleRadiusB);
51
circleB.SetAxis(circleAxisB);
52
53
Handle_Geom_Circle geomCircleB = GC_MakeCircle(circleB);
54
TopoDS_Edge circleEdgeB = BRepBuilderAPI_MakeEdge(geomCircleB);
55
TopoDS_Wire circleEdgeWireB = BRepBuilderAPI_MakeWire(circleEdgeB);
56
TopoDS_Face faceB = BRepBuilderAPI_MakeFace(circleEdgeWireB);
57
58
// make a wire path for sweep:
59
gp_Pnt p1B(0, 0.06 - y, -x);
60
gp_Pnt p2B(0, 0.06 - y, x);
61
62
Handle(Geom_TrimmedCurve) tcB = GC_MakeArcOfCircle(p1B, circleCenterB, p2B);
63
TopoDS_Edge tcEdgeB = BRepBuilderAPI_MakeEdge(tcB);
64
TopoDS_Wire tcEdgeWireB = BRepBuilderAPI_MakeWire(tcEdgeB);
65
66
TopoDS_Shape bodyB = BRepOffsetAPI_MakePipe(tcEdgeWireB, faceB);
67
68
// fuse:
69
BRepAlgoAPI_Fuse final(bodyA, bodyB);
70
TopoDS_Shape result = final.Shape();
71
72
// write body to brep file:
73
BRepTools::Write(result, "crossed_fibers.brep");
74
75
return 0;
76
}
77
78