Wildmeshing Toolkit
Loading...
Searching...
No Matches
RawSimplex.hpp
1#pragma once
2
3#include <algorithm>
4#include <array>
5#include <cstdarg>
6#include <initializer_list>
7#include <iterator>
8#include <vector>
9
10namespace wmtk::simplex {
11
15template <int N>
17{
18public:
19 RawSimplex() = default;
20 RawSimplex(std::array<size_t, N>&& vertices)
21 : m_vertices{std::move(vertices)}
22 {
23 std::sort(m_vertices.begin(), m_vertices.end());
24 }
25
26 RawSimplex& operator=(const RawSimplex& o) = default;
27 bool operator==(const RawSimplex& o) const { return m_vertices == o.m_vertices; }
28 bool operator<(const RawSimplex& o) const { return m_vertices < o.m_vertices; }
29
30 const std::array<size_t, N>& vertices() const { return m_vertices; }
31
32protected:
33 std::array<size_t, N> m_vertices;
34};
35
36class Vertex : public RawSimplex<1>
37{
38public:
39 Vertex() = default;
40 Vertex(size_t v0);
41 Vertex(const Vertex& o) = default;
42 size_t id() const { return vertices()[0]; }
43};
44
45class Edge : public RawSimplex<2>
46{
47public:
48 Edge() = default;
49 Edge(size_t v0, size_t v1);
50 Edge(const Edge&) = default;
51
52 Vertex opposite_vertex(const size_t excluded_id) const;
53 Vertex opposite_vertex(const Vertex& v) const;
54};
55
56class Face : public RawSimplex<3>
57{
58public:
59 Face() = default;
60 Face(size_t v0, size_t v1, size_t v2);
61 Face(const Edge& e, size_t v2);
62 Face(const Face&) = default;
63
64 Edge opposite_edge(const int64_t excluded_id) const;
65 Edge opposite_edge(const Vertex& v) const;
66 Vertex opposite_vertex(const Edge& e) const;
67 bool contains(const Edge& e) const;
68};
69
70class Tet : public RawSimplex<4>
71{
72public:
73 Tet() = default;
74 Tet(size_t v0, size_t v1, size_t v2, size_t v3);
75 Tet(const Face& f, size_t v3);
76 Tet(const Tet&) = default;
77
78 Face opposite_face(const int64_t excluded_id) const;
79 Face opposite_face(const Vertex& v) const;
80 Edge opposite_edge(const Edge& e) const;
81 Vertex opposite_vertex(const Face& f) const;
82};
83
84} // namespace wmtk::simplex
Definition RawSimplex.hpp:46
Definition RawSimplex.hpp:57
Definition RawSimplex.hpp:17
Definition RawSimplex.hpp:71
Definition RawSimplex.hpp:37