6namespace wmtk::simplex {
25 const std::vector<Vertex>&
vertices()
const;
26 const std::vector<Edge>& edges()
const;
27 const std::vector<Face>& faces()
const;
28 const std::vector<Tet>& tets()
const;
30 void reserve_vertices(
size_t new_capacity) { m_v.reserve(new_capacity); }
31 void reserve_edges(
size_t new_capacity) { m_e.reserve(new_capacity); }
32 void reserve_faces(
size_t new_capacity) { m_f.reserve(new_capacity); }
33 void reserve_tets(
size_t new_capacity) { m_t.reserve(new_capacity); }
41 void add(
const Edge& s) { m_e.emplace_back(s); }
42 void add(
const Face& s) { m_f.emplace_back(s); }
43 void add(
const Tet& s) { m_t.emplace_back(s); }
65 void add(
const SimplexCollection& simplex_collection);
79 assert(std::is_sorted(m_v.begin(), m_v.end()));
80 return std::binary_search(m_v.begin(), m_v.end(), simplex);
84 assert(std::is_sorted(m_e.begin(), m_e.end()));
85 return std::binary_search(m_e.begin(), m_e.end(), simplex);
87 bool contains(
const Face& simplex)
const
89 assert(std::is_sorted(m_f.begin(), m_f.end()));
90 return std::binary_search(m_f.begin(), m_f.end(), simplex);
92 bool contains(
const Tet& simplex)
const
94 assert(std::is_sorted(m_t.begin(), m_t.end()));
95 return std::binary_search(m_t.begin(), m_t.end(), simplex);
104 const SimplexCollection& collection_a,
105 const SimplexCollection& collection_b);
113 const SimplexCollection& collection_a,
114 const SimplexCollection& collection_b);
122 const SimplexCollection& collection_a,
123 const SimplexCollection& collection_b);
131 std::vector<Face> faces_with_edge(
const Edge& e)
const;
134 bool empty()
const {
return size() == 0; }
136 bool operator==(
const SimplexCollection& that)
const;
137 bool operator!=(
const SimplexCollection& that)
const;
140 std::vector<Vertex> m_v;
141 std::vector<Edge> m_e;
142 std::vector<Face> m_f;
143 std::vector<Tet> m_t;
149 const auto& v = simplex.vertices();
153 if constexpr (N == 1) {
155 }
else if constexpr (N == 2) {
156 sc.m_v.emplace_back(
Vertex(v[0]));
157 sc.m_v.emplace_back(
Vertex(v[1]));
158 }
else if constexpr (N == 3) {
159 sc.m_v.emplace_back(
Vertex(v[0]));
160 sc.m_v.emplace_back(
Vertex(v[1]));
161 sc.m_v.emplace_back(
Vertex(v[2]));
162 sc.m_e.emplace_back(
Edge(v[0], v[1]));
163 sc.m_e.emplace_back(
Edge(v[0], v[2]));
164 sc.m_e.emplace_back(
Edge(v[1], v[2]));
166 static_assert(N == 4);
168 sc.m_v.emplace_back(
Vertex(v[0]));
169 sc.m_v.emplace_back(
Vertex(v[1]));
170 sc.m_v.emplace_back(
Vertex(v[2]));
171 sc.m_v.emplace_back(
Vertex(v[3]));
172 sc.m_e.emplace_back(
Edge(v[0], v[1]));
173 sc.m_e.emplace_back(
Edge(v[0], v[2]));
174 sc.m_e.emplace_back(
Edge(v[0], v[3]));
175 sc.m_e.emplace_back(
Edge(v[1], v[2]));
176 sc.m_e.emplace_back(
Edge(v[1], v[3]));
177 sc.m_e.emplace_back(
Edge(v[2], v[3]));
178 sc.m_f.emplace_back(
Face(v[0], v[1], v[2]));
179 sc.m_f.emplace_back(
Face(v[0], v[1], v[3]));
180 sc.m_f.emplace_back(
Face(v[0], v[2], v[3]));
181 sc.m_f.emplace_back(
Face(v[1], v[2], v[3]));
Definition Simplex.hpp:46
Definition Simplex.hpp:57
Definition SimplexCollection.hpp:9
void add_with_faces(const Edge &s)
Add the simplex and its faces to the collection.
Definition SimplexCollection.hpp:49
static bool are_simplex_collections_equal(const SimplexCollection &collection_a, const SimplexCollection &collection_b)
Check if the two simplex collections are equal.
Definition SimplexCollection.cpp:92
static SimplexCollection get_union(const SimplexCollection &collection_a, const SimplexCollection &collection_b)
Get union of two simplex collections.
Definition SimplexCollection.cpp:48
void add(const Vertex &s)
Add simplex to the collection.
Definition SimplexCollection.hpp:40
static SimplexCollection faces_from_simplex(const Simplex< N > &simplex)
Get all faces of the simplex.
Definition SimplexCollection.hpp:147
static SimplexCollection get_intersection(const SimplexCollection &collection_a, const SimplexCollection &collection_b)
Get intersection of two simplex collections.
Definition SimplexCollection.cpp:70
const std::vector< Vertex > & vertices() const
Return const reference to the Simplex vector.
Definition SimplexCollection.cpp:7
void sort_and_clean()
Sort simplex vector and remove duplicates.
Definition SimplexCollection.cpp:35
bool contains(const Vertex &simplex) const
Check if simplex is contained in collection.
Definition SimplexCollection.hpp:77
Definition Simplex.hpp:17
Definition Simplex.hpp:37