|
|
FaceSnapshot | face_snapshot (const size_t fid) const |
| |
|
void | restore_face (const size_t fid, const FaceSnapshot &s) |
| |
| void | set_vertex_position (const size_t vid, const Vector3d &p) |
| | Place a vertex, keeping its exact and rounded coordinates in step.
|
| |
| bool | cell_in_region (const size_t tid) const |
| | Whether tet tid belongs to the closed offset region, read from its TAGS.
|
| |
|
bool | face_is_offset (const size_t fid) const |
| | Whether face fid is on the offset boundary (as opposed to the input complex).
|
| |
|
bool | face_is_input (const size_t fid) const |
| | Whether face fid carries input-complex geometry.
|
| |
|
| TopoOffsetTetMesh (Parameters &_m_offset_params, int _num_threads=0) |
| |
| double | cell_quality (const size_t tid) const override |
| | The quality of cell tid, and how to write it.
|
| |
| void | set_cell_quality (const size_t tid, const double q) override |
| |
| std::shared_ptr< SampleEnvelope > | surface_envelope_for_face (const std::array< size_t, 3 > &vids) const override |
| | Only the input complex is envelope-constrained.
|
| |
| bool | allow_surface_swap () const override |
| |
| bool | check_surface_topology () const override |
| |
| std::shared_ptr< SampleEnvelope > | smoothing_energy_envelope (const size_t) const override |
| |
| void | write_optimization_debug_output (const std::string &path) override |
| |
| size_t | refine_sizing_around_worst (double) override |
| | The offset's sizing refinement, as the base's stall escape hatch.
|
| |
| bool | swap_before_interior (const std::vector< size_t > &tids) override |
| | Which tag the tets a swap creates should carry.
|
| |
| bool | swap_before_surface (const std::vector< size_t > &tids, size_t a, size_t b, size_t c, size_t d) override |
| |
| bool | swap_after_cells (const std::vector< size_t > &tids, bool is_surface_flip) override |
| | Propagate application data to the cells made by a successful topological swap.
|
| |
| bool | collapse_edge_before (const Tuple &t) override |
| | Collapse policy that is the offset's own.
|
| |
| bool | collapse_before_vertex (size_t v1, size_t v2, double edge_length) override |
| |
| bool | collapse_after_connectivity (size_t v1, size_t v2, const std::vector< std::array< size_t, 2 > > &boundary_edges) override |
| |
| bool | collapse_is_order_2_edge (const std::array< size_t, 2 > &e) override |
| |
| void | collapse_after_vertex (size_t v1, size_t v2) override |
| |
| bool | split_before_cells (const Tuple &edge, const std::vector< Tuple > &parents) override |
| | Split policy that is the offset's own.
|
| |
| bool | split_after_cells (size_t v1, size_t v2, size_t v_new, const std::vector< Tuple > &children) override |
| | Restore application cell data on the children made by a split.
|
| |
| void | split_after_vertex (size_t v_new, bool is_edge_open_boundary) override |
| | Application metadata not represented by the shared vertex attributes.
|
| |
| bool | is_open_boundary_edge (const Tuple &e) override |
| |
| void | init_from_image (const MatrixXd &V, const MatrixXi &T, const MatrixSi &T_tags, const MatrixXd &V_env, const MatrixXi F_env, const std::vector< std::string > &tag_names) |
| | initialize TetMesh from vertex, tet, and tag data
|
| |
|
void | init_surfaces_and_boundaries () |
| |
| bool | is_edge_on_input (const Tuple &loc) |
| |
|
bool | is_edge_on_offset (const Tuple &loc) |
| |
|
bool | ambient_assert () |
| | check that the ambient tag does not overlap with any other tags
|
| |
|
void | label_input_complex () |
| | label input simplicial complex simplices, as defined in m_offset_params.offset_selection
|
| |
|
bool | empty_input_complex () |
| | check if the input complex is empty. Only valid after calling init_from_image(...). Checks if any vertices (therefore any simplices) are labelled 1, if not returns true
|
| |
|
void | init_input_complex_bvh () |
| | initialize BVH for input complex. Must be called after init_from_image(...)
|
| |
| void | edge_split_binary_search (const size_t v1, const size_t v2, Vector3d &p_new) const |
| | split edge at point by minimizing m_offset_params.target_distance - d() (where d() is distance to input complex via BVH) along the edge. Uses binary search, so implicitly assumes distance field is monotonic along edge. May give weird results if not monotonic
|
| |
|
void | edge_split_binary_search (const Vector3d &v1_pos, const Vector3d &v2_pos, Vector3d &p_new) const |
| |
| void | edge_split_log_root_find (const size_t v1, const size_t v2, Vector3d &p_new) const |
| | uses custom root finding routine, attempting to find first root (nearest to v1) to split edge at
|
| |
|
void | edge_split_sphere_tracing (const size_t v1, const size_t v2, Vector3d &p_new) const |
| | split edge at first root of d(l) - d*, where d(l) is distance to input complex, using sphere tracing method. This is the best method and should be used instead of binary or log root finding methods
|
| |
|
size_t | flood_fill () |
| | label connected simplicial complex components (simplices labelled 1 or 2)
|
| |
|
std::vector< std::array< size_t, 3 > > | get_faces_by_condition (std::function< bool(const FaceAttributes &)> cond) const |
| |
| bool | split_edge_before (const Tuple &t) override |
| |
| bool | split_edge_after (const Tuple &t) override |
| | This function computes the attributes for the added simplices. User specified modifications and desideratas for after an edge split.
|
| |
|
bool | marching_split_edge_before (const Tuple &t) |
| |
| bool | marching_split_edge_after (const Tuple &t) |
| |
| bool | split_face_before (const Tuple &t) override |
| | User specified preparations and desideratas for a face split before changing the connectivity.
|
| |
| bool | split_face_after (const Tuple &t) override |
| | Compute the attributes for the added simplices.
|
| |
| bool | split_tet_before (const Tuple &t) override |
| | User specified preparations and desideratas for a tet split before changing the connectivity.
|
| |
| bool | split_tet_after (const Tuple &t) override |
| | Compute the attributes for the added simplices.
|
| |
| bool | invariants (const std::vector< Tuple > &tets) override |
| |
| bool | smooth_before (const Tuple &t) override |
| |
| bool | smooth_after (const Tuple &t) override |
| | User specified modifications and desideratas for after smoothing a vertex.
|
| |
|
void | execute_offset (const std::filesystem::path &output_file) |
| | main function from which all others are called
|
| |
| void | optimize_offset (const std::filesystem::path &output_file) |
| | optimize the offset
|
| |
|
bool | is_offset_face (const Tuple &f) const |
| | true if face f has exactly one incident tet labelled 2 (offset), i.e. it lies on the boundary between the offset region and the rest of the mesh
|
| |
|
bool | is_offset_face (const size_t fid) const |
| |
|
std::vector< Tuple > | get_offset_surface_faces_for_vertex (const Tuple &t) const |
| | offset-surface faces (see is_offset_face()) incident to vertex t
|
| |
| std::array< OffsetSurfaceSample, 4 > | offset_surface_samples (const Tuple &f) const |
| | the 4 offset-field samples for face f (centroid + one near each corner), following Quadrics.cpp's get_triangle_samples_and_area(). Shared by the Quadrics construction below and by the feature-preserving checks in Collapse.cpp – a single centroid sample cannot tell a locally-flat patch from one straddling a sharp feature of the input complex, since a single BVH nearest-point query just picks whichever side of the feature is closer.
|
| |
| bool | smooth_after_offset_surface (const Tuple &t) |
| | quadrics-based smoothing step for offset surface vertices: blends a Laplacian step with a projection onto quadrics built from target_distance-offset samples of the input complex, following https://github.com/wildmeshing/topological-offsets/blob/main/components/topological_offsets/wmtk/components/topological_offsets/internal/OffsetOptimization.cpp#L2226
|
| |
|
double | face_normal_deviation (const Tuple &f) const |
| | max angle (degrees, 0-90, orientation independent) between offset-surface face f's own normal and any of its offset_surface_samples() normals. Taking the max over all 4 samples (rather than a single centroid sample) is what makes this sensitive to features: a face straddling a sharp fold of the input complex will have samples on either side of the fold, so at least one of them disagrees strongly with the face's own (necessarily flat) normal, even though the face may look locally fine from any single sample alone.
|
| |
|
double | max_offset_surface_normal_deviation_at_vertex (size_t vid) const |
| | max face_normal_deviation() over the offset-surface faces incident to vertex vid
|
| |
|
double | collapse_normal_deviation (size_t v_from, size_t v_to, size_t remove_vid) const |
| | OffsetCollapseBeforeInvariant analogue: pools offset_surface_samples() normals from every offset-surface face incident to remove_vid and returns the spread (max - min, degrees, orientation dependent via normal_angle_180-style acos) of their angles to the collapsing edge's direction. A small spread means the samples around the survivor agree with each other relative to the edge, i.e. the edge runs along a locally flat/consistent part of the offset surface; a large spread means the true target-normal field disagrees with itself nearby – a sign of a feature edge – and collapsing there should be rejected. See https://github.com/wildmeshing/topological-offsets/blob/main/components/topological_offsets/wmtk/components/topological_offsets/internal/invariants/OffsetCollapseBeforeInvariant.cpp.
|
| |
| size_t | update_sizing_field () |
| | refine or coarsen the sizing field (VertexAttributes::m_sizing_scalar) based on the mean ratio metric of the offset triangulation (offset-class surface faces), following the reference's compute_target_edge_length(): for every vertex incident to at least one offset-surface face, take the worst (minimum) mean_ratio_metric() among those faces, and halve the sizing scalar if it is below m_offset_params.sizing_mrm_threshold, or multiply it by 1.5 (coarsen) if above – clamped to [m_offset_params.min_sizing_scalar, m_offset_params.max_sizing_scalar]. Vertices not incident to any offset-surface face are left untouched. The vertices actually refined this pass then seed wmtk::utils::gradation_smooth_sizing() (m_offset_params.sizing_gradation), matching SimWildMesh::gradation_smooth_sizing(), so a newly refined patch doesn't sit right next to an unrelated coarse one. Called once per optimize_offset() iteration, after smoothing.
|
| |
|
bool | offset_swap_normal_deviation_ok (const Tuple &face_abc, const Tuple &face_abd, size_t a, size_t b, size_t c, size_t d) const |
| | OffsetSwapInvariant analogue: for the offset-surface diagonal flip (a,b) -> (c,d) across the two current offset faces (a,b,c)/(a,b,d), reject only a regression – if the old diagonal (a,b) was already poorly aligned (spread >= m_offset_params.max_normal_deviation_deg) with the offset target-normal field sampled on both faces, the flip is not blocked on these grounds; if it was well aligned and the new diagonal (c,d) would not be, it is rejected. See https://github.com/wildmeshing/topological-offsets/blob/main/components/topological_offsets/wmtk/components/topological_offsets/internal/invariants/OffsetSwapInvariant.cpp.
|
| |
|
void | marching_tets () |
| | execute simplistic marching tets. All edges with one vertex labelled 0 and the other 1/2 are split. If m_edge_split_mode=BinarySearch, edges are split according to BVH distance field and the offset target distance (m_offset_params.target_distance). If m_edge_split_mode=Midpoint, edges are split at the midpoint
|
| |
|
bool | is_simplicially_embedded () const |
| | check if the input complex (simplices labelled 1) are simplicially embedded w.r.t. the entire mesh
|
| |
|
bool | tet_is_simp_emb (const Tuple &t) const |
| | check if a tet satisfies simpicial embedding criteria w.r.t. input complex (simplices labelled 1)
|
| |
|
void | simplicial_embedding () |
| | make mesh a simplicial embedding of the input complex (simplices labelled 1)
|
| |
|
bool | tag_tet_consistent_topology (size_t t_id, int64_t tag) const |
| | check if removing the tet would change the topology of any label
|
| |
|
bool | offset_tet_consistent_topology (const size_t t_id) const |
| | check if adding a tet to the offset region does not change the topology of the offset. Returns true if topology would not be changed
|
| |
|
bool | tet_is_in_offset_conservative (const size_t t_id, const double threshold_r) const |
| | check if a tet is inside the offset (implicitly defined via BVH distance field to input complex) via conservative sphere subdivision estimation
|
| |
|
bool | tet_is_in_offset_aggressive (const size_t t_id) const |
| | check if a tet is inside the offset (implicitly defined via BVH distance field to input complex) by check if all its vertices are inside the offset region.
|
| |
|
void | grow_offset_conservative () |
| | grow offset region conservatively using conservative checks while ensuring consistent topology
|
| |
|
void | grow_offset_aggressive () |
| | Grow offset region aggressively. A tet is considered in the offset if all its vertices are in the offset.
|
| |
|
void | set_offset_tet_tags () |
| | update 'tags' data for tets in the offset region (tets labelled 2) based on the given offset tag values in m_offset_params.offset_tag_value
|
| |
| bool | offset_is_manifold () |
| | verify that the closed offset region (simplices labelled 1 or 2) form a manifold region. This should be true for any offset. This function is for verification.
|
| |
|
void | write_input_complex (const std::string &path) |
| |
|
void | write_vtu (const std::string &path) |
| |
|
void | write_msh_groups (const std::string &file) |
| |
|
bool | is_order_2_edge (const Tuple &e) const |
| |
|
bool | is_order_2_edge (const std::array< size_t, 2 > &e) const |
| |
| bool | vertex_is_on_surface (const size_t vid) const override |
| | Is a vertex part of the substructure.
|
| |
| bool | face_is_on_surface (const size_t fid) const override |
| | Is a face part of the substructure.
|
| |
| size_t | get_order_of_vertex (const size_t vid) const override |
| | Get the order of a vertex.
|
| |
|
void | init_vertex_order () |
| | Compute the vertex order for every vertex.
|
| |
|
void | compute_vertex_partition () |
| | assign each vertex a partition id (by spatial Morton order) for the parallel ExecutePass policies (kPartition/kColor) used by smooth_all_vertices()/ collapse_all_edges(). A no-op if NUM_THREADS == 0.
|
| |
|
size_t | get_partition_id (const Tuple &loc) const |
| |
|
std::vector< Tuple > | get_face_adjacent_tets (const Tuple &t) const |
| | get tets (as Tuples) that are face-adjacent to the given tet (as Tuple)
|
| |
|
std::vector< size_t > | connected_components_helper (const size_t &v_id) |
| | get all one-ring vertices through input simplices (labelled 1)
|
| |
|
void | reset_connected_components () |
| | reset connected component assignments.
|
| |
|
bool | is_force_split_edge (const size_t v1, const size_t v2) const |
| |
|
| TetOptimizerMesh (OptimizerParameters ¶ms, std::shared_ptr< SampleEnvelope > env) |
| |
| virtual double | quality_rel (const size_t tid) const |
| | A cell's quality relative to the quality it is required to reach; <= 1 means it meets it.
|
| |
|
void | compute_vertex_partition () |
| |
|
void | compute_vertex_partition_morton () |
| |
|
size_t | get_partition_id (const Tuple &loc) const |
| |
|
double | get_length2 (const Tuple &l) const |
| |
|
bool | is_inverted (const std::array< size_t, 4 > &vs) const |
| |
|
bool | is_inverted (const Tuple &loc) const |
| |
|
bool | is_inverted_f (const Tuple &loc) const |
| | Inversion check using only the double positions.
|
| |
|
double | get_quality (const std::array< size_t, 4 > &vs) const |
| |
|
double | get_quality (const Tuple &loc) const |
| |
|
std::tuple< double, double > | get_max_avg_energy () |
| |
|
void | mesh_improvement (int max_its=80) |
| |
|
std::tuple< double, double > | local_operations (const std::array< int, 4 > &ops, bool collapse_limit_length=true) |
| |
| bool | round (const Tuple &v) |
| | Round a vertex position to floating point, if that inverts no incident tet.
|
| |
|
bool | is_edge_on_surface (const Tuple &loc) |
| |
|
bool | is_edge_on_bbox (const Tuple &loc) |
| |
| int | edge_incident_surface_face_count (const Tuple &e) |
| | How many of the faces incident to edge e are on the tracked surface.
|
| |
| bool | surface_triangle_is_outside (const size_t a, const size_t b, const size_t c) const |
| |
|
std::vector< std::array< size_t, 3 > > | get_faces_by_condition (std::function< bool(const FaceAttributes &)> cond) const |
| |
|
void | output_faces (std::string file, std::function< bool(const FaceAttributes &)> cond) |
| |
|
void | gradation_smooth_sizing (double grade, const std::vector< size_t > &seeds) |
| | Grade the refined sizing region into its surroundings (monotone, only lowers).
|
| |
| double | active_quality_threshold () const |
| | Cell-quality threshold above which a tet is "active" (worth operating on) for the skip-good-regions filter.
|
| |
| virtual std::vector< size_t > | active_vertices () const |
| |
|
void | split_all_edges () |
| |
|
void | collapse_all_edges (bool is_limit_length=true) |
| |
| bool | collapse_edge_after (const Tuple &t) override |
| | User specified modifications and desideratas for after an edge collapse.
|
| |
| size_t | coarsen_mesh () |
| | Coarsen the mesh without letting the max energy rise.
|
| |
| bool | coarsen_collapse_edge (const Tuple &e, std::vector< Tuple > &new_tets) |
| | One collapse under the coarsening rules, outside a coarsening pass.
|
| |
|
size_t | swap_all_edges_32 () |
| |
| bool | swap_edge_before (const Tuple &t) override |
| | User specified preparations and desideratas for an 3-2 edge swap before changing the conenctivity.
|
| |
| bool | swap_edge_after (const Tuple &t) override |
| | User specified modifications and desideratas for after a 3-2 edge swap.
|
| |
|
size_t | swap_all_edges_44 () |
| |
| bool | swap_edge_44_before (const Tuple &t) override |
| | User specified preparations and desideratas for an 4-4 edge swap before changing the connectivity.
|
| |
| bool | swap_edge_44_accept_case (const std::array< size_t, 2 > &new_edge) override |
| | Filter which of the 4-4 orientations may be chosen.
|
| |
| bool | swap_edge_44_after (const Tuple &t) override |
| | User specified modifications and desideratas for after a 4-4 edge swap.
|
| |
|
size_t | swap_all_edges_56 () |
| |
| bool | swap_edge_56_before (const Tuple &t) override |
| | User specified preparations and desideratas for a 5-6 edge swap before changing the connectivity.
|
| |
| bool | swap_edge_56_accept_case (const std::array< size_t, 3 > &new_face) override |
| | Filter which of the 5-6 orientations may be chosen.
|
| |
| bool | swap_edge_56_after (const Tuple &t) override |
| | User specified modifications and desideratas for after a 5-6 edge swap.
|
| |
|
size_t | swap_all_faces () |
| |
| bool | swap_face_before (const Tuple &t) override |
| | User specified preparations and desideratas for an 2-3 face swap befroe changing the geometry.
|
| |
| bool | swap_face_after (const Tuple &t) override |
| | User specified modifications and desideratas for after a 2-3 face swap.
|
| |
|
size_t | swap_all_edges_all () |
| |
|
bool | prepare_surface_flip (const Tuple &t, const std::vector< size_t > &incident_tets) |
| |
|
SurfaceTopoSignature | surface_topology_signature () const |
| |
|
void | warn_if_surface_topology_changed (const SurfaceTopoSignature &before, const char *where) const |
| |
| double | swap_edge_44_energy (const std::vector< std::array< size_t, 4 > > &tets, const int op_case) override |
| | User specified energy to decide which of the 4 possible orientations should be chosen.
|
| |
| double | swap_edge_56_energy (const std::vector< std::array< size_t, 4 > > &tets, const int op_case) override |
| | User specified energy to decide which of the 5 possible orientations should be chosen.
|
| |
| virtual std::shared_ptr< SampleEnvelope > | smoothing_containment_envelope (const size_t vid) const |
| | Envelope the resulting surface triangles are checked against.
|
| |
|
void | smooth_all_vertices (const size_t n_iters=1) |
| |
| size_t | vert_capacity () const |
| | get the current largest global vid
|
| |
| size_t | tet_capacity () const |
| | get the current largest global tid
|
| |
|
size_t | vertex_size () const |
| | get the number of unremoved verticies
|
| |
|
size_t | tet_size () const |
| | get the number of unremoved tets
|
| |
| void | init (size_t n_vertices, const std::vector< std::array< size_t, 4 > > &tets) |
| |
|
void | init_with_isolated_vertices (size_t n_vertices, const std::vector< std::array< size_t, 4 > > &tets) |
| |
| void | init (const MatrixXi &T) |
| | Generate the connectivity of the mesh from an IGL-style T matrix.
|
| |
| bool | split_edge (const Tuple &t, std::vector< Tuple > &new_tets) |
| |
| virtual bool | collapse_edge (const Tuple &t, std::vector< Tuple > &new_tets) |
| |
| bool | link_condition (const Tuple &t) |
| |
| bool | collapse_edge_conn (const Tuple &loc0, size_t &v1_id, Tuple &new_loc, std::map< size_t, wmtk::TetMesh::VertexConnectivity > &rollback_vert_conn, std::vector< size_t > &n1_t_ids_copy, std::vector< size_t > &new_tet_id, std::vector< TetrahedronConnectivity > &old_tets) |
| |
| bool | collapse_edge_check_topology (const std::vector< size_t > &new_tet_id) |
| | Check topology after collapse connectivity change. This is a sanity check and should not be necessary.
|
| |
| void | collapse_edge_rollback (size_t &v1_id, std::map< size_t, wmtk::TetMesh::VertexConnectivity > &rollback_vert_conn, std::vector< size_t > &n1_t_ids, std::vector< size_t > &new_tet_id, std::vector< TetrahedronConnectivity > &old_tets) |
| |
| bool | swap_edge_56 (const Tuple &t, std::vector< Tuple > &new_tets) |
| |
| bool | swap_edge_44 (const Tuple &t, std::vector< Tuple > &new_tets) |
| |
| bool | swap_edge (const Tuple &t, std::vector< Tuple > &new_tets) |
| | 3-2 edge swap
|
| |
| bool | swap_face (const Tuple &t, std::vector< Tuple > &new_tets) |
| | 2-3 face swap
|
| |
| bool | smooth_vertex (const Tuple &t) |
| |
| bool | split_tet (const Tuple &t, std::vector< Tuple > &new_tets) |
| | Split a tet in 4 tets.
|
| |
| bool | split_face (const Tuple &t, std::vector< Tuple > &new_tets) |
| | Split a face in 3 faces.
|
| |
| void | triangle_insertion (const std::vector< Tuple > &intersected_tets, const std::vector< Tuple > &intersected_edges, std::vector< size_t > &new_edge_vids, std::vector< size_t > &new_center_vids, std::vector< std::array< size_t, 4 > > ¢er_split_tets) |
| | Insert a triangle into a tetmesh, with known intersection information.
|
| |
| bool | insert_point (const Tuple &t, std::vector< Tuple > &new_tets) |
| | Insert a point into a tetmesh inside a tet. In general position, this split a tet into 4. In face position, split two tets. In edge position, In point position, do nothing.
|
| |
|
virtual bool | insert_point_before (const Tuple &t) |
| |
|
virtual bool | insert_point_after (std::vector< Tuple > &new_tets) |
| |
|
void | consolidate_mesh () |
| | cleans up the deleted vertices or tetrahedra, fixes the corresponding indices, and reset the version number. WARNING: it invalidates all tuples!
|
| |
| std::vector< Tuple > | get_edges () const |
| |
| std::vector< Tuple > | get_faces () const |
| |
| std::vector< Tuple > | get_vertices () const |
| |
| std::vector< Tuple > | get_tets () const |
| |
| virtual void | for_each_face (const std::function< void(const TetMesh::Tuple &)> &) |
| | looping through all the unique edges and perform the given function
|
| |
|
void | set_preallocation_factor (double factor) |
| | Preallocation factor: init/consolidate reserve capacity = max(floor, ceil(factor * live_count)) so operations can grab fresh slots without resizing the storage. When a pass exhausts the reserved capacity the affected operations fail (and are retried later after a consolidate). Tune per application (e.g. from JSON); values < 1 are clamped to 1.
|
| |
|
double | preallocation_factor () const |
| |
|
long | request_tet_slots (size_t n) |
| |
|
long | request_vert_slots (size_t n) |
| |
|
void | ensure_free_tet_capacity (size_t extra) |
| |
|
void | ensure_free_vert_capacity (size_t extra) |
| |
| Tuple | tuple_from_edge (size_t tid, int local_eid) const |
| | get a Tuple from global tetra index and local edge index (from 0-5).
|
| |
| Tuple | tuple_from_edge (const std::array< size_t, 2 > &vids) const |
| | get a Tuple from global vids of the 2 end of an edge
|
| |
| Tuple | tuple_from_face (size_t tid, int local_fid) const |
| | get a Tuple from global tetra index and local face index (from 0-3).
|
| |
| std::tuple< Tuple, size_t > | tuple_from_face (const std::array< size_t, 3 > &vids) const |
| | get a Tuple and the global face index from global vertex index of the face.
|
| |
| std::optional< std::tuple< Tuple, size_t > > | try_tuple_from_face (const std::array< size_t, 3 > &vids) const |
| | tuple_from_face for callers where a missing face is an answer, not a bug.
|
| |
| size_t | lowest_common_tet (size_t v0_id, size_t v1_id, size_t v2_id) const |
| | Lowest tet id incident to all three vertices, or size_t(-1) if there is none.
|
| |
| size_t | vertex_valence (const size_t vid) const |
| | Number of tets incident to a vertex, in O(1).
|
| |
|
std::tuple< Tuple, size_t > | tuple_from_face (const simplex::Face &f) const |
| |
| Tuple | tuple_from_vertex (size_t vid) const |
| | get a Tuple from global vertex index
|
| |
| Tuple | tuple_from_tet (size_t tid) const |
| | get a Tuple from global tetra index
|
| |
|
Tuple | tuple_from_vids (size_t vid0, size_t vid1, size_t vid2, size_t vid3) const |
| | Get a Tuple from global vertex IDs.
|
| |
|
simplex::Tet | simplex_from_tet (const Tuple &t) const |
| |
|
simplex::Tet | simplex_from_tet (const size_t tid) const |
| |
|
simplex::Face | simplex_from_face (const Tuple &t) const |
| |
|
simplex::Edge | simplex_from_edge (const Tuple &t) const |
| |
|
Tuple | switch_vertex (const Tuple &t) const |
| | wrapper function from Tuple::switch_vertex
|
| |
|
Tuple | switch_edge (const Tuple &t) const |
| | wrapper function from Tuple::switch_edge
|
| |
|
Tuple | switch_face (const Tuple &t) const |
| | wrapper function from Tuple::switch_face
|
| |
|
std::optional< Tuple > | switch_tetrahedron (const Tuple &t) const |
| | wrapper function from Tuple::switch_tetrahedron
|
| |
| std::vector< Tuple > | get_one_ring_tets_for_vertex (const Tuple &t) const |
| | Get the one ring tets for a vertex.
|
| |
| const std::vector< size_t > & | get_one_ring_tids_for_vertex (const Tuple &t) const |
| | Get the one ring tids for vertex.
|
| |
|
const std::vector< size_t > & | get_one_ring_tids_for_vertex (const size_t vid) const |
| |
| std::vector< Tuple > | get_one_ring_vertices_for_vertex (const Tuple &t) const |
| | Get the one ring vertices for a vertex.
|
| |
| std::vector< size_t > | get_one_ring_vids_for_vertex (size_t vid, std::vector< size_t > &cache) |
| | Get the one ring vids for vertex.
|
| |
| std::vector< size_t > | get_one_ring_vids_for_vertex (size_t vid) const |
| | Get the one ring vids for vertex.
|
| |
|
std::vector< size_t > | get_one_ring_vids_for_vertex_adj (size_t vid) const |
| | Duplicate of the function TetMesh::get_one_ring_vids_for_vertex.
|
| |
|
std::vector< size_t > | get_one_ring_vids_for_vertex_adj (size_t vid, std::vector< size_t > &cache) |
| | Duplicate of the function TetMesh::get_one_ring_vids_for_vertex.
|
| |
| std::vector< Tuple > | get_incident_tets_for_edge (const Tuple &t) const |
| | Get the incident tets for edge.
|
| |
|
std::vector< Tuple > | get_incident_tets_for_edge (const size_t vid0, const size_t vid1) const |
| |
|
std::vector< size_t > | get_incident_tids_for_edge (const Tuple &t) const |
| |
|
std::vector< size_t > | get_incident_tids_for_edge (const size_t vid0, const size_t vid1) const |
| |
| std::vector< Tuple > | get_one_ring_tets_for_edge (const Tuple &t) const |
| | Get the one ring tets for edge.
|
| |
| std::vector< std::array< size_t, 3 > > | vertex_adjacent_boundary_faces (const Tuple &t) const |
| |
| std::array< Tuple, 4 > | oriented_tet_vertices (const Tuple &t) const |
| |
| std::array< size_t, 4 > | oriented_tet_vids (const Tuple &t) const |
| |
|
std::array< size_t, 4 > | oriented_tet_vids (const size_t tid) const |
| |
| std::array< Tuple, 3 > | get_face_vertices (const Tuple &t) const |
| | Get the 3 vertices of a face represented by Tuple.
|
| |
|
std::array< size_t, 3 > | get_face_vids (const Tuple &t) const |
| |
| std::array< Tuple, 6 > | tet_edges (const Tuple &t) const |
| | get the 6 edges of a tet represented by Tuples
|
| |
| void | check_tuple_validity (const Tuple &t) const |
| |
| bool | check_mesh_connectivity_validity () const |
| | checks the validity of the connectivity of the mesh. Including the validity of each Tuple
|
| |
| void | remove_tets_by_ids (const std::vector< size_t > &tids) |
| | remove the tetrahedrons in the mesh that have given tet ids
|
| |
|
void | start_protect_attributes () |
| |
|
void | release_protect_attributes () |
| |
|
void | rollback_protected_attributes () |
| |
|
int | release_vertex_mutex_in_stack () |
| |
| int | release_vertex_mutex_to (size_t mark) |
| | Release the mutexes taken since the release stack held mark entries.
|
| |
| bool | try_set_vertex_mutex_n_ring (const Tuple &v, int threadid, int n) |
| | Lock every vertex within graph distance n of v, the seed included.
|
| |
|
bool | try_set_vertex_mutex_n_ring (size_t vid, int threadid, int n) |
| |
|
bool | try_set_edge_mutex_n_ring (const Tuple &e, int threadid, int n) |
| | try_set_vertex_mutex_n_ring seeded from both ends of an edge.
|
| |
|
bool | try_set_face_mutex_n_ring (size_t v1, size_t v2, size_t v3, int threadid, int n) |
| | try_set_vertex_mutex_n_ring seeded from the three vertices of a face.
|
| |
|
void | for_each_edge (const std::function< void(const TetMesh::Tuple &)> &) |
| | perform the given function for each edge
|
| |
|
void | for_each_vertex (const std::function< void(const TetMesh::Tuple &)> &) |
| | perform the given function for each vertex
|
| |
|
void | for_each_tetra (const std::function< void(const TetMesh::Tuple &)> &) |
| | perform the given function for each tet
|
| |
| simplex::SimplexCollection | get_surface_faces_for_vertex (const size_t vid) const |
| | Get all faces on the surface that are incident to vid.
|
| |
| simplex::SimplexCollection | get_surface_faces_for_edge (const std::array< size_t, 2 > &vids) const |
| | Get all faces on the surface that are incident to the edge.
|
| |
| size_t | get_num_surface_faces_for_edge (const std::array< size_t, 2 > &vids) const |
| | Get the number of surface faces incident to the edge.
|
| |
| size_t | compute_vertex_order (const size_t vid) const |
| | Compute the vertex order for a single vertex.
|
| |
| size_t | get_order_of_edge (const std::array< size_t, 2 > &vids) const |
| | Compute the order of an edge.
|
| |
| bool | substructure_link_condition (const Tuple &e_tuple) const |
| | Link condition that also considers substructures.
|
| |
|
bool | try_set_vertex_mutex_two_ring (const Tuple &v, int threadid) |
| | Lock v's one-ring and, partially, its two-ring. See the note above.
|
| |
|
bool | try_set_vertex_mutex_two_ring_vid (const Tuple &v, int threadid) |
| | try_set_vertex_mutex_two_ring reached through vids rather than Tuples.
|
| |
|
bool | try_set_vertex_mutex_two_ring_vid (size_t v, int threadid) |
| | try_set_vertex_mutex_two_ring reached through vids rather than Tuples.
|
| |
|
bool | try_set_edge_mutex_two_ring (const Tuple &e, int threadid=0) |
| | Lock the edge's one-ring and, partially, its two-ring. See the note above.
|
| |
|
bool | try_set_face_mutex_two_ring (const Tuple &f, int threadid=0) |
| | Lock the face's one-ring and, partially, its two-ring. See the note above.
|
| |
|
bool | try_set_face_mutex_two_ring (const Tuple &v1, const Tuple &v2, const Tuple &v3, int threadid=0) |
| | Lock the face's one-ring and, partially, its two-ring. See the note above.
|
| |
|
bool | try_set_face_mutex_two_ring (size_t v1, size_t v2, size_t v3, int threadid=0) |
| | Lock the face's one-ring and, partially, its two-ring. See the note above.
|
| |
|
bool | try_set_vertex_mutex_one_ring (const Tuple &v, int threadid=0) |
| | Lock v and its one-ring. Complete, unlike the two-ring family.
|
| |
|
size_t | cell_capacity () const |
| |
|
Tuple | tuple_from_cell (size_t cid) const |
| |
| size_t | round_all_vertices () |
| | Try to round every un-rounded vertex; returns the number reclaimed.
|
| |
| bool | round_and_check_all_rounded () |
| | Run the sweep, then report whether the mesh is now fully rounded.
|
| |