Wildmeshing Toolkit
Loading...
Searching...
No Matches
TagEnvelopes.hpp
1#pragma once
2
3#include <wmtk/envelope/Envelope.hpp>
4
5#include <memory>
6#include <utility>
7#include <vector>
8
9namespace wmtk::components::topological_offset {
10
30{
31public:
32 explicit IntersectionEnvelope(std::vector<std::shared_ptr<SampleEnvelope>> members)
33 : m_members(std::move(members))
34 {}
35
36 bool is_outside(const std::array<Eigen::Vector3d, 3>& tris) const override
37 {
38 for (const auto& e : m_members) {
39 if (e->is_outside(tris)) return true;
40 }
41 return false;
42 }
43
44 bool is_outside(const Eigen::Vector3d& pts) const override
45 {
46 for (const auto& e : m_members) {
47 if (e->is_outside(pts)) return true;
48 }
49 return false;
50 }
51
52 bool is_outside(const std::array<Eigen::Vector2d, 2>& edge) const override
53 {
54 for (const auto& e : m_members) {
55 if (e->is_outside(edge)) return true;
56 }
57 return false;
58 }
59
60 bool is_outside(const Eigen::Vector2d& pts) const override
61 {
62 for (const auto& e : m_members) {
63 if (e->is_outside(pts)) return true;
64 }
65 return false;
66 }
67
68 const std::vector<std::shared_ptr<SampleEnvelope>>& members() const { return m_members; }
69
70private:
71 std::vector<std::shared_ptr<SampleEnvelope>> m_members;
72};
73
77class UnionEnvelope final : public SampleEnvelope
78{
79public:
80 explicit UnionEnvelope(std::vector<std::shared_ptr<SampleEnvelope>> members)
81 : m_members(std::move(members))
82 {}
83
84 bool is_outside(const std::array<Eigen::Vector3d, 3>& tris) const override
85 {
86 for (const auto& e : m_members) {
87 if (!e->is_outside(tris)) return false;
88 }
89 return true;
90 }
91
92 bool is_outside(const Eigen::Vector3d& pts) const override
93 {
94 for (const auto& e : m_members) {
95 if (!e->is_outside(pts)) return false;
96 }
97 return true;
98 }
99
100 bool is_outside(const std::array<Eigen::Vector2d, 2>& edge) const override
101 {
102 for (const auto& e : m_members) {
103 if (!e->is_outside(edge)) return false;
104 }
105 return true;
106 }
107
108 bool is_outside(const Eigen::Vector2d& pts) const override
109 {
110 for (const auto& e : m_members) {
111 if (!e->is_outside(pts)) return false;
112 }
113 return true;
114 }
115
116private:
117 std::vector<std::shared_ptr<SampleEnvelope>> m_members;
118};
119
120} // namespace wmtk::components::topological_offset
Definition Envelope.hpp:52
bool is_outside(const std::array< Eigen::Vector2d, 2 > &edge) const override
Definition TagEnvelopes.hpp:52
bool is_outside(const std::array< Eigen::Vector2d, 2 > &edge) const override
Definition TagEnvelopes.hpp:100