8 namespace operations::utils {
9 class MultiMeshEdgeSplitFunctor;
10 class MultiMeshEdgeCollapseFunctor;
11 class UpdateEdgeOperationMultiMeshMapFunctor;
20 template <
typename U,
typename MeshType,
int Dim>
30 bool is_ccw(
const Tuple& tuple)
const final override;
40 Eigen::Ref<const RowVectors4l> TV,
41 Eigen::Ref<const RowVectors6l> TE,
42 Eigen::Ref<const RowVectors4l> TF,
43 Eigen::Ref<const RowVectors4l> TT,
44 Eigen::Ref<const VectorXl> VT,
45 Eigen::Ref<const VectorXl> ET,
46 Eigen::Ref<const VectorXl> FT);
87 class TetMeshOperationExecutor;
152 default: assert(
false);
A Curiously Recurring Template Pattern shim to enable generic specialization of functions.
int64_t id(const Tuple &tuple, PrimitiveType type) const
return the global id of the Tuple of the given dimension
bool is_boundary(const simplex::Simplex &tuple) const
check if a simplex lies on a boundary or not
TypedAttributeHandle< int64_t > m_tt_handle
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_tv_accessor
TetMesh & operator=(const TetMesh &o)=delete
TetMesh(const TetMesh &o)=delete
TypedAttributeHandle< int64_t > m_vt_handle
Tuple tuple_from_id(const PrimitiveType type, const int64_t gid) const final override
internal function that returns the tuple of requested type, and has the global index cid
Tuple switch_edge(const Tuple &tuple) const
int64_t id_face(const Tuple &tuple) const
bool is_boundary_vertex(const Tuple &tuple) const
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_et_accessor
void make_cached_accessors()
std::vector< std::vector< TypedAttributeHandle< int64_t > > > connectivity_attributes() const final override
Returns a vector of vectors of attribute handles.
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_tt_accessor
Tuple switch_tuple(const Tuple &tuple, PrimitiveType type) const final override
switch the orientation of the Tuple of the given dimension
Tuple tuple_from_global_ids(int64_t tid, int64_t fid, int64_t eid, int64_t vid) const
bool is_boundary(const simplex::Simplex &tuple) const
check if a simplex lies on a boundary or not
TypedAttributeHandle< int64_t > m_tv_handle
bool is_boundary_edge(const Tuple &tuple) const
Tuple edge_tuple_from_id(int64_t id) const
Tuple switch_face(const Tuple &tuple) const
Tuple face_tuple_from_id(int64_t id) const
void initialize_free(int64_t count)
Tuple switch_vertex(const Tuple &tuple) const
Tuple tet_tuple_from_id(int64_t id) const
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_tf_accessor
TypedAttributeHandle< int64_t > m_tf_handle
bool is_ccw(const Tuple &tuple) const final override
TODO this needs dimension?
int64_t id_tet(const Tuple &tuple) const
Tuple vertex_tuple_from_id(int64_t id) const
int64_t id_vertex(const Tuple &tuple) const
int64_t id_edge(const Tuple &tuple) const
void initialize(Eigen::Ref< const RowVectors4l > TV, Eigen::Ref< const RowVectors6l > TE, Eigen::Ref< const RowVectors4l > TF, Eigen::Ref< const RowVectors4l > TT, Eigen::Ref< const VectorXl > VT, Eigen::Ref< const VectorXl > ET, Eigen::Ref< const VectorXl > FT)
Tuple switch_tetrahedron(const Tuple &tuple) const
TypedAttributeHandle< int64_t > m_te_handle
bool is_connectivity_valid() const final override
TypedAttributeHandle< int64_t > m_et_handle
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_ft_accessor
TypedAttributeHandle< int64_t > m_ft_handle
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_vt_accessor
std::unique_ptr< attribute::Accessor< int64_t, TetMesh > > m_te_accessor
bool is_valid(const Tuple &tuple) const final override
check validity of tuple including its hash
bool is_boundary_face(const Tuple &tuple) const
std::vector< Tuple > orient_vertices(const Tuple &t) const override
A CachingAccessor that uses tuples for accessing attributes instead of indices.
Handle that represents attributes for some mesh.