Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
MeshBoundarySegment.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_MeshBoundarySegment_H_
9#define model_MeshBoundarySegment_H_
10
11#include <iomanip>
12#include <cfloat>
13#include <set>
14#include <Eigen/Dense>
15#include <FiniteLineSegment.h>
16#include <Polyhedron.h>
19
20namespace model
21{
25 template <int dim>
27 {
28
29 public:
30 typedef Eigen::Matrix<double,dim,1> VectorDim;
32 typedef Polyhedron<dim,dim-1> PlanarMeshFaceType;
33 typedef std::set<const Polyhedron<dim,dim-1>*> FaceContainerType;
34
35 private:
36
37 static VectorDim getBoundaryNormal(const FaceContainerType& fcs);
38
39 public:
40
43
45 const VectorDim& p1,
46 const PlanarMeshFaceType* const face);
47
49 const VectorDim& p1,
50 const FaceContainerType& faces_in);
51
53 VectorDim regionBoundaryNormal(const int& k) const;
54
55
56 };
57
58 template <int dim,class T>
60 {
61 os<<std::setprecision(15)<<std::scientific<<seg.P0.transpose()<<","<<seg.P1.transpose()<<"\n";
62 return os;
63 }
64
65
66 template <int dim>
67 struct BoundingMeshSegments : public std::vector<std::shared_ptr<MeshBoundarySegment<dim>>>
68 {
69
70
71 typedef Eigen::Matrix<double,dim,1> VectorDim;
72 typedef Eigen::Matrix<double,dim,dim> MatrixDim;
75 typedef std::vector<std::shared_ptr<MeshBoundarySegment<dim>>> MeshBoundarySegmentContainerType;
76
79 const size_t& rID,
80 const Plane<dim>& plane);
81 std::set<const MeshBoundarySegment<dim>*> containingSegments(const VectorDim& P) const;
82 bool contains(const VectorDim& P) const;
85
86 };
87
88 template <int dim,class T>
90 {
91 for(const auto& seg : bls)
92 {
93 os<<*seg;
94 }
95 return os;
96 }
97
98
99}
100#endif
Class template representing a straight line at the intersection of PlanarMeshFaces.
Eigen::Matrix< double, dim, 1 > VectorDim
std::set< const Polyhedron< dim, dim-1 > * > FaceContainerType
VectorDim regionBoundaryNormal(const int &k) const
const FaceContainerType faces
MeshBoundarySegment(const VectorDim &p0, const VectorDim &p1, const PlanarMeshFaceType *const face)
MeshBoundarySegment(const VectorDim &p0, const VectorDim &p1, const FaceContainerType &faces_in)
FiniteLineSegment< dim > FiniteLineSegmentType
Polyhedron< dim, dim-1 > PlanarMeshFaceType
T & operator<<(T &os, const PeriodicPlanePatchIO< dim > &ds)
Eigen::Matrix< double, dim, 1 > VectorDim
std::vector< std::shared_ptr< MeshBoundarySegment< dim > > > MeshBoundarySegmentContainerType
MeshBoundarySegment< dim > MeshBoundarySegmentType
bool contains(const VectorDim &P) const
const BoundingMeshSegments< dim > & boundingBoxSegments() const
MeshBoundarySegmentType::FaceContainerType FaceContainerType
Eigen::Matrix< double, dim, dim > MatrixDim
std::set< const MeshBoundarySegment< dim > * > containingSegments(const VectorDim &P) const
FiniteLineSegment(const VectorDim &p0, const VectorDim &p1)
vertex p1
int k