|
Wildmeshing Toolkit
|
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 |
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.
|
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.