20 auto invariants = std::make_shared<invariants::InvariantCollection>(m);
28 const std::vector<std::shared_ptr<const operations::BaseSplitNewAttributeStrategy>>&
32 std::integral_constant<int64_t, 1>{},
40 auto cache = visitor.take_cache();
43 auto update_attributes = [&](
auto&& m) {
44 using T = std::remove_reference_t<decltype(m)>;
45 if constexpr (!std::is_const_v<T>) {
46 for (
const auto& split_ptr : new_attr_strategies) {
47 if (&m == &split_ptr->mesh()) {
48 split_ptr->update(m, cache, tuples);
62 const std::vector<std::shared_ptr<const operations::BaseSplitNewAttributeStrategy>>&
69 for (
const auto& c : candidates) {
70 if (return_data.has_variant(mesh, nsimplex)) {
72 [&mesh](
const auto& rt) -> std::vector<simplex::Simplex> {
74 return rt.new_vertices(mesh);
76 return {simplex::Simplex::vertex(mesh, rt.m_output_tuple)};
79 return_data.get_variant(mesh, nsimplex));
83 assert(return_data.has_variant(mesh, nsimplex));
void run_on_nodes(NodeFunctor &&node_functor)
void run_on_edges(EdgeFunctor &&edge_functor)
void execute_from_root(Mesh &mesh, const simplex::NavigatableSimplex &simplex)
OperationInOutData extract_operation_in_out(const CollapseReturnData &return_data)
MultiMeshVisitor(NodeFunctor &&) -> MultiMeshVisitor< NodeFunctor >
SplitReturnData multi_mesh_edge_split(Mesh &mesh, const simplex::NavigatableSimplex &t, const std::vector< std::shared_ptr< const operations::BaseSplitNewAttributeStrategy >> &new_attr_strategies)
std::shared_ptr< invariants::InvariantCollection > multimesh_edge_split_invariants(const Mesh &m)
std::vector< simplex::Simplex > multi_mesh_edge_split_with_modified_simplices(Mesh &mesh, const simplex::Simplex &simplex, const std::vector< std::shared_ptr< const operations::BaseSplitNewAttributeStrategy >> &new_attr_strategies)
wmtk::multimesh::operations::SplitReturnData SplitReturnData
void top_dimension_cofaces(const Simplex &simplex, SimplexCollection &simplex_collection, const bool sort_and_clean)
Get all top dimension cofaces of the given simplex.