Wildmeshing Toolkit
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
wmtk::InputEnvelopes Class Reference

One envelope per input, and the containment and the pull of an INPUT SET (bit i = input i; see SurfaceTagAttributes::input_set()). More...

#include <CompositeEnvelopes.hpp>

Public Member Functions

void set (std::vector< std::shared_ptr< Envelope > > members)
 
size_t size () const
 
bool empty () const
 
const std::shared_ptr< Envelope > & member (size_t i) const
 
std::shared_ptr< Envelope > containment (const InputSet set) const
 
template<typename Point >
std::shared_ptr< Envelope > pull (const InputSet set, const Point &p) const
 The member of set farthest from p (Vector2d or Vector3d). Ties go to the lower input.
 

Private Member Functions

void check (const InputSet set) const
 

Static Private Member Functions

static size_t lowest_bit (const InputSet set)
 

Private Attributes

std::vector< std::shared_ptr< Envelope > > m_members
 
std::map< InputSet, std::shared_ptr< Envelope > > m_intersections
 Built on first use, under the mutex: the operations ask concurrently.
 
std::shared_mutex m_mutex
 

Detailed Description

One envelope per input, and the containment and the pull of an INPUT SET (bit i = input i; see SurfaceTagAttributes::input_set()).

The invariant it serves: a tracked simplex stays within eps of every input in its set. containment() is therefore that input's own envelope for a one-input set, and the IntersectionEnvelope over the set's members for a larger one – containment only, by the contract above. pull() is the real member envelope a vertex is drawn toward, the set's most-violated member at the vertex's position, as topological_offset pulls a junction vertex: the containment check then enforces the whole set, one real envelope pulls at a time.

An empty set has no containment: a tracked simplex carrying one is an insertion or propagation defect, and throws rather than being held by some envelope it never covered.

Member Function Documentation

◆ set()

void wmtk::InputEnvelopes::set ( std::vector< std::shared_ptr< Envelope > >  members)
inline

Member i is input i's envelope; null for an input no tracked simplex can cover (one with no triangle). Not while the operations run: it drops the intersections built so far.


The documentation for this class was generated from the following file: