Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/meshgen2d/src/include/Border.h
3203 views
1
#if !defined( MESH_BORDER_H )
2
#define MESH_BORDER_H
3
4
#include <vector>
5
#include "Loop.h"
6
7
class Border
8
{
9
public:
10
Border( const int loopCount )
11
{
12
loops.reserve( loopCount );
13
for( int i = 0; i < loopCount; ++i )
14
{
15
loops.push_back( new Loop );
16
}
17
}
18
void addLoopEdge( const int loopTag, const int direction, GeometryEdge *ed )
19
{
20
loops[loopTag]->addEdge( direction, ed );
21
}
22
23
void collectNodes( std::vector< Node * >& chain)
24
{
25
int loopCount = loops.size();
26
for( int i = 0; i < loopCount; ++i )
27
{
28
loops[i]->collectNodes( chain );
29
}
30
}
31
32
void collectNodesAndPairs( std::vector< Node * >& chain, std::set< std::pair< int, int > >& links )
33
{
34
int loopCount = loops.size();
35
for( int i = 0; i < loopCount; ++i )
36
{
37
loops[i]->collectNodesAndPairs( chain, links );
38
}
39
}
40
41
void collectGeometryNodes( std::vector< GeometryNode * >& chain )
42
{
43
int loopCount = loops.size();
44
for( int i = 0; i < loopCount; ++i )
45
{
46
loops[i]->collectGeometryNodes( chain );
47
}
48
}
49
50
void collectGeometryEdges( std::vector< GeometryEdge* >& eds, std::vector<int> &dirs )
51
{
52
for (int i = 0; i < loops.size(); i++)
53
{
54
eds.insert(eds.end(), loops[i]->edges.begin(), loops[i]->edges.end());
55
dirs.insert(dirs.end(), loops[i]->direction.begin(), loops[i]->direction.end());
56
}
57
}
58
59
void collectBoundaryElements( std::vector< BoundaryElement * >& chain )
60
{
61
int loopCount = loops.size();
62
for( int i = 0; i < loopCount; ++i )
63
{
64
loops[i]->collectBoundaryElements( chain );
65
}
66
}
67
68
void copyLoop( std::vector< GeometryNode * >& nds, std::vector< GeometryEdge* >& eds, std::vector<int> &dirs)
69
{
70
nds = loops[0]->nodes;
71
eds = loops[0]->edges;
72
dirs = loops[0]->direction;
73
}
74
75
void copyLoops( std::vector< GeometryNode * >& nds, std::vector< GeometryEdge* >& eds, std::vector<int> &dirs)
76
{
77
for (int i = 0; i < loops.size(); i++)
78
{
79
nds.insert(nds.end(), loops[i]->nodes.begin(), loops[i]->nodes.end());
80
eds.insert(eds.end(), loops[i]->edges.begin(), loops[i]->edges.end());
81
dirs.insert(dirs.end(), loops[i]->direction.begin(), loops[i]->direction.end());
82
}
83
}
84
85
protected:
86
std::vector< Loop * > loops;
87
};
88
#endif /* MESH_BORDER_H */
89
90