Wildmeshing Toolkit
Loading...
Searching...
No Matches
EdgeMesh.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Core>
5#include "MeshCRTP.hpp"
6#include "Tuple.hpp"
7
8namespace wmtk {
9
10namespace operations::utils {
11class MultiMeshEdgeSplitFunctor;
12class MultiMeshEdgeCollapseFunctor;
13class UpdateEdgeOperationMultiMeshMapFunctor;
14} // namespace operations::utils
15class EdgeMesh : public MeshCRTP<EdgeMesh>
16{
17public:
18 friend class MeshCRTP<EdgeMesh>;
19 template <typename U, typename MeshType, int Dim>
20 friend class attribute::Accessor;
24 EdgeMesh();
25 ~EdgeMesh() override;
26 EdgeMesh(const EdgeMesh& o) = delete;
27 EdgeMesh(EdgeMesh&& o) = default;
28 EdgeMesh& operator=(const EdgeMesh& o) = delete;
29 EdgeMesh& operator=(EdgeMesh&& o) = default;
30
31 Tuple switch_tuple(const Tuple& tuple, PrimitiveType type) const override;
32
33 bool is_ccw(const Tuple& tuple) const override;
35 bool is_boundary(PrimitiveType, const Tuple& tuple) const override;
36 bool is_boundary_vertex(const Tuple& tuple) const;
37
38
39 void initialize(Eigen::Ref<const RowVectors2l> E, bool is_free = false);
40 void initialize_free(int64_t count);
41
42 void initialize(
43 Eigen::Ref<const RowVectors2l> EV,
44 Eigen::Ref<const RowVectors2l> EE,
45 Eigen::Ref<const VectorXl> VE);
46
47 bool is_valid(const Tuple& tuple) const final override;
48
49 bool is_connectivity_valid() const override;
50
51 std::vector<std::vector<TypedAttributeHandle<int64_t>>> connectivity_attributes()
52 const override;
53
54
55 Tuple switch_vertex(const Tuple& tuple) const;
56 Tuple switch_edge(const Tuple& tuple) const;
57
58 std::vector<Tuple> orient_vertices(const Tuple& tuple) const override;
59 int64_t id(const Tuple& tuple, PrimitiveType type) const;
60 using MeshCRTP<EdgeMesh>::id; // getting the (simplex) prototype
61
62 int64_t id_vertex(const Tuple& tuple) const { return id(tuple, PrimitiveType::Vertex); }
63 int64_t id_edge(const Tuple& tuple) const { return id(tuple, PrimitiveType::Edge); }
64
65protected:
73 Tuple tuple_from_id(const PrimitiveType type, const int64_t gid) const override;
74
75 Tuple tuple_from_global_ids(int64_t eid, int64_t vid) const;
76
77protected:
79
82
83 Tuple vertex_tuple_from_id(int64_t id) const;
84 Tuple edge_tuple_from_id(int64_t id) const;
85
86 // internal structure that encapsulations the actual execution of split and collapse
88};
89
90inline Tuple EdgeMesh::switch_vertex(const Tuple& tuple) const
91{
93}
94inline Tuple EdgeMesh::switch_edge(const Tuple& tuple) const
95{
96 return switch_tuple(tuple, PrimitiveType::Edge);
97}
98inline int64_t EdgeMesh::id(const Tuple& tuple, PrimitiveType type) const
99{
100 switch (type) {
103 create_const_accessor<int64_t>(m_ev_handle);
104 auto ev = ev_accessor.const_vector_attribute<2>(tuple);
105 return ev(tuple.local_vid());
106 }
107 case PrimitiveType::Edge: {
108 return tuple.global_cid();
109 }
112 default: assert(false); // "Tuple id: Invalid primitive type")
113 }
114
115 return -1;
116}
117} // namespace wmtk
Tuple switch_edge(const Tuple &tuple) const
Definition EdgeMesh.hpp:94
attribute::TypedAttributeHandle< int64_t > m_ee_handle
Definition EdgeMesh.hpp:81
Tuple tuple_from_global_ids(int64_t eid, int64_t vid) const
Definition EdgeMesh.cpp:196
Tuple switch_vertex(const Tuple &tuple) const
Definition EdgeMesh.hpp:90
int64_t id_edge(const Tuple &tuple) const
Definition EdgeMesh.hpp:63
bool is_boundary(PrimitiveType, const Tuple &tuple) const override
check if a simplex (encoded as a tuple/primitive pair) lies on a boundary or not
Definition EdgeMesh.cpp:17
int64_t id(const Tuple &tuple, PrimitiveType type) const
Definition EdgeMesh.hpp:98
bool is_connectivity_valid() const override
Definition EdgeMesh.cpp:236
Tuple switch_tuple(const Tuple &tuple, PrimitiveType type) const override
switch the orientation of the Tuple of the given dimension
Definition EdgeMesh.cpp:38
bool is_boundary_vertex(const Tuple &tuple) const
Definition EdgeMesh.cpp:31
void initialize_free(int64_t count)
Definition EdgeMesh.cpp:141
Tuple tuple_from_id(const PrimitiveType type, const int64_t gid) const override
internal function that returns the tuple of requested type, and has the global index cid
Definition EdgeMesh.cpp:148
Tuple edge_tuple_from_id(int64_t id) const
Definition EdgeMesh.cpp:188
std::vector< Tuple > orient_vertices(const Tuple &tuple) const override
Definition EdgeMesh.cpp:293
attribute::TypedAttributeHandle< int64_t > m_ev_handle
Definition EdgeMesh.hpp:80
EdgeMesh & operator=(const EdgeMesh &o)=delete
Tuple vertex_tuple_from_id(int64_t id) const
Definition EdgeMesh.cpp:171
bool is_ccw(const Tuple &tuple) const override
TODO this needs dimension?
Definition EdgeMesh.cpp:92
EdgeMesh & operator=(EdgeMesh &&o)=default
int64_t id_vertex(const Tuple &tuple) const
Definition EdgeMesh.hpp:62
attribute::TypedAttributeHandle< int64_t > m_ve_handle
Definition EdgeMesh.hpp:78
~EdgeMesh() override
void initialize(Eigen::Ref< const RowVectors2l > E, bool is_free=false)
Definition EdgeMesh.cpp:132
EdgeMesh(const EdgeMesh &o)=delete
bool is_valid(const Tuple &tuple) const final override
check validity of tuple including its hash
Definition EdgeMesh.cpp:214
EdgeMesh(EdgeMesh &&o)=default
std::vector< std::vector< TypedAttributeHandle< int64_t > > > connectivity_attributes() const override
Returns a vector of vectors of attribute handles.
Definition EdgeMesh.cpp:282
A Curiously Recurring Template Pattern shim to enable generic specialization of functions.
Definition MeshCRTP.hpp:24
bool is_free() const
Definition Mesh.hpp:973
bool is_boundary(const simplex::Simplex &tuple) const
check if a simplex lies on a boundary or not
Definition Mesh.cpp:107
The Tuple is the basic navigation tool in our mesh data structure.
Definition Tuple.hpp:19
int8_t local_vid() const
Definition Tuple.hxx:52
int64_t global_cid() const
Definition Tuple.hxx:47
A CachingAccessor that uses tuples for accessing attributes instead of indices.
Definition Accessor.hpp:28
ConstMapResult< D > const_vector_attribute(const ArgType &t) const
Handle that represents attributes for some mesh.