11 namespace operations::utils {
12 class MultiMeshEdgeSplitFunctor;
13 class MultiMeshEdgeCollapseFunctor;
14 class UpdateEdgeOperationMultiMeshMapFunctor;
25 template <
typename U,
typename MeshType,
int Dim>
42 bool is_ccw(
const Tuple& tuple)
const final override;
49 Eigen::Ref<const RowVectors3l> FV,
50 Eigen::Ref<const RowVectors3l> FE,
51 Eigen::Ref<const RowVectors3l> FF,
52 Eigen::Ref<const VectorXl> VF,
53 Eigen::Ref<const VectorXl> EF);
54 void initialize(Eigen::Ref<const RowVectors3l> F,
bool make_free =
false);
97 std::unique_ptr<attribute::Accessor<int64_t, TriMesh>>
m_vf_accessor =
nullptr;
98 std::unique_ptr<attribute::Accessor<int64_t, TriMesh>>
m_ef_accessor =
nullptr;
99 std::unique_ptr<attribute::Accessor<int64_t, TriMesh>>
m_fv_accessor =
nullptr;
100 std::unique_ptr<attribute::Accessor<int64_t, TriMesh>>
m_fe_accessor =
nullptr;
101 std::unique_ptr<attribute::Accessor<int64_t, TriMesh>>
m_ff_accessor =
nullptr;
142 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
virtual bool is_valid(const Tuple &tuple) const
check validity of tuple including its hash
std::vector< std::vector< TypedAttributeHandle< int64_t > > > connectivity_attributes() const override
Returns a vector of vectors of attribute handles.
Tuple switch_face(const Tuple &tuple) const
Tuple face_tuple_from_id(int64_t id) const
Tuple switch_tuple(const Tuple &tuple, PrimitiveType type) const final override
switch the orientation of the Tuple of the given dimension
int64_t id_face(const Tuple &tuple) const
bool is_boundary_vertex(const Tuple &tuple) const
attribute::TypedAttributeHandle< int64_t > m_vf_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
TriMesh & operator=(const TriMesh &o)=delete
std::unique_ptr< attribute::Accessor< int64_t, TriMesh > > m_ef_accessor
int64_t id_vertex(const Tuple &tuple) const
bool is_boundary(const simplex::Simplex &tuple) const
check if a simplex lies on a boundary or not
bool is_valid(const Tuple &tuple) const final override
check validity of tuple including its hash
Tuple vertex_tuple_from_id(int64_t id) const
bool is_connectivity_valid() const final override
Tuple tuple_from_global_ids(int64_t fid, int64_t eid, int64_t vid) const
void make_cached_accessors()
std::unique_ptr< attribute::Accessor< int64_t, TriMesh > > m_fe_accessor
std::unique_ptr< attribute::Accessor< int64_t, TriMesh > > m_fv_accessor
int64_t id_edge(const Tuple &tuple) const
void initialize_free(int64_t count)
Tuple switch_edge(const Tuple &tuple) const
static Tuple with_different_cid(const Tuple &t, int64_t cid)
void initialize(Eigen::Ref< const RowVectors3l > FV, Eigen::Ref< const RowVectors3l > FE, Eigen::Ref< const RowVectors3l > FF, Eigen::Ref< const VectorXl > VF, Eigen::Ref< const VectorXl > EF)
attribute::TypedAttributeHandle< int64_t > m_ff_handle
attribute::TypedAttributeHandle< int64_t > m_ef_handle
std::unique_ptr< attribute::Accessor< int64_t, TriMesh > > m_ff_accessor
bool is_boundary_edge(const Tuple &tuple) const
bool is_ccw(const Tuple &tuple) const final override
TODO this needs dimension?
attribute::TypedAttributeHandle< int64_t > m_fv_handle
Tuple switch_vertex(const Tuple &tuple) const
TriMesh(const TriMesh &o)=delete
Tuple edge_tuple_from_id(int64_t id) const
std::vector< Tuple > orient_vertices(const Tuple &t) const override
std::unique_ptr< attribute::Accessor< int64_t, TriMesh > > m_vf_accessor
attribute::TypedAttributeHandle< int64_t > m_fe_handle
A CachingAccessor that uses tuples for accessing attributes instead of indices.
Handle that represents attributes for some mesh.